gpt4 book ai didi

Python - 带有 GridSearchCV 的 LightGBM,永远运行

转载 作者:太空狗 更新时间:2023-10-30 01:32:08 25 4
gpt4 key购买 nike

最近,我正在做多个实验来比较 Python XgBoost 和 LightGBM。看来这个 LightGBM 是一个新的算法,人们说它在速度和准确性上都比 XGBoost 更好。

这是 LightGBM GitHub .这是 LightGBM python API documents ,在这里您会找到可以调用的 python 函数。可以在LightGBM模型中直接调用,也可以通过LightGBM scikit-learn调用。

这是 XGBoost Python API我用。如您所见,它与上面的 LightGBM python API 具有非常相似的数据结构。

这是我尝试过的:

  1. 如果您在 XGBoost 和 LightGBM 中都使用 train() 方法,是的,lightGBM 工作得更快并且具有更高的准确性。但是这种方法没有交叉验证。
  2. 如果您在两种算法中都尝试使用 cv() 方法,则它用于交叉验证。但是,我没有找到使用它返回一组最佳参数的方法。
  3. 如果您使用 LGBMClassifier 和 XGBClassifer 尝试 scikit-learn GridSearchCV()。它适用于 XGBClassifer,但对于 LGBClassifier,它会永远运行。

以下是我对两个分类器使用 GridSearchCV() 时的代码示例:

带有 GridSearchCV 的 XGBClassifier

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 条记录。

我有两个问题:

  1. 如果我们只使用cv() 方法,是否可以调整最佳参数集?
  2. 你知道为什么 GridSearchCV() 不能很好地与 LightGBM 一起工作吗?我想知道这是否只发生在我身上,其他人也会发生吗?

最佳答案

尝试使用 n_jobs = 1 看看它是否有效。

通常,如果您使用 n_jobs = -1n_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)

最后,您能否像我解释的那样尝试使用 n_jobs = -1 并包括 if __name__=='__main__': 来运行您的代码,看看它是否有效?

关于Python - 带有 GridSearchCV 的 LightGBM,永远运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45045938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com