使用 LightGBM 回归进行网格搜索

Grid search with LightGBM regression

我想用 Light GBM 训练一个回归模型,下面的代码可以正常工作:

import lightgbm as lgb

d_train = lgb.Dataset(X_train, label=y_train)
params = {}
params['learning_rate'] = 0.1
params['boosting_type'] = 'gbdt'
params['objective'] = 'gamma'
params['metric'] = 'l1'
params['sub_feature'] = 0.5
params['num_leaves'] = 40
params['min_data'] = 50
params['max_depth'] = 30

lgb_model = lgb.train(params, d_train, 1000)

#Prediction
y_pred=lgb_model.predict(X_test)
mae_error = mean_absolute_error(y_test,y_pred)

print(mae_error)

但是当我继续使用GridSearchCV 时,我遇到了问题。我不完全确定如何正确设置它。我找到了有用的资源,例如 here,但它们似乎在使用分类器。

第一次尝试:

from sklearn.metrics import make_scorer
score_func = make_scorer(mean_absolute_error, greater_is_better=False)

model = lgb.LGBMClassifier( 
    boosting_type="gbdt",
    objective='regression',
    is_unbalance=True, 
    random_state=10, 
    n_estimators=50,
    num_leaves=30, 
    max_depth=8,
    feature_fraction=0.5,  
    bagging_fraction=0.8, 
    bagging_freq=15, 
    learning_rate=0.01,    
)

params_opt = {'n_estimators':range(200, 600, 80), 'num_leaves':range(20,60,10)}
gridSearchCV = GridSearchCV(estimator = model, 
    param_grid = params_opt, 
    scoring=score_func)
gridSearchCV.fit(X_train,y_train)
gridSearchCV.grid_scores_, gridSearchCV.best_params_, gridSearchCV.best_score_

,之前给我一堆错误:

"ValueError: Unknown label type: 'continuous'"

更新:我编写了代码 运行 将 LGBMClassifier 与 LGBMModel 切换。我是否也应该尝试使用 LGBMRegressor,还是这无关紧要? (来源:https://lightgbm.readthedocs.io/en/latest/_modules/lightgbm/sklearn.html

首先,不清楚您的数据的性质是什么,因此哪种类型的模型更适合。你使用 L1 指标,所以我假设你有某种回归问题。如果不是,请纠正我并详细说明你为什么使用 L1 指标。如果是,那么不清楚为什么要使用 LGBMClassifier,因为它解决了 class 化问题(正如@bakka 已经指出的那样)。

请注意,实际上 LGBMModelLGBMRegressor 相同(您可以在代码中看到)。但是,不能保证这种情况在未来的长期内会保持不变。因此,如果您想编写良好且可维护的代码 - 请 而不是 使用基础 class LGBMModel,除非您非常清楚自己在做什么、为什么以及做什么是后果。

关于参数范围:见this answer on github