среднеквадратическая ошибка в 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()

is 0.24472577167818438.

Почему такая огромная разница? Я упускаю что-то очевидное?


person OverCookedHam    schedule 04.07.2017    source источник
comment
Дайте мне знать, если ответ решил ваш вопрос.   -  person seralouk    schedule 04.07.2017


Ответы (1)


С официального сайта ссылка

cv_values_

Значения перекрестной проверки для каждого альфа-канала (если 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 в это уравнение.

Таким образом, 2 результата будут отличаться.

person seralouk    schedule 04.07.2017
comment
Ах я вижу. Я прочитал документацию RidgeCV, но не принял во внимание количество баллов, участвующих в расчете MSE. Спасибо! - person OverCookedHam; 05.07.2017
comment
Рад, что смог помочь - person seralouk; 05.07.2017