优化多输出梯度提升的学习率和估计数

2024-10-01 13:45:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个具有多个输出的数据集,并试图使用梯度推进一次预测所有的值。我引进了多输出分离器,因此可以一次预测多个输出;我可以让它为默认的梯度增强函数工作。然而,当我试图为每个输出优化梯度增强函数时,我遇到了一个错误

from sklearn.ensemble import GradientBoostingRegressor
from sklearn.multioutput import MultiOutputRegressor
from sklearn import ensemble

params = {'max_depth': 3, 'n_estimators': 100, 'learning_rate': 0.1}
gradient_regressor = MultiOutputRegressor(ensemble.GradientBoostingRegressor(**params))
GradBoostModel = gradient_regressor.fit(X_train, y_train)
prediction_GradBoost = GradBoostModel.predict(X_test)


LR = {'learning_rate':[0.15, 0.125, 0.1, 0.75, 0.05], 'n_estimators':[50, 75, 100, 150, 200, 250, 300, 400]}

tuning = GridSearchCV(estimator = GradBoostModel, param_grid = LR, scoring = 'r2')
tuning.fit(X_train, y_train)
tuning.best_params_, tuning.best_score_

我试图使用GridSearchCV循环浏览列出的学习率和估计数,以找到最佳值。但是,我得到了以下错误:

Invalid parameter learning_rate for estimator MultiOutputRegressor. 
Check the list of available parameters with `estimator.get_params().keys()`

我想我理解这个错误的原因:当我试图优化梯度增强参数时,它们会通过多输出分离器,而多输出分离器无法识别它们。是这样吗?另外,如何更改代码,以便为每个输出优化这些参数


Tags: fromimportrate错误trainparamssklearnlearning
1条回答
网友
1楼 · 发布于 2024-10-01 13:45:07

实际上,params的前缀是estimator__,一般来说,为了找出在管道下游使用哪些params,请在模型上使用.get_params().keys()方法,例如:

print(GradBoostModel.get_params().keys())
dict_keys(['estimator__alpha', 'estimator__ccp_alpha', 'estimator__criterion', 'estimator__init', 'estimator__learning_rate',...

linnerud数据集的完整工作示例:

from sklearn.ensemble import GradientBoostingRegressor
from sklearn.multioutput import MultiOutputRegressor
from sklearn.datasets import load_linnerud
from sklearn.model_selection import train_test_split, GridSearchCV
import numpy as np

# Data
rng = np.random.RandomState(0)
X, y = load_linnerud(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=rng)

# Model
params = {'max_depth': 3, 'n_estimators': 100, 'learning_rate': 0.1}
gradient_regressor = MultiOutputRegressor(GradientBoostingRegressor(**params))
GradBoostModel = gradient_regressor.fit(X_train, y_train)
prediction_GradBoost = GradBoostModel.predict(X_test)
LR = {'estimator__learning_rate': [0.15, 0.125, 0.1, 0.75, 0.05], 'estimator__n_estimators': [50, 75, 100, 150, 200, 250, 300, 400]}
print('Params from GradBoostModel', GradBoostModel.get_params().keys())
tuning = GridSearchCV(estimator=GradBoostModel, param_grid=LR, scoring='r2')
tuning.fit(X_train, y_train)

相关问题 更多 >