Среднеквадратичная ошибка в scikit выучить RidgeCV
Мой вопрос: в 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
Скажем, мы тренируем модель хребта по X и Y
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 ответ
С официальной ссылки сайта
cv_values_
Значения перекрестной проверки для каждой альфы (если store_cv_values =True и cv = None). После вызова fit() этот атрибут будет содержать среднеквадратичные ошибки (по умолчанию) или значения функции _func {loss, score} (если это предусмотрено в конструкторе).
В вашем случае, когда вы звоните
model = RidgeCV(alphas = [0.001], store_cv_values=True).fit(X, y)
у тебя есть: cv=None
cv=None
означает, что вы используете перекрестную проверку Leave-One-Out.
Так cv_values
хранит среднеквадратичную ошибку для каждого образца с использованием перекрестной проверки Leave-One. В каждом фолде у вас есть только 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 в этом уравнении.
Таким образом, 2 результата будут отличаться.