Python线性回归交叉验证报错:fit()缺失必需参数'y'
问题原因及解决方案
核心错误点
- 错误1:传递了已拟合的模型给
cross_validate
你先调用LinearRegression().fit(...)得到拟合后的模型lr,但cross_validate需要的是未拟合的模型实例——交叉验证会自动拆分数据并多次执行“拟合+评估”流程,传入已拟合的模型不仅多余,还会干扰正常流程。 - 错误2:
cross_validate调用时缺失y参数
你的代码里只传了X=x_train_pca,但交叉验证需要明确目标变量,必须加上y=y_train参数,否则fit方法会因缺少必填的y参数报错。
修正后的代码
ks = [1,2,3,4,5,6,8,10,12,15,20] mean_val_mse = [] # loop through all k values for k in ks: # instantiate pca and set n_components = k pca = PCA(n_components=k) # fit and transform training data x_train_pca = pca.fit_transform(X_train_scaled) # 仅实例化线性回归模型,不提前拟合 lr = LinearRegression() # 补充y参数,传入未拟合的模型实例 cv_results = cross_validate( lr, X=x_train_pca, y=y_train, # 必须添加的目标变量参数 cv=10, return_train_score=True, scoring='neg_mean_squared_error', error_score='raise' ) # 转换负MSE为常规MSE并存储平均值 mean_val_mse.append(-cv_results['test_score'].mean())
补充说明
- 因为
scoring='neg_mean_squared_error',返回的分数是负值,取负后才能得到常规的均方误差(MSE)值。 - 交叉验证的每一轮都会用拆分后的训练子集重新拟合模型,因此完全不需要提前手动拟合模型。
内容的提问来源于stack exchange,提问作者ars
相关产品推荐
相关产品推荐

