如何解决make_pipeline封装MLPRegressor接入GridSearchCV的参数报错?
问题原因
scikit-learn的make_pipeline()函数会自动将步骤对应的类名转为全小写作为步骤名,你构建的管道里MLPRegressor对应的步骤名是mlpregressor(全小写),而你param_grid里用的是大写开头的MLPRegressor作为前缀,和实际步骤名不匹配,所以触发参数不识别的错误。
修正方案
方案1:直接修改param_grid的参数前缀(改动最小)
把参数前缀改为全小写的mlpregressor__即可:
param_grid = { 'mlpregressor__hidden_layer_sizes': [(16,16,), (64,64,), (128,128,)], 'mlpregressor__activation': ['identity', 'logistic', 'tanh', 'relu'], 'mlpregressor__solver': ['adam','sgd'] }
方案2:手动指定管道步骤名(适配更复杂的场景)
如果不想记自动命名规则,也可以不用make_pipeline,改用显式指定步骤名的Pipeline类,自定义步骤名方便后续引用:
from sklearn.pipeline import Pipeline # 自定义步骤名,可随意命名,后续参数前缀和自定义名称保持一致即可 pipe = Pipeline(steps=[ ('scaler', StandardScaler()), ('mlp', MLPRegressor()) ]) # 对应的param_grid写法示例 param_grid = { 'mlp__hidden_layer_sizes': [(16,16,), (64,64,), (128,128,)], 'mlp__activation': ['identity', 'logistic', 'tanh', 'relu'], 'mlp__solver': ['adam','sgd'] }
你可以随时运行print(pipe.get_params().keys())查看管道所有可配置的参数名,确认步骤的前缀是否正确。
内容的提问来源于stack exchange,提问作者jgg
相关产品推荐
相关产品推荐

