【问题标题】:Why does LogisticRegressionCV's .score() differ from cross_val_score?为什么 LogisticRegressionCV 的 .score() 与 cross_val_score 不同?
【发布时间】:2020-12-18 21:13:57
【问题描述】:

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

我还使用了cross_val_score 来获得具有相同的 cv 拆分 (skf) 的准确度分数,期望会出现相同的分数。

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

我首先做了一个 StratifiedKFold:

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

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

【问题讨论】:

    标签: python scikit-learn classification logistic-regression cross-validation


    【解决方案1】:

    [.score] 实际​​上是平均准确率对吗?

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

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

    【讨论】:

    • 嗨,本,正在查看我提出的一些旧问题,并意识到我没有选择您的回答作为答案。再次感谢您的回复,它非常有帮助,我相信它也使其他人受益。
    猜你喜欢
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 2021-10-12
    • 2020-06-01
    • 2020-08-25
    • 1970-01-01
    • 2021-01-17
    相关资源
    最近更新 更多