交叉验证可在波士顿房屋上带来意想不到的结果,而不会拖延

时间:2018-10-16 20:44:52

标签: scikit-learn

我对波士顿住房公司取得了令人惊讶的结果。当我对原始的Boston Housing数据集及其随机改组的版本应用交叉验证时,以下代码会产生截然不同的结果:

from sklearn.datasets import load_boston
from sklearn.neighbors import KNeighborsRegressor
from sklearn.model_selection import cross_val_score
from sklearn.utils import shuffle
boston = load_boston()
knn = KNeighborsRegressor(n_neighbors=1)
print(cross_val_score(knn, boston.data, boston.target))
X, y = shuffle(boston.data, boston.target, random_state=0)
print(cross_val_score(knn, X, y))

输出为:

[-1.07454938 -0.50761407  0.00351173]
[0.30715435 0.36369852 0.51817514]

即使原始数据集的顺序不是随机的,为什么最近邻1预测也如此差呢?谢谢。

1 个答案:

答案 0 :(得分:0)

原始数据集的顺序根本不是随机的。由于我没有对数据集进行归一化,因此两个要素本质上决定了欧几里得距离:要素9(均值约为408)和要素11(均值约为357);我认为这些是PTRATIO(按城镇划分的师生比例)和LSTAT(低人口百分比)。 PTRATIO的图形是

feature 9

大约所有样本的后三分之一具有此功能的很高的值;因此,第三折(默认情况下scikit-learn使用3折)是高度异常的。 LSTAT的图表看起来不太醒目,但最后三分之一仍然异常。因此,毫不奇怪的是,1NN的结果如此糟糕而没有改组。