当我使用以下代码与数据矩阵 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
则为负值。
试图结束这个问题,所以我提供了David和larsmans在评论部分雄辩地描述的答案。
是的,这是应该发生的。实际的MSE只是你得到的数字的正版本。
统一评分API总是将分数最大化,所以需要最小化的分数会被否定,以使统一评分API正确工作。 因此,当返回的分数是一个应该最小化的分数时,就会被否定,如果是一个应该最大化的分数,就会留下正数。
你可以通过改变评分方法来解决这个问题,如下图所示,改为 "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')