перекрестная проверка scikit-learn, отрицательные значения со среднеквадратичной ошибкой

Когда я использую следующий код с матрицей данных X размера (952,144) и вектором вывода y размера (952), метрика mean_squared_error возвращает отрицательные значения, что является неожиданным. Есть ли у вас какие-либо идеи?

from sklearn.svm import SVR
from sklearn import cross_validation as CV

reg = SVR(C=1., epsilon=0.1, kernel='rbf')
scores = CV.cross_val_score(reg, X, y, cv=10, scoring='mean_squared_error')

тогда все значения в scores отрицательны.


person ahmethungari    schedule 29.01.2014    source источник
comment
Да, это должно произойти. Я точно забыл почему, но я считаю, что это связано с тем, что они минимизируют результат при поиске по сетке. Фактическая MSE - это просто положительная версия числа, которое вы получаете.   -  person David    schedule 30.01.2014
comment
возможный дубликат sklearn GridSearchCV с конвейером - @David прав, когда унифицированный API скоринга был введено, мы решили всегда максимизировать оценку, что означает, что оценки, которые на самом деле являются потерями, должны быть сведены на нет.   -  person Fred Foo    schedule 30.01.2014


Ответы (3)


Пытаюсь закрыть это, поэтому даю ответ, который Дэвид и Ларсманс красноречиво описали в разделе комментариев:

Да, это должно произойти. Фактическая MSE - это просто положительная версия числа, которое вы получаете.

Единый API скоринга всегда максимизирует оценку, поэтому оценки, которые необходимо минимизировать, аннулируются, чтобы унифицированный API скоринга работал правильно. Таким образом, возвращаемый результат инвертируется, если его нужно минимизировать, и оставлять положительным, если он должен быть максимальным.

Это также описано в sklearn GridSearchCV с конвейером.

person AN6U5    schedule 05.12.2014
comment
Спасибо за это. Но при выборе лучшей модели отрицательные MSE не учитываются при выборе лучшей модели. Для лучших моделей требуется лишь самое маленькое из положительных MSE. Есть ли способ обойти это? Заранее спасибо! - person Arpan; 12.03.2019
comment
Спасибо! Один вопрос, если я получил [-44, -33, -22] как mse баллы, просто думайте о них как mse = 44, 33, 22? - person haneulkim; 09.03.2020

Чтобы узнать, какие доступны ключи скоринга, используйте:

import sklearn
print(sklearn.metrics.SCORERS.keys())

Вы можете использовать 'r2' or 'neg_mean_squared_error'. Есть много вариантов, основанных на ваших требованиях.

person MD Rijwan    schedule 24.01.2021

Вы можете исправить это, изменив метод оценки на «neg_mean_squared_error», как вы можете видеть ниже:

from sklearn.svm import SVR
from sklearn import cross_validation as CV

reg = SVR(C=1., epsilon=0.1, kernel='rbf')
scores = CV.cross_val_score(reg, X, y, cv=10, scoring='neg_mean_squared_error')
person Otacílio Maia    schedule 13.05.2020