最近,我正在做多个实验来比较 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
param_set = {
'n_estimators':[50, 100, 500, 1000]
}
gsearch = GridSearchCV(estimator = XGBClassifier( learning_rate =0.1,
n_estimators=100, max_depth=5,
min_child_weight=1, gamma=0, subsample=0.8, colsample_bytree=0.8,
nthread=7,
objective= 'binary:logistic', scale_pos_weight=1, seed=410),
param_grid = param_set, scoring='roc_auc',n_jobs=7,iid=False, cv=10)
xgb_model2 = gsearch.fit(features_train, label_train)
xgb_model2.grid_scores_, xgb_model2.best_params_, xgb_model2.best_score_
这对 XGBoost 非常有效,而且只需几秒钟。
LightGBM 与 GridSearchCV
param_set = {
'n_estimators':[20, 50]
}
gsearch = GridSearchCV(estimator = LGBMClassifier( boosting_type='gbdt', num_leaves=30, max_depth=5, learning_rate=0.1, n_estimators=50, max_bin=225,
subsample_for_bin=0.8, objective=None, min_split_gain=0,
min_child_weight=5,
min_child_samples=10, subsample=1, subsample_freq=1,
colsample_bytree=1,
reg_alpha=1, reg_lambda=0, seed=410, nthread=7, silent=True),
param_grid = param_set, scoring='roc_auc',n_jobs=7,iid=False, cv=10)
lgb_model2 = gsearch.fit(features_train, label_train)
lgb_model2.grid_scores_, lgb_model2.best_params_, lgb_model2.best_score_
但是,通过对 LightGBM 使用这种方法,它今天已经运行了整个上午,仍然没有生成任何东西。
我正在使用相同的数据集,一个数据集包含 30000 条记录。
我有两个问题:
- 如果我们只是使用
cv()
方法,是否有办法调整最佳参数集? - 你知道为什么
GridSearchCV()
LightGBM 不能很好地工作吗?我想知道这是否只发生在我身上而发生在其他人身上?