scikit 学习 RidgeCV 中的均方误差
mean squared error in scikit learn RidgeCV
我的问题是:在sklearn
中,RidgeCV
给出的cv_values_
是怎么计算出来的?为什么它与 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
假设我们在 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
。
为什么会有这么大的差异?我是否漏掉了一些明显的东西?
来自官网link
cv_values_
每个 alpha 的交叉验证值 (if store_cv_values=True 和 cv=None) .调用 fit() 后,此属性将包含 均方误差(默认) 或 {loss,score}_func 函数的值(如果在构造函数中提供)。
在您调用
时的情况
model = RidgeCV(alphas = [0.001], store_cv_values=True).fit(X, y)
你有:cv=None
cv=None
表示您使用留一法交叉验证。
因此 cv_values
使用留一法交叉验证存储每个样本的均方误差。在每一折中,你只有 1 个测试点,因此 n = 1。因此 cv_values_
将为你提供训练数据集中每个点的平方误差,当它是测试折的一部分时。
最后,这意味着当您调用 model.cv_values_.mean()
时,您会得到这些单个误差的平均值(每个点的每个误差的平均值)。要查看这些单独的错误,您可以使用 print(model.cv_values_)
个别表示下式中n=1:
另一方面,mean_squared_error(y_true=y, y_pred=model.predict(X))
表示您将 n=10 代入此等式。
所以这两个结果会不同。
我的问题是:在sklearn
中,RidgeCV
给出的cv_values_
是怎么计算出来的?为什么它与 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
假设我们在 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
。
为什么会有这么大的差异?我是否漏掉了一些明显的东西?
来自官网link
cv_values_
每个 alpha 的交叉验证值 (if store_cv_values=True 和 cv=None) .调用 fit() 后,此属性将包含 均方误差(默认) 或 {loss,score}_func 函数的值(如果在构造函数中提供)。
在您调用
时的情况model = RidgeCV(alphas = [0.001], store_cv_values=True).fit(X, y)
你有:cv=None
cv=None
表示您使用留一法交叉验证。
因此 cv_values
使用留一法交叉验证存储每个样本的均方误差。在每一折中,你只有 1 个测试点,因此 n = 1。因此 cv_values_
将为你提供训练数据集中每个点的平方误差,当它是测试折的一部分时。
最后,这意味着当您调用 model.cv_values_.mean()
时,您会得到这些单个误差的平均值(每个点的每个误差的平均值)。要查看这些单独的错误,您可以使用 print(model.cv_values_)
个别表示下式中n=1:
另一方面,mean_squared_error(y_true=y, y_pred=model.predict(X))
表示您将 n=10 代入此等式。
所以这两个结果会不同。