为什么sklearn中的cross_val_score会翻转度量值



我正在从sklearn中拟合此模型。

LogisticRegressionCV(
solver="sag", scoring="neg_log_loss", verbose=0, n_jobs=-1, cv=10
)

拟合的结果是model.score(在训练集上(为0.67,并且发生了变化。由于没有办法(或者我不知道如何(访问作为模型拟合的一部分执行的交叉验证的结果,我在具有的同一模型上作为单独的交叉验证运行

cross_val_score(model, X, y, cv=10, scoring="neg_log_loss")

这返回一个负数数组

[-0.69517214 -0.69211235 -0.64173978 -0.66429986 -0.77126878 -0.65127196
-0.66302393 -0.65916281 -0.66893633 -0.67605681]

如果标志被翻转,这似乎在与训练分数兼容的范围内。我读过一期关于cross_val_score翻转给定评分函数的符号的讨论,解决方案似乎是引入了neg_*度量来使这种翻转变得不必要,而我使用的是neg_log_loss。该问题涉及mse,但这些论点似乎也适用于log_loss。有没有办法让cross_val_score返回与其参数中指定的度量相同的度量?或者这是一个我应该归档的bug?还是我有误解,cross_val_score仍有望改变符号?

我希望这对SO来说是一个足够具体的问题。Sklearn开发人员将用户重定向到SO,以解决那些不是明确的bug报告或功能需求的问题。

在注释中为每个请求添加最少的repo代码(sklearn v 0.19.1 python 2.7(:

from numpy.random import randn, seed
from sklearn.linear_model import LogisticRegressionCV
from sklearn.model_selection import cross_val_score
seed (0)
X = randn(100,2)
y = randn(100)>0
model = LogisticRegressionCV(
solver="sag", scoring="neg_log_loss", verbose=0, n_jobs=-1, cv=10
)
model.fit(X=X, y=y)
model.score(X,y)
cross_val_score(model, X, y, cv=10, scoring="neg_log_loss")

有了这个代码,它看起来就不再是度量的简单符号翻转了。得分的输出为0.59,交叉验证得分为array([-0.70578452, -0.68773683, -0.68627652, -0.69731349, -0.69198876, -0.70089103, -0.69476663, -0.68279466, -0.70066003, -0.68532253])

注意:在与Vivek Kumar和piccolbo的富有成效的评论线程之后编辑

关于LinearRegression CVscore方法的奇异结果

您发现了一个错误,该错误已在0.20.0版本中修复。

来自变更日志:

Fix:修复了linear_model.LogisticRegressionCV中的一个错误,在该错误中,评分方法总是计算准确性,而不是评分参数给出的度量#10998,托马斯·范著。

此外,sklearn的0.19 LogisticRegressionCV文档中写道:

得分(X,y,sample_weight=无(

返回给定测试数据和标签的平均精度

从版本0.20.0开始,使用错误修复程序更新文档:

得分(X,y,sample_weight=无(

使用给定测试数据和标签上的评分选项返回分数。


关于cross_val_score中返回的负值

cross_val_score翻转errorloss度量的结果值,同时保留score度量的符号。来自文件:

所有得分手对象都遵循一个约定,即返回值越高越好。因此,测量模型和数据之间距离的度量,如metrics.mean_squared_error,可用作返回度量的否定值的neg_mean_squared_error。

相关内容

  • 没有找到相关文章

最新更新