python - 为什么 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 的平均准确度得分。
我对为什么分数不同感到有点困惑,因为我认为我基本上在做同样的事情。
解决方案
[
.score
] 实际上是平均准确度分数,对吗?
不是。score
这里的方法是最终分类器的准确度得分(在整个训练集上重新训练,使用正则化强度的最佳值)。通过再次在训练集上对其进行评估,您将获得对未来性能的乐观估计。
要恢复交叉验证分数,您可以使用属性scores_
. 即使使用相同的折叠,由于求解器中的随机性,如果它没有完全收敛,这些可能会略有不同。cross_val_score