为什么 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
略有不同。
我使用 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
略有不同。