GridSearchCV 和 ValueError:估计器管道的参数 alpha 无效
Posted
技术标签:
【中文标题】GridSearchCV 和 ValueError:估计器管道的参数 alpha 无效【英文标题】:GridSearchCV and ValueError: Invalid parameter alpha for estimator Pipeline 【发布时间】:2020-08-11 04:15:18 【问题描述】:我想将StandardScaler
与GridSearchCV
一起使用,并为Ridge
回归模型找到最佳参数。
但我收到以下错误:
raise ValueError('估计器 %s 的参数 %s 无效。' ValueError:估计器管道的参数 alpha 无效(内存 = 无, steps=[('standardscaler', StandardScaler(copy=True, with_mean=True, with_std=True)),('ridge', Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None, normalize=False ,随机状态=无, 求解器='auto',tol=0.001))],详细=假)。使用 estimator.get_params().keys() 检查可用参数列表
谁能帮帮我?
import numpy as np; import pandas as pd; import matplotlib.pyplot as plt;
import plotly.express as px
from sklearn.linear_model import LinearRegression, Ridge,Lasso, ElasticNet
from sklearn.model_selection import cross_val_score,GridSearchCV, train_test_split
from sklearn.metrics import mean_squared_error
x_data=pd.read_excel('Input-15.xlsx')
y_data=pd.read_excel('Output-15.xlsx')
X_train, X_test,Y_train,Y_test=train_test_split(x_data,y_data,test_size=0.2,random_state=42)
########### Ridge regression model ###########
rige=Ridge(normalize=True)
rige.fit(X_train,Y_train["Acc"]);rige.score(X_test,Y_test["Acc"])
score=format(rige.score(X_test,Y_test["Acc"]),'.4f')
print ('Ridge Reg Score with Normalization:',score)
from sklearn.pipeline import make_pipeline, Pipeline
from sklearn.preprocessing import StandardScaler
pip=make_pipeline(StandardScaler(),Ridge())
pip.fit(X_train,Y_train["Acc"])
score_pipe=format(pip.score(X_test,Y_test["Acc"]),'.4f')
print ('Standardized Ridge Score:',score_pipe)
###### performing the GridSearchCV /the value of α that maximizes the R2 ####
param_grid = 'alpha': np.logspace(-3,3,10)
grid = GridSearchCV(estimator=pip, param_grid=param_grid, cv=2,return_train_score=True)
grid.fit(X_train,Y_train["Acc"])### barayeh har khoroji ********
best_score = float(format(grid.best_score_, '.4f'))
print('Best CV score: :.4f'.format(grid.best_score_))
print('Best parameter :',grid.best_params_)
【问题讨论】:
【参考方案1】:简短的回答是改变这一行:
param_grid = 'alpha': np.logspace(-3,3,10)
到:
param_grid = 'ridge__alpha': np.logspace(-3,3,10)
一般来说,GridSearchCV
中所有可用于调优的参数都可以通过estimator.get_params().keys()
获得
在你的情况下:
pip.get_params().keys()
dict_keys(['memory', 'steps', 'verbose', 'standardscaler', 'ridge',
'standardscaler__copy', 'standardscaler__with_mean',
'standardscaler__with_std', 'ridge__alpha', 'ridge__copy_X',
'ridge__fit_intercept', 'ridge__max_iter', 'ridge__normalize',
'ridge__random_state', 'ridge__solver', 'ridge__tol'])
附带说明,为什么不使用分号在新行开始所有新语句呢?相关代码的空间块?它将使您的代码更具可读性。
【讨论】:
以上是关于GridSearchCV 和 ValueError:估计器管道的参数 alpha 无效的主要内容,如果未能解决你的问题,请参考以下文章
工作管道上的 GridSearchCV 返回 ValueError
ValueError:使用 GridSearchCV 时估计器 SelectFromModel 的参数 C 无效
GridSearchCV 给出 ValueError:DecisionTreeRegressor 不支持连续
GridSearchCV():ValueError:输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值
ValueError 在 Scikit 中找到最佳超参数时使用 GridSearchCV 学习 LogisticRegression
GridSearchCV 在管道中将 fit_params 传递给 XGBRegressor 会产生“ValueError:需要超过 1 个值才能解包”