为什么 LogisticRegressionCV 的 .score() 与 cross_val_score 不同?

Why does LogisticRegressionCV's .score() differ from cross_val_score?

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

我还使用 cross_val_score 通过 相同的 cv 拆分 (skf) 得出了准确度分数,希望出现相同的分数。

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

我第一次做了分层折叠:

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

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

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 的平均准确度分数。

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

[.score] is actually the mean accuracy score right?

没有。这里的score方法是最终分类器的准确率得分(在整个训练集上重新训练,使用正则化强度的最优值)。通过再次在训练集上对其进行评估,您将获得 optimistically-biased 对未来表现的估计。

要恢复 cross-validation 分数,您可以使用属性 scores_。即使折叠相同,如果求解器没有完全收敛,这些 可能 cross_val_score 略有不同。