带有LGBMRegressor的GridSearchCV无法找到最佳参数

问题描述

我有2个回归变量:

import lightgbm as lgb
from sklearn.model_selection import GridSearchCV

params = {
    'num_leaves': [7,14,21,28,31,50],'learning_rate': [0.1,0.03,0.003],'max_depth': [-1,3,5],'n_estimators': [50,100,200,500],}

grid = GridSearchCV(lgb.LGBMRegressor(random_state=0),params,scoring='r2',cv=5)
grid.fit(X_train,y_train)

reg = lgb.LGBMRegressor(random_state=0)

如您所见,我为两个回归变量都定义了random_stateGridSearchCV必须找到最佳参数,以使估算器增加其scroring。但是

r2_score(y_train,grid.predict(X_train)) # output is 0.69
r2_score(y_train,reg.predict(X_train))  # output is 0.84

那么,如何找到LGBMRegressor的最佳参数?

解决方法

根据grid.fit()之后的documentaion,您可以在此处找到最佳估算器(就绪模型)和参数:

grid.best_estimator_
grid.best_params_

仅供参考:random_state仅适用于随机情况(例如,在改组时)。
在您的情况下,模型的参数不同,度量标准R2的结果也不同。

,

所以,我相信你必须像这样编写脚本:

params = {
    'num_leaves': [7,14,21,28,31,50],'learning_rate': [0.1,0.03,0.003],'max_depth': [-1,3,5],'n_estimators': [50,100,200,500],}

grid = GridSearchCV(lgb.LGBMRegressor(random_state=0),params,scoring='r2',cv=5)
grid.fit(X_train,y_train)

reg = lgb.LGBMRegressor(random_state=0)
reg.fit(X_train,y_train)

lgbm_tuned = grid.best_estimator_

r2_tuned = grid.best_params_
r2_regular = r2_score(y_train,reg.predict(X_train))

当 r2_tuned 是使用网格搜索找到的最佳分数时,lgbm_tuned 是您使用最佳参数定义的模型,而 r2_regular 是您使用默认参数的分数。

gridsearch 之后发现一个最差的结果很奇怪,特别是当 gridsearch 的参数包含 LightGBM 的默认参数时。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...