Python sklearn&x27的cv值是多少;s RidgeCV得分时的平均值=';r2#u分数';?

Python sklearn&x27的cv值是多少;s RidgeCV得分时的平均值=';r2#u分数';?,python,scikit-learn,Python,Scikit Learn,当评分设置为r2评分指标时,我试图理解Scikit Learn的RidgeCV的cv.values对象中存储的值 根据for Scikit Learn的RidgeCV函数,当store_cv_values=True时: 每个alpha的交叉验证值(仅当store_cv_values=True和cv=None时可用)。调用fit()后,此属性将包含均方误差(默认情况下)或{loss,score}\u func函数的值(如果构造函数中提供) 虽然我不太清楚RidgeCV的原生广义交叉验证是如何工作的

当评分设置为r2评分指标时,我试图理解Scikit Learn的RidgeCV的cv.values对象中存储的值

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

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


虽然我不太清楚RidgeCV的原生广义交叉验证是如何工作的,但如果它确实是一个遗漏交叉验证的近似值,那么cv_值对象似乎代表的是单个(遗漏)样本的“r2_分数”。。。除了r2_分数不适用于单个样本。当评分设置为r2评分时,cv_值对象中会返回什么?

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


您可以看到这一点,尽管它被IdentityRegressor/分类器弄糊涂了。这一行实际上只是通过输入
预测值和
y来查找分数。通过几行你可以看到他们在哪里生成预测:这就是他们使用的技巧,使广义交叉验证成为一种有效的方法,在岭回归的背景下,可以省去一个。如果您感兴趣,请链接到其中一些,并描述其实际工作的原因/方式。

更新:在经过一些有益的反复之后,这里的谜团似乎已部分解决,并指出了RidgeCV函数的sklearn文档中的一个错误。如果提供评分参数,则cv_values_对象将返回每个点的预测值。(如果未提供评分参数,则对象返回所述的每点平方误差。)

从:


本,谢谢你的回答。我认为你关于如何应用评分的观点正是我困惑的根源。当cv.values_u保留为默认值时,它返回每个观测值的均方误差,考虑到每个点实际上存在残余误差,这是有意义的。但r2_分数并非如此——你不可能得到每一分的r2_分数。然而cv.values对象的形状是(样本数,目标数),这意味着这些值不能代表r2分数。@ColinConwell啊,谢谢你强调这一点,我忽略了一段重要的代码。以上是正确的分数是如何产生的,因此如何选择“最佳”阿尔法。但是
cv\u values\u
会在几行之前设置好,之后不会更改;它被设置为预测,与评分函数无关。我用一个完全线性相关的数据集和非常小的alpha测试了这一点,似乎是这样,尽管内部预测似乎是基于数据的中心版本。这意味着文档是绝对错误的,应该打开github问题。如果你不愿意的话,我会的。事实上我自己也在源代码中看到了这一点(并在下面发布了一个答案和相关行的屏幕截图)。我不完全确定如何打开/表达这类github问题,所以请放心!现作为一个问题报告: