如何解决参数具有弹性值误差的交叉Val得分
我试图使用cross_val_score()
函数和嵌套交叉验证在python中实现一个简单的Elastic Net Regression,但它不允许我传递参数。它会一直从l1_ratio的无效参数中声明ValueError,我不明白为什么给定它在0到1之间。
ValueError: Invalid parameter l1_ratio for estimator Pipeline(steps=[('preprocessor',ColumnTransformer(remainder='passthrough',transformers=[('cat',OneHotEncoder(),[0]),('num',StandardScaler(),slice(1,37,None))])),('model',ElasticNet(random_state=42))]).
Check the list of available parameters with `estimator.get_params().keys()`.
我的代码:
cv_outer=KFold(10,shuffle=True)
cv_inner=KFold(10,shuffle=True)
models_params = {
'en': (LREN(random_state=42),# Elastic Net
{'l1_ratio': [0,0.25,0.5,0.75,1],'alpha':[1e-2,1e-1,1,1e1]})
# My first column is Categorical,the other 36 are numerical
preprocessor = ColumnTransformer(
transformers=[
('cat',37))
],remainder = 'passthrough')
# Store Results
average_scores = dict()
for name,(model,params) in models_params.items():
mymodel = Pipeline(steps = [('preprocessor',preprocessor),model)
])
# this object is a regressor that also happens to choose
# its hyperparameters automatically using `inner_cv`
optimize_hparams = gridsearchcv(
estimator = mymodel,param_grid=params,n_jobs = -1,cv=cv_inner,scoring='neg_mean_absolute_error')
# estimate generalization error on the outer-fold splits of the data
outer_folds_scores = cross_val_score(
optimize_hparams,X,y,cv=cv_outer,scoring='neg_mean_absolute_error')
解决方法
您可以尝试定义网格,例如:
models_params = {
{'model__l1_ratio': [0,0.25,0.5,0.75,1],'model__alpha':[1e-2,1e-1,1,1e1]}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。