scikit-learn交叉验证,负值与均值平方误差。

问题描述 投票:47回答:2

当我使用以下代码与数据矩阵 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 则为负值。

python regression scikit-learn cross-validation
2个回答
55
投票

试图结束这个问题,所以我提供了David和larsmans在评论部分雄辩地描述的答案。

是的,这是应该发生的。实际的MSE只是你得到的数字的正版本。

统一评分API总是将分数最大化,所以需要最小化的分数会被否定,以使统一评分API正确工作。 因此,当返回的分数是一个应该最小化的分数时,就会被否定,如果是一个应该最大化的分数,就会留下正数。

这也在 sklearn GridSearchCV with Pipeline.


0
投票

你可以通过改变评分方法来解决这个问题,如下图所示,改为 "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')
© www.soinside.com 2019 - 2024. All rights reserved.