【问题标题】:MSE of the validation (and test) sets from repeated k-Fold on Ridge regression?岭回归上重复 k 折的验证(和测试)集的 MSE?
【发布时间】:2021-11-24 04:53:33
【问题描述】:

TLDR 可能是this 的问题,但是我们如何使用sklearn 来解决这个问题?如果图中只显示我为每个 lambdaalpha 所做的 CV 的平均值,我就可以了。


大家好,如果我理解正确,我们需要在训练集上进行交叉验证,以选择alpha(如sklearn)进行岭回归。特别是,我想在训练集上执行重复 5 次的 5 倍 CV(所以 25 个 CV)。

想要alphas中的每个alpha做的是:

from numpy import logspace as logs
alphas = logs(-3, 3, 71) # from 10^{-3}, 10^{-2.9}, ..., to 10^3

我在完成每个训练集的所有 CV 后获得 25 个(不同的?)验证集上的 MSE,以及测试集上的 MSE,然后从 25 个 MSE 中取平均值以进行绘图或报告。

问题是我不知道该怎么做。这是从我们通常无法观察到的验证集中检索 25 个 MSE 的正确代码吗?

from sklearn.linear_model import RidgeCV, Ridge
from sklearn.model_selection import cross_val_score as CVS

# 5 fold now repeated all 5 times
cvs = RKF(n_splits=5, n_repeats=5, random_state=42)

# each alpha input as al
# the whole data set is generated with different RNG each time
# if you like you may take any existing data sets to explain whether I did wrong
# for each whole data set, the training set is split using the same random state
CVS(Ridge(alpha=al, random_state=42), X_train, Y_train, scoring="neg_mean_squared_error", cv=cvs)

如果不是,我应该使用cross_validate 甚至RidgeCV 来获得我想要的MSE?提前致谢。

【问题讨论】:

    标签: python scikit-learn linear-regression cross-validation mse


    【解决方案1】:

    您很可能需要使用 GridSearchCV,使用我们有 10 个 alpha 值的示例:

    from sklearn.model_selection import GridSearchCV
    from sklearn.model_selection import cross_val_score, RepeatedKFold
    from sklearn.linear_model import RidgeCV,Ridge
    from sklearn.model_selection import cross_val_score
    from numpy import logspace as logs
    from sklearn import datasets
    
    alphas = logs(-3, 3, 71) 
    
    diabetes = datasets.load_diabetes()
    X = diabetes.data[:300]
    y = diabetes.target[:300]
    
    X_val = diabetes.data[300:]
    y_val = diabetes.target[300:]
    

    我们定义了重复的交叉验证,以及要适应的 alpha:

    cvs = RepeatedKFold(n_splits=5, n_repeats=5, random_state=42)
    parameters = {'alpha':alphas}
    
    clf = GridSearchCV(Ridge(), parameters,cv=cvs)
    clf.fit(X, y)
    

    因此分数的平均值将存储在clf.cv_results_['mean_test_score'] 下,并且您还可以在字典下获得各个结果。要进行绘图,您可以简单地执行以下操作:

    import matplotlib.pyplot as plt
    fig, ax = plt.subplots()
    
    ax.bar(np.arange(len(alphas)), height =clf.cv_results_['mean_test_score'],
           yerr=clf.cv_results_['std_test_score'], alpha=0.5,
           error_kw=dict(ecolor='gray', lw=1, capsize=5, capthick=2))
    
    ax.set_xticks(np.arange(len(alphas)))
    ax.set_xticklabels(np.round(alphas,3))
    

    这显示了 10 个 alpha 值的分数的平均值和标准误差。

    您可以查看this post,了解如何获取预定义验证集的分数。

    【讨论】:

      猜你喜欢
      • 2021-03-28
      • 1970-01-01
      • 2020-12-01
      • 2021-01-25
      • 2019-10-09
      • 1970-01-01
      • 2016-05-12
      • 2016-09-30
      • 2021-04-06
      相关资源
      最近更新 更多