【问题标题】:Unexpected result from cross_validation from sklearn来自 sklearn 的 cross_validation 的意外结果
【发布时间】:2017-12-27 21:16:34
【问题描述】:

我正在使用 sklearn 中的 KNearestNeighbors 进行一些学习。 我将我的数据集分为训练(70%)和测试(30%) 具有 30,000 个观测值的数据集。但是,我无法理解 为什么评估同一模型的两种方法会产生如此不同的结果。

更具体地说,当我一次获取测试集的 r^2 值时 与进行 kFold 交叉验证时相比,我得到了更高的分数(~0.70) 在测试集上。为什么这些分数在准确时会如此不同 在完全相同的数据上测试相同的模型。我确定我是 做错了什么,但我不知道是什么。请帮忙!

r2_scorer = make_scorer(r2_score)

clf = neighbors.KNeighborsRegressor()
clf = clf.fit(X_train,y_train)
score1 = r2_score(y_test,clf.predict(X_test))

> 0.68777300248206585

kfold = model_selection.KFold(n_splits=10, random_state=42)
scores2 = cross_val_score(clf,X_test,y_test,cv = kfold, scoring = r2_scorer)

scores2
>array([ 0.05111285,  0.65697228,  0.57468009,  0.6706573 ,  0.46720042,
        0.3763054 ,  0.56881947,  0.32569462, -0.16607888, -0.6862521 ])

scores2.mean()
> 0.28391114469744039

scores2.std()
> 0.4118551721575503

【问题讨论】:

  • 交叉验证不使用相同的模型,它每次折叠都制作新模型以进行验证。
  • 啊,我终于看到我的错误了。非常感谢
  • @ata 我发布了一个答案,解释了旅游结果并回答了你的主要问题

标签: python machine-learning scikit-learn


【解决方案1】:

当你使用交叉验证功能时:

scores2 = cross_val_score(clf,X_test,y_test,cv = kfold, scoring = r2_scorer)

您生成 10 次折叠,每次折叠您都会获得 r2 分数。

所以结果:

scores2
>array([ 0.05111285,  0.65697228,  0.57468009,  0.6706573 ,  0.46720042,
         0.3763054 ,  0.56881947,  0.32569462, -0.16607888, -0.6862521 ])

如您所见,包括 10 个值。每个值对应每个折叠。

底线:

每个折叠得到不同的 r2 分数是正常的,因为每个折叠的数据拆分并不完全相同。

【讨论】:

    猜你喜欢
    • 2018-09-24
    • 2021-05-11
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多