Lightgbm无法从Dataset get_field方法访问数据

时间:2018-05-15 22:14:07

标签: python lightgbm

我有一个简单的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')

谢谢!

1 个答案:

答案 0 :(得分:2)

似乎不可能。

data似乎是数据集的核心,而lgb.Dataset构造函数参数的其余部分作为附加功能处理。您可以在lgb.Dataset.set_field函数中查看除_lazy_init function中可以跟踪的数据以外的所有数据。 C后端中的归档设置由SetXXXField函数处理,由LGBM_DatasetSetField function处理。您会看到这些调用未显示在c_api.cpp

的其他位置