最近,我正在做多個實驗來比較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