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