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

Lightgbm can't access data from Dataset get_field method

我有一个简单的 lgbm 数据集:

import lightgbm as lgbm

dataset = lgbm.Dataset(data=X, label=y, feature_name=X.columns.tolist())

其中 X 是一个 pandas df,而 y 是一个 pandas 系列。我想在我的自定义 objective 函数中访问 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 构造函数参数的其余部分作为附加功能处理。除了可以在 _lazy_init function. Filed setting in C back-end is handled by SetXXXField functions as handled by the LGBM_DatasetSetField function 中跟踪的 lgb.Dataset.set_field 函数之外,您可以看到所有这些数据。您会看到这些调用不会出现在 c_api.cpp

中的其他地方