最近,我正在做多个实验来比较Python XgBoost和LightGBM。看起来这个LightGBM是一种新的算法,人们说它在速度和准确性方面比XGBoost更好。Python - LightGBM与GridSearchCV,永远在运行
这是LightGBM GitHub。 这是LightGBM python API documents,在这里你会发现你可以调用的python函数。它可以直接从LightGBM模型调用,也可以通过LightGBM scikit-learn调用。
这是我使用的XGBoost Python API。如您所见,它与上面的LightGBM python API具有非常相似的数据结构。
这里是我的尝试:
- 如果您在这两个XGBoost和LightGBM使用
train()
方法,是lightGBM工作速度更快,具有更高的精度。但是这种方法没有交叉验证。 - 如果您在两种算法中都尝试使用
cv()
方法,则需要进行交叉验证。但是,我没有找到使用它的方法返回一组最佳参数。 - 如果您尝试使用LGBMClassifier和XGBClassifer scikit-learn
GridSearchCV()
。它适用于XGBClassifer,但对于LGBClassifier,它将永远运行。与GridSearchCVparam_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,只有工具数秒
XGBClassifier:
这里使用时GridSearchCV()
与两个分类是我的代码示例。
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条记录。
我有2个问题:
- 如果我们只是用
cv()
方法,反正是有调整最佳的一组参数? - 你知道为什么
GridSearchCV()
与LightGBM不兼容吗?我想知道这是否只发生在我身上发生在别人身上?
这似乎是一个已知问题。你可以看到[这里](https://github.com/Microsoft/LightGBM/issues/246)。你可以尝试通过减少n_jobs来运行脚本吗? – Sriram
我不能相信它......只有当我设置'n_jobs = 1'时,它才能工作,即使它并行运行2个作业,它也会冻结。非常感谢你!我认为更多的工作运行得更快,因此从未试图改变工作数量,也没有找到解决方案。你可以把它作为解决方案,以便我可以关闭这个问题。 –
你知道如何使用cv()吗?或者如何在没有GridSearchCV的LightGBM中进行交叉验证? – Alex