Che*_* Wu 5 python cross-validation grid-search xgboost 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()与两个分类器一起使用时的代码示例:
带GridSearchCV的XGBC分类器
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_
Run Code Online (Sandbox Code Playgroud)
这对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_
Run Code Online (Sandbox Code Playgroud)
但是,通过对LightGBM使用这种方法,它一直运行整个今天早上仍然没有生成.
我使用相同的数据集,数据集包含30000条记录.
我有两个问题:
cv()方法,无论如何都要调整最佳参数集?GridSearchCV()LightGBM效果不好吗?我想知道这是否只发生在我身上发生在其他人身上?尝试使用n_jobs = 1看看是否有效。
一般来说,如果您使用n_jobs = -1或n_jobs > 1那么您应该使用以下方法来保护您的脚本if __name__=='__main__'::
简单示例:
import ...
if __name__=='__main__':
data= pd.read_csv('Prior Decompo2.csv', header=None)
X, y = data.iloc[0:, 0:26].values, data.iloc[0:,26].values
param_grid = {'C' : [0.01, 0.1, 1, 10], 'kernel': ('rbf', 'linear')}
classifier = SVC()
grid_search = GridSearchCV(estimator=classifier, param_grid=param_grid, scoring='accuracy', n_jobs=-1, verbose=42)
grid_search.fit(X,y)
Run Code Online (Sandbox Code Playgroud)
最后,您可以尝试使用 n_jobs = -1并包含if __name__=='__main__':我所解释的内容来运行您的代码,看看它是否有效?
| 归档时间: |
|
| 查看次数: |
5773 次 |
| 最近记录: |