我正在使用sklearn的KNearestNeighbors进行一些学习。 我将数据集分成训练(70%)和测试(30%)来自a 具有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
答案 0 :(得分:0)
使用交叉验证功能时:
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分数是正常的,因为每次折叠的数据分割并不完全相同。