Sklearn cross_val_score 给出的数字与 model.score 明显不同?

Sklearn cross_val_score gives significantly differnt number than model.score?

我有一个二元分类问题

首先我训练测试将我的数据拆分为:

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

我检查了 y_train,它基本上有两个 类 (1,0) 的 50/50 分割,这就是数据集

当我尝试基本模型时:

model = RandomForestClassifier()
model.fit(X_train, y_train)
model.score(X_train, y_train)

输出是 0.98 或 1% 的差异,具体取决于训练测试拆分的随机状态。

然而,当我尝试 cross_val_score 例如:

cross_val_score(model, X_train, y_train, cv=StratifiedKFold(shuffle=True), scoring='accuracy')

输出是

array([0.65      , 0.78333333, 0.78333333, 0.66666667, 0.76666667])

none数组中的分数竟然接近0.98?

当我尝试得分时 = 'r2' 我得到了

>>>cross_val_score(model, X_train, y_train, cv=StratifiedKFold(shuffle=True), scoring='r2')
array([-0.20133482, -0.00111235, -0.2       , -0.2       , -0.13333333])

有谁知道为什么会这样?我试过 Shuffle = TrueFalse 但没有用。

提前致谢

在你的基础模型中,你计算你在训练语料库上的分数。虽然这是确保您的模型确实从您提供的数据中学习的正确方法,但它并不能确保您的模型在新数据和未见数据上的最终准确性。

不是 100% 确定(我不太了解 scikit-learn),但我希望 cross_val_score 实际上将 X_trainy_train 分成训练和一个测试集。

因此,当您计算训练期间未见数据的分数时,准确性会低得多。尝试将这些结果与 model.score(X_test, y_test) 进行比较,应该更接近。