如何解决AttributeError: 'MultiOutputRegressor' 对象没有属性 'best_params_'
我正在尝试使用网格搜索为多输出回归器问题找到最佳参数。我的代码如下:
import xgboost as xgb
from sklearn.datasets import make_multilabel_classification
from sklearn.model_selection import train_test_split
from sklearn.multioutput import MultiOutputClassifier,MultiOutputRegressor
from sklearn.metrics import accuracy_score
parameters = {'nthread':[4],#when use hyperthread,xgboost may become slower
'objective':['reg:linear'],'learning_rate': [.03,0.05,.07],#so called `eta` value
'max_depth': [5,6,7],'min_child_weight': [4],'silent': [1],'subsample': [0.7],'colsample_bytree':[0.7],'n_estimators': [500]}
model = xgb.XGBRegressor()
xgb_grid = GridSearchCV(model,parameters,cv = 2,n_jobs = 5,verbose=True)
multilabel_model = MultiOutputRegressor(xgb_grid)
multilabel_model.fit(X_train,y_train)
print(multilabel_model.best_score_)
print(multilabel_model.best_params_)
该模型似乎正确拟合,因为它在执行后运行了一段时间。但是,当它完成时,我尝试运行 best_score_ 和 best_params_ 但都给了我错误。我将如何从多输出回归器中找到最佳参数?提前感谢您的帮助!
编辑: 我也尝试过以下操作:
print(xgb_grid.best_score_)
print(xgb_grid.best_params_)
但这导致了以下错误:AttributeError: 'GridSearchCV' object has no attribute 'best_score_'。 AttributeError: 'GridSearchCV' 对象没有属性 'best_params_'。
这促使我尝试以下操作:
parameters = {'nthread':[4],'learning_rate': [0.03],#,0.07],#so called `eta` value
'max_depth': [1],5,'n_estimators': [100]}
model = xgb.XGBRegressor()
multilabel_model = MultiOutputRegressor(model)
xgb_grid = GridSearchCV(multilabel_model,verbose=True)
# fit the model
xgb_grid.fit(X_for_training,y_train)
但后来我收到此错误:ValueError: Invalid parameter colsample_bytree for estimator MultiOutputRegressor。我不确定这是为什么,因为它们在参数字典和回归器的参数输入中拼写相同,并且值是浮点数。我是否以某种方式错误地定义了我的参数值?
解决方法
MultiOutputRegressor
类没有这样的属性。也许您正在寻找这个:
print(xgb_grid.best_score_)
print(xgb_grid.best_params_)
,
事实证明我定义了我的参数字典错误。工作代码如下:
parameters = {'estimator__nthread':[4],#when use hyperthread,xgboost may become slower
'estimator__objective':['reg:linear'],'estimator__learning_rate': [0.03,0.05,0.07],#so called `eta` value
'estimator__max_depth': [5,6,7],'estimator__min_child_weight': [4],'estimator__silent': [1],'estimator__subsample': [0.7],'estimator__colsample_bytree':[0.7]}
'estimator__n_estimators': [500]}
model = xgb.XGBRegressor()
multilabel_model = MultiOutputRegressor(model)
xgb_grid = GridSearchCV(multilabel_model,parameters,cv = 2,n_jobs = 5,verbose=True)
# fit the model
xgb_grid.fit(X_for_training,y_train)
print(xgb_grid.best_score_)
print(xgb_grid.best_params_)
best_model = xgb_grid.best_estimator_
字典中每个参数之前的 estimator__ 是用来做什么的!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。