问题描述
我有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_state
。 GridSearchCV
必须找到最佳参数,以使估算器增加其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 的默认参数时。