GridSearchCV对线性回归调参报Invalid parameter n_neighbors错误求助
问题诊断与修复方案
核心错误1:参数与使用的模型不匹配
你当前管道的最终评估器是LinearRegression(线性回归),该模型本身没有n_neighbors配置项,n_neighbors是K近邻系列模型(KNeighborsRegressor/KNeighborsClassifier)的专属参数,属于参数和模型不匹配的问题。
核心错误2:Pipeline场景下参数命名不符合规范
即使你将管道内的模型替换为支持n_neighbors的K近邻模型,直接用n_neighbors作为参数字典的键也是错误的。
Pipeline包含多个处理步骤,给指定步骤传参需要遵循步骤名__参数名的命名规则(中间为两个下划线)。使用make_pipeline生成的管道会自动以小写类名作为每个步骤的名称:你当前管道内线性回归的步骤名为linearregression,如果替换为K近邻回归,步骤名则为kneighborsregressor。
修复示例
场景1:你确实需要使用线性回归
将参数网格替换为线性回归支持的参数即可,例如搜索是否启用拟合截距:
param_grid = {'linearregression__fit_intercept': [True, False]} grid = GridSearchCV(lr_pipe, param_grid, cv=10)
场景2:你实际需要使用K近邻回归
替换管道内的评估器,同时修改参数命名:
from sklearn.neighbors import KNeighborsRegressor # 替换管道评估器为K近邻回归 knn_pipe = make_pipeline(StandardScaler(), KNeighborsRegressor()) # 按管道命名规则写参数键 param_grid = {'kneighborsregressor__n_neighbors': range(1, 10)} grid = GridSearchCV(knn_pipe, param_grid, cv=10)
你也可以运行print(lr_pipe.get_params().keys())查看当前管道支持调整的所有参数名称,和错误提示里的建议一致。
内容的提问来源于stack exchange,提问作者Shauna
相关产品推荐
相关产品推荐

