sklearn交叉验证的意外结果

2024-09-30 12:14:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用sklearn的KNearestNeighbors来进行一些学习。 我把我的数据集分成训练(70%)和测试(30%) 包含30000个观测值的数据集。然而,我无法理解 为什么评价同一模型的两种方法会产生如此不同的结果

更具体地说,当我一次取测试集的r^2值时 我得到的分数(约0.70)比我做kFold交叉验证时高得多 在测试装置上。为什么这些分数差别如此之大 同样的模型正在完全相同的数据上进行测试。我肯定是的 做错事,但我不知道是什么。请帮帮我

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

Tags: 数据方法模型testtrainsklearn分数评价
1条回答
网友
1楼 · 发布于 2024-09-30 12:14:45

使用交叉验证功能时:

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分数是正常的,因为每个折叠的数据分割并不完全相同

相关问题 更多 >

    热门问题