You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 00:30:54