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

基于sklearn的岭回归重复k折交叉验证MSE获取方法咨询

你给出的代码可以正确获取每个alpha对应的25次交叉验证的验证集负MSE,只要提前导入RepeatedKFold并简写为RKF,对返回结果取负就能得到MSE,求平均即为该alpha对应的平均验证集MSE。

完整实现步骤

1. 依赖导入与基础数据拆分

注意测试集需要在最开始就和训练集完全拆分,不能参与交叉验证过程,避免数据泄露:

import numpy as np
from numpy import logspace as logs
from sklearn.linear_model import Ridge
from sklearn.model_selection import cross_val_score, RepeatedKFold, train_test_split
from sklearn.metrics import mean_squared_error
from matplotlib import pyplot as plt

# 示例数据集,可替换为自己的X、y
from sklearn.datasets import fetch_california_housing
data = fetch_california_housing()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 定义alpha列表和交叉验证策略
alphas = logs(-3, 3, 71)
cvs = RepeatedKFold(n_splits=5, n_repeats=5, random_state=42)

2. 批量计算每个alpha对应的MSE

# 存储结果
val_mse_mean = []
test_mse = []

for al in alphas:
    # 获取25次验证集的负MSE,转成正的MSE
    neg_mse = cross_val_score(Ridge(alpha=al, random_state=42), X_train, y_train, scoring="neg_mean_squared_error", cv=cvs)
    current_val_mse = -neg_mse
    val_mse_mean.append(current_val_mse.mean())
    
    # 获取对应alpha在测试集的MSE:用整个训练集拟合模型再预测
    model = Ridge(alpha=al, random_state=42).fit(X_train, y_train)
    y_pred = model.predict(X_test)
    test_mse.append(mean_squared_error(y_test, y_pred))

3. 结果可视化

plt.figure(figsize=(10,6))
plt.plot(alphas, val_mse_mean, label='5*5折交叉验证平均验证集MSE', marker='o', markersize=3)
plt.plot(alphas, test_mse, label='测试集MSE', marker='s', markersize=3)
plt.xscale('log')
plt.xlabel('alpha (log尺度)')
plt.ylabel('MSE')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()

cross_validate和RidgeCV的选择说明

  • 如果你只需要验证集的MSE,当前使用的cross_val_score已经足够,无需替换为cross_validate;如果需要同时获取训练集得分、拟合时间等额外信息,再选择cross_validate即可。
  • 如果你不需要保留每次交叉验证的原始25个MSE值,只需要每个alpha的平均验证集得分,也可以用RidgeCV实现,代码更简洁:
from sklearn.linear_model import RidgeCV
ridge_cv = RidgeCV(alphas=alphas, cv=cvs, scoring="neg_mean_squared_error", store_cv_values=True)
ridge_cv.fit(X_train, y_train)
# 每个alpha对应的交叉验证MSE存储在ridge_cv.cv_values_中,直接取平均即可

内容的提问来源于stack exchange,提问作者Yuki.F

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:27:03