scikit中的均方误差学习RidgeCV

时间:2017-07-04 16:50:30

标签: scikit-learn mse mean-square-error

我的问题是:在sklearn中,cv_values_给出的RidgeCV如何计算?为什么它与metrics.mean_squared_error的输出不同?

例如,

X = [1,2,3,4,5,6,7,8,9,10]
X = np.array(X).reshape(-1,1)
y = np.array([1,3.5,4,4.9,6.1,7.2,8.1,8.9,10,11.1])
ax.plot(X, y, 'o')
ax.plot(X, X+1, '-') # help visualize

enter image description here

假设我们在X和y上训练Ridge模型

from sklearn.linear_model import RidgeCV
from sklearn.metrics import mean_squared_error
model = RidgeCV(alphas = [0.001], store_cv_values=True).fit(X, y)

现在输出

mean_squared_error(y_true=y, y_pred=model.predict(X))

0.1204000013110009,而

的输出
model.cv_values_.mean()

0.24472577167818438

为什么会有这么大的差异?我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:0)

来自官方网站link

cv_values _

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

在您调用

的情况下

model = RidgeCV(alphas = [0.001], store_cv_values=True).fit(X, y)

你有:cv=None

cv=None表示您使用Leave-One-Out交叉验证。

所以cv_values使用Leave-One out cross validation存储每个样本的均方误差。在每个折叠中,您只有1个测试点,因此n = 1.因此,当cv_values_作为测试折叠的一部分时,model.cv_values_.mean()将为您提供训练数据集中每个点的平方误差。

最后,这意味着当您致电print(model.cv_values_)时,您会得到这些个别错误的平均值(每个点的每个错误的平均值)。要查看这些个别错误,您可以使用mean_squared_error(y_true=y, y_pred=model.predict(X))

个体意味着以下等式中的n = 1:

enter image description here

另一方面,android:transitionName表示你在这个等式中加上n = 10。

所以2结果会有所不同。