【问题标题】:What do the cv.values of sklearn's RidgeCV mean when scoring = 'r2_score'?当 score = 'r2_score' 时,sklearn 的 RidgeCV 的 cv.values 是什么意思?
【发布时间】:2020-12-20 22:13:46
【问题描述】:

当评分设置为 r2_score 指标时,我试图理解存储在 Scikit-Learn 的 RidgeCV 的 cv.values_ 对象中的值。

根据 documentation 的 Scikit-Learn 的 RidgeCV 函数,当 store_cv_values=True 时:

每个 alpha 的交叉验证值(仅在 store_cv_values=True 和 cv=None 时可用)。调用 fit() 后,此属性将包含均方误差(默认情况下)或 {loss,score}_func 函数的值(如果在构造函数中提供)。

虽然我对 RidgeCV 的原生广义交叉验证如何工作的细节有些不清楚,但如果它确实是留一法交叉验证的近似值,那么 cv_values 对象似乎代表的是 ' r2_score' 用于单个(遗漏)样本...除了 r2_score 不适用于单个样本。当 score 设置为 r2_score 时,cv_values 对象中返回什么?

【问题讨论】:

标签: python scikit-learn


【解决方案1】:

更新:经过一些帮助后,这里的谜团似乎已部分解决,并指出 RidgeCV 函数的 sklearn 文档中存在错误。如果提供了评分参数,则 cv_values_ 对象返回每个点的预测。 (如果未提供评分参数,则该对象将按照每点平方误差的规定返回。)

来自source code

【讨论】:

    【解决方案2】:

    简而言之,这种广义交叉验证对整个训练集进行留一式预测,然后将评分函数应用于这些预测(而不是先评分然后平均)。

    您可以看到in the code,尽管它被 IdentityRegressor/Classifier 混淆了一点。该行实际上只是通过输入predictions_y_ 来查找分数。几行你可以看到他们在哪里生成预测:这就是他们使用技巧的地方,使广义交叉验证成为在岭回归的上下文中进行 Leave-One-Out 的有效方法。如果你有兴趣,the docs 链接到一些 a reportcourse slides 描述为什么/如何实际工作。

    【讨论】:

    • 谢谢你的回答,本。我认为您关于如何应用评分的观点正是我困惑的根源。当 cv.values_ 保留为默认值时,它返回每个观察的均方误差,考虑到每个点实际上存在残差,这是有道理的。但是 r2_score 不是这种情况——你不能有一个 r2_score 每个点。然而 cv.values_ 对象的形状是 (number_of_samples, number_of_targets),这意味着这些值不能代表 r2_scores。
    • @ColinConwell 啊,感谢您的关注,我忽略了一段重要的代码。以上对于如何产生分数是正确的,因此是如何选择“最佳”阿尔法的。 但是 cv_values_ 提前几行设置,之后就没有改变;并且它被设置为作为预测,与评分函数无关。我用一个完全线性相关的数据集和非常小的 alpha 对此进行了测试,看起来确实如此,尽管内部预测似乎是基于数据的中心版本。
    • 这意味着文档完全错误,应该打开一个github问题。如果你不愿意,我愿意。
    • 我实际上只是在源代码中看到了这一点(并在下面发布了一个答案以及相关行的屏幕截图)。我不完全确定如何打开/表达这类 github 问题,所以请随意!
    猜你喜欢
    • 2014-08-18
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多