最近,我做了多个实验来比较Python XgBoost和LightGBM。似乎LightGBM是一种新算法,人们说它在速度和准确性方面都优于XGBoost。
LightGBM GitHub
.
这是
LightGBM python API documents
XGBoost Python API
我使用。如您所见,它的数据结构与上面的LightGBM python API非常相似。
以下是我尝试的内容:
-
如果您使用
train()
-
cv()
方法在两种算法中,都是用于交叉验证。然而,我没有找到使用它返回一组最佳参数的方法。
-
GridSearchCV()
使用LGBMClassifier和XGBClassifier。它适用于XGBClassifier,但对于LGBClassizer,它将永远运行。
下面是我使用时的代码示例
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_
我使用的是同一个数据集,一个数据集包含30000条记录。
-
如果我们只是使用
cv()
方法,是否有优化参数集的方法?
-
你知道为什么吗
LightGBM不能很好地工作?我想知道这是否只发生在我身上,而其他人身上发生的一切?