首页 > 解决方案 > 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')

谢谢!

标签: pythonlightgbm

解决方案


这似乎是不可能的。

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


推荐阅读