【问题标题】:Scikit-learn cross validation scoring for regression用于回归的 Scikit-learn 交叉验证评分
【发布时间】:2014-07-30 16:46:57
【问题描述】:

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

【问题讨论】:

标签: python scikit-learn regression


【解决方案1】:

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

【讨论】:

  • “它总是试图最大化分数”是指它使它们成为负数,所以最好的分数(最小的 MSE 幅度)总是最大的?
  • 是的。我们现在也将其更改为“neg_mean_squared_error”以使其更清晰。
  • 只是为了让我头脑清楚,似乎... neg_mean_squared_error = - (mean_squared_error)。首先出现 neg_mean_sqaured_error 的原因是什么?
  • @AndreasMueller 似乎 score='neg_mean_squared_error' 和 score='r2' 在 scikit-learn 代码中为 RidgeCV 返回相同的值。你知道吗? stackoverflow.com/a/41174343/2943352
【解决方案2】:

我没有评论的声誉,但我想为您和/或路人提供此链接,讨论 scikit learn 中 MSE 的负面输出 - https://github.com/scikit-learn/scikit-learn/issues/2439

此外(为了使这成为一个真正的答案)您的第一个选项是正确的,因为 MSE 不仅是您想要用来比较模型的指标,而且 R^2 不能根据(我认为)交叉类型来计算-val 您正在使用。

如果您选择 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()

【讨论】:

  • DeprecationWarning:评分方法 mean_squared_error 在 0.18 版本中已重命名为 neg_mean_squared_error 并将在 0.20 中删除。样品重量=样品重量)
  • 在这个例子中,由于cv=loo(只有1个测试样本),scores内部的返回值将是当前单(测试)的实际-预测值的实际平方差) 样本,对吗?
  • ValueError: 'mean_squared_error' 不是有效的评分值。使用 sorted(sklearn.metrics.SCORERS.keys()) 获取有效选项。
猜你喜欢
  • 2018-04-02
  • 2021-01-25
  • 2017-06-23
  • 2020-04-06
  • 1970-01-01
  • 2017-03-30
  • 2016-04-25
  • 2018-12-04
  • 2017-09-02
相关资源
最近更新 更多