Scikit-learn 回归的交叉验证评分
如何在回归分析中使用 cross_val_score
呢?默认的评分方式似乎是准确率,但这对于回归来说并没有什么意义。如果我想使用均方误差,能不能在 cross_val_score
中指定这个呢?
我尝试了以下两种方法,但都不奏效:
scores = cross_validation.cross_val_score(svr, diabetes.data, diabetes.target, cv=5, scoring='mean_squared_error')
还有
scores = cross_validation.cross_val_score(svr, diabetes.data, diabetes.target, cv=5, scoring=metrics.mean_squared_error)
第一种方法生成了一堆负数,而均方误差应该总是非负的。第二种方法则报错说:
mean_squared_error() takes exactly 2 arguments (3 given)
3 个回答
0
from sklearn.model_selection import cross_val_score
from sklearn.metrics import make_scorer,mean_squared_error
scoring_metrics = make_scorer(mean_squared_error,
greater_is_better=False
)
score = cross_val_score(model,
X_test,
y_test,
cv=10,
scoring=scoring_metrics)
mse = -score.mean()
mse
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
14
第一个是对的。它输出的是均方误差(MSE)的负值,因为它总是试图让分数最大化。请帮我们建议一下文档的改进。
42
我没有足够的声望来评论,但我想给你和路过的人提供这个链接,里面讨论了在scikit-learn中MSE(均方误差)输出为负值的问题 - https://github.com/scikit-learn/scikit-learn/issues/2439
另外(为了让这个回答更完整),你的第一个选项是正确的,MSE确实是你用来比较模型的指标,而R^2的计算可能会受到你使用的交叉验证类型的影响(我认为是这样)。
如果你选择MSE作为评分标准,它会输出一系列的错误值,你可以把这些错误值求平均,像这样:
# Doing linear regression with leave one out cross val
from sklearn import cross_validation, linear_model
import numpy as np
# Including this to remind you that it is necessary to use numpy arrays rather
# than lists otherwise you will get an error
X_digits = np.array(x)
Y_digits = np.array(y)
loo = cross_validation.LeaveOneOut(len(Y_digits))
regr = linear_model.LinearRegression()
scores = cross_validation.cross_val_score(regr, X_digits, Y_digits, scoring='mean_squared_error', cv=loo,)
# This will print the mean of the list of errors that were output and
# provide your metric for evaluation
print scores.mean()