python - Lightgbm 无法从 Dataset get_field 方法访问数据
问题描述
我有一个简单的 lgbm 数据集:
import lightgbm as lgbm
dataset = lgbm.Dataset(data=X, label=y, feature_name=X.columns.tolist())
其中X是 pandas df,y是 pandas 系列。我想在我的自定义目标函数中访问X的特定列。但是当我尝试时:
data = dataset.get_field('data')
我收到此错误消息:
Traceback (most recent call last):
File "<ipython-input-71-34d27860b9e3>", line 1, in <module>
data = dataset.get_field('data')
File "/Users/***/anaconda3/envs/py3k/lib/python3.6/site-packages/lightgbm/basic.py", line 1007, in get_field
ctypes.byref(out_type)))
File "/Users/***/anaconda3/envs/py3k/lib/python3.6/site-packages/lightgbm/basic.py", line 48, in _safe_call
raise LightGBMError(_LIB.LGBM_GetLastError())
LightGBMError: b'Field not found'
而这运作良好:
y = dataset.get_field('label')
谢谢!
解决方案
这似乎是不可能的。
data
似乎是数据集的核心,而其余的构造lgb.Dataset
函数参数则作为附加功能处理。您可以在函数中看到除数据之外的所有数据,lgb.Dataset.set_field
因为可以在函数中_lazy_init
跟踪。C 后端中的归档设置由LGBM_DatasetSetField 函数SetXXXField
处理的 函数处理。您会看到这些调用不会出现在c_api.cpp
推荐阅读
- java - Avro SchemaBuilder - 十进制逻辑类型的“无法覆盖属性:比例”
- docker - 如何在 localhost 中将 phpmyadmin 作为域打开?
- ruby - 组合所有组合以获得完整的集合
- keras - 理解 keras Conv2DTranspose 的输出形状
- vba - 为什么这会为每个工作簿创建两封电子邮件?
- stanford-nlp - 有没有更小的斯坦福 CoreNLP 版本?
- java - 每 30 秒查询一次 PostgreSQL 的有效方法?
- ubuntu - 当我进行 Jmeter 压力测试时,是什么阻止了我的 IP 地址?
- java - 片段和主要活动之间的nullPointerException,android / android-studio
- hazelcast - Hazelcast 便携式序列化