我有一个简单的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')
谢谢!
答案 0 :(得分:2)
似乎不可能。
data
似乎是数据集的核心,而lgb.Dataset
构造函数参数的其余部分作为附加功能处理。您可以在lgb.Dataset.set_field
函数中查看除_lazy_init
function中可以跟踪的数据以外的所有数据。 C后端中的归档设置由SetXXXField
函数处理,由LGBM_DatasetSetField function处理。您会看到这些调用未显示在c_api.cpp