Scikit学习回归交叉验证评分

2024-06-08 01:48:13 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使用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)

Tags: 方法targetdataerrorvalmeancv误差
2条回答

我不想对此发表评论,但我想为您和/或路人提供此链接,其中讨论了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()

第一个是正确的。它输出MSE的负数,因为它总是试图使得分最大化。请帮助我们对文档提出改进建议。

相关问题 更多 >

    热门问题