【问题标题】:GridSearchCV with lightgbm requires fit() method not used?带有 lightgbm 的 GridSearchCV 需要不使用 fit() 方法?
【发布时间】:2020-06-30 08:54:36
【问题描述】:

我正在尝试在 LightGBM 估计器上使用 sklearn 执行 GridSearchCV,但在构建搜索时遇到了问题。

我要构建的代码如下所示:

d_train = lgb.Dataset(X_train, label=y_train)
params = {}
params['learning_rate'] = 0.003
params['boosting_type'] = 'gbdt'
params['objective'] = 'binary'
params['metric'] = 'binary_logloss'
params['sub_feature'] = 0.5
params['num_leaves'] = 10
params['min_data'] = 50
params['max_depth'] = 10

clf = lgb.train(params, d_train, 100)

param_grid = {
    'num_leaves': [10, 31, 127],
    'boosting_type': ['gbdt', 'rf'],
    'learning rate': [0.1, 0.001, 0.003]
    }


gsearch = GridSearchCV(estimator=clf, param_grid=param_grid)
lgb_model = gsearch.fit(X=train, y=y)

但是我遇到了以下错误:

TypeError: estimator should be an estimator implementing 'fit' method, 
          <lightgbm.basic.Booster object at 0x0000014C55CA2880> was passed

但是,LightGBM 是使用 train() 方法而不是 fit() 训练的,因此这个网格搜索不可用吗?

谢谢

【问题讨论】:

标签: python scikit-learn grid-search lightgbm


【解决方案1】:

您使用的lgb 对象不支持scikit-learn API。这就是为什么你不能以这种方式使用它。

但是,lightgbm 包提供了与scikit-learn API 兼容的类。根据您尝试完成的监督学习任务(分类或回归),使用LGBMClassifierLGBMRegressor。分类任务示例:

from lightgbm import LGBMClassifier
from sklearn.model_selection import GridSearchCV


clf = LGBMClassifier()
param_grid = {
    'num_leaves': [10, 31, 127],
    'boosting_type': ['gbdt', 'rf'],
    'learning rate': [0.1, 0.001, 0.003]
}

gsearch = GridSearchCV(estimator=clf, param_grid=param_grid)
gsearch.fit(X_train, y_train)

【讨论】:

    猜你喜欢
    • 2019-02-01
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 2019-04-24
    相关资源
    最近更新 更多