问题标签 [lightgbm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python - 带有 GridSearchCV 的 LightGBM,永远运行
最近,我正在做多个实验来比较 Python XgBoost 和 LightGBM。看来这个 LightGBM 是一种新算法,人们说它在速度和准确性上都比 XGBoost 更好。
这是LightGBM GitHub。这是LightGBM python API 文档,在这里你会找到可以调用的 python 函数。它可以直接从 LightGBM 模型中调用,也可以由 LightGBM scikit-learn 调用。
这是我使用的XGBoost Python API 。如您所见,它的数据结构与上面的 LightGBM python API 非常相似。
这是我尝试过的:
- 如果你
train()
在 XGBoost 和 LightGBM 中都使用方法,是的,lightGBM 工作得更快,精度更高。但是这种方法没有交叉验证。 - 如果您
cv()
在两种算法中都尝试方法,则用于交叉验证。但是,我没有找到一种方法来使用它返回一组最佳参数。 - 如果您尝试
GridSearchCV()
使用 LGBMClassifier 和 XGBClassifer 进行 scikit-learn。它适用于 XGBClassifer,但对于 LGBClassifier,它会永远运行。
GridSearchCV()
以下是与这两个分类器一起使用时的代码示例:
XGBClassifier 与 GridSearchCV
这对 XGBoost 非常有效,而且只需几秒钟。
LightGBM 与 GridSearchCV
但是,通过对 LightGBM 使用这种方法,它今天已经运行了整个上午,仍然没有生成任何东西。
我正在使用相同的数据集,一个数据集包含 30000 条记录。
我有两个问题:
- 如果我们只是使用
cv()
方法,是否有办法调整最佳参数集? - 你知道为什么
GridSearchCV()
LightGBM 不能很好地工作吗?我想知道这是否只发生在我身上而发生在其他人身上?
python - 在 python 中使用 LightGBM 包时正确的标签类型分配
我正在尝试在 Python 中使用 LightGBM 包并遇到此错误:
“TypeError:标签的类型(ndarray)错误,应该是列表或numpy数组”。
我的目标(标签)被创建为:y_train.values 并且是一个具有以下特征的数组:
当我追溯这个错误时,我发现了这个代码 @lightgbm包的Basic.py代码:
函数 list_to_1d_numpy 抛出此错误。
虽然这个函数应该抛出错误,但我找不到任何原因。但是它正在调用一个检查条件的函数 is_numpy_1d_array
len(data.shape) == 1, however when i do len(y_train.shape)
它说2。
有什么想法可以解决吗?
lightgbm - LightGBM:继续训练模型
我正在使用交叉验证训练模型,如下所示:
我想通过多次运行第二个命令(可能使用新的训练集或使用不同的参数)来继续训练模型,它将继续改进模型。
但是,当我尝试这样做时,很明显该模型每次都是从头开始的。
有没有不同的方法来做我想做的事情?
python - 将 LGMBResgressor 导入到 lightgib 时出错
导入LGBMResgressor
时出现以下错误lightgbm
:
lightgbm
的版本为 2.0.5,由pip install lightgbm
.
python - 熊猫分类新关卡
pandas categorical https://pandas.pydata.org/pandas-docs/stable/categorical.html如何处理新的和看不见的关卡?我正在考虑一个类似 scikit-learn 的设置。目前,我有类似的东西: https ://gist.github.com/geoHeil/5caff5236b4850d673b2c9b0799dc2ce
但这很慢。
显然,像 xgboost 或 lightbm 这样的决策树可以直接处理分类数据,即不需要手动处理这种缓慢的转换。但是当查看他们的代码
https://github.com/Microsoft/LightGBM/blob/master/python-package/lightgbm/sklearn.py#L532时,他们似乎使用LGBMLabelEncoder
的是标准的 scikit-learn LabelEncoder
。
我想知道如何处理看不见的数据。
如果需要手动转换,pandas.Categorical 是否允许更快的转换——即使新数据中有未见过的级别?
编辑
请参阅https://github.com/geoHeil/pythonQuestions/blob/master/categorical-encoding.ipynb了解我如何无法让 scikit-learn 的常见嫌疑人工作的概述。仍在寻找比我的解决方案更高效的东西。lightGBM https://github.com/Microsoft/LightGBM/issues/789还建议使用自定义编码策略。
python - 在 windows 上安装 lightgbm
我pip to install lightgbm
在windows上用,有用吗?
因为我在导入 LGBMRegressor 时出错。错误显示如下
python - LightGBM 内部问题
无法理解 LightGBM(Windows 平台)发生了什么。以前我有这个算法真的很强大,但现在他的表现太糟糕了。
为了比较(每个算法中的默认参数)LightGBM 根据简单的DIFF -metric = (actual - prediction)执行:
- CatBoostRegressor() - 18142884
- XGBoostRegressor() - 20235110
- GradientBoostingRegressor() - 20437130
- LGBMRegressor() - 60296698(版本=2.0.5)
我试图用 HyperOpt 找到一些更好的参数,但也没有成功
最好的结果只是450422301
,与上面的相比,这是非常糟糕的。
作为所有 scikit-learn API 使用的示例:
python - 在 LightGBM python API 中调用 feature_importance 时遇到分段错误
我正在使用 LightGBM 2.0.6 Python API。我的训练数据有大约 80K 样本和 400 个特征,我正在训练一个迭代次数约为 2000 次的模型,该模型用于多类分类(#classes = 10)。当模型被训练时,当我打电话时model.feature_importance()
,我遇到了分段错误。
我尝试生成人工数据进行测试(具有相同数量的样本、类、迭代和超参数),并且可以成功获得特征重要性列表。因此我怀疑问题是否发生取决于训练数据。
我想看看其他人是否遇到过这个问题,如果有,是如何克服的。谢谢你。
scikit-learn - LightGBM/sklearn 管道转换器不在 fit_params['eval_set'] 上运行
当使用GridSearchCV
usingearly_stopping_rounds
或外部测试集与 a 结合使用Pipeline
时,似乎eval_set
被管道忽略了。该fit
函数仅适用于训练数据,而 eval_set 数据仅传递给最终估计器,而无需在其上运行 Transformer。
有没有解决这个问题的好方法?我附上了一个小例子,表明 eval_set 没有被管道转换。我已经读过可以以某种方式扩展分类器,但我不确定如何从中访问管道对象。