首页 > 解决方案 > 为什么 LogisticRegressionCV 的 .score() 与 cross_val_score 不同?

问题描述

我正在使用 LogisticRegressionCV 的.score()方法为我的模型生成准确度分数。

我也曾经用相同的 cv split ( )cross_val_score产生准确度分数,期望显示相同的分数。skf

但唉,他们是不同的,我很困惑。

我首先做了一个 StratifiedKFold:

skf = StratifiedKFold(n_splits = 5,
                      shuffle = True,
                      random_state = 708)

之后我实例化了一个 LogisticRegressionCV()skf作为 CV 参数的参数,在训练集上进行拟合和评分。

logreg = LogisticRegressionCV(cv=skf, solver='liblinear')

logreg.fit(X_train_sc, y_train)
logreg.score(X_train_sc, y_train)

这给了我 0.849507735583685 的分数,默认情况下是准确的。由于这是 LogisticRegressionCV,所以这个分数实际上是平均准确率分数,对吧?

然后我用cross_val_score

cross_val_score(logreg, X_train_sc, y_train, cv=skf).mean()

这给了我 0.8227814439082044 的平均准确度得分。

我对为什么分数不同感到有点困惑,因为我认为我基本上在做同样的事情。

标签: pythonscikit-learnclassificationlogistic-regressioncross-validation

解决方案


[ .score] 实际上是平均准确度分数,对吗?

不是。score这里的方法是最终分类器的准确度得分(在整个训练集上重新训练,使用正则化强度的最佳值)。通过再次在训练集上对其进行评估,您将获得对未来性能的乐观估计。

要恢复交叉验证分数,您可以使用属性scores_. 即使使用相同的折叠,由于求解器中的随机性,如果它没有完全收敛,这些可能会略有不同。cross_val_score


推荐阅读