三、KNN 的交叉验证
由于 KNN 算法本身具有动态调整的特点,需要不断调整测试集和训练集的比例才有较为良好的模型表现,所以交叉验证在 KNN 算法的应用过程中显得尤为重要。一般来讲,按比例的数据采样或多折交叉验证需要多次应用,相互印证。
在机器学习里,通常不能将全部数据用于训练模型,否则将没有数据集对该模型进行验证,从而难以评估模型的预测效果。为了解决这一问题,通常将数据集进行不同方法的分割,人为将整个数据集分为训练集(training set)和测试集(test set)两部分。我们将这种数据集分割组合进行算法模型评估的方法叫作交叉验证。示意图如下:
(一)The Validation Set Approach(验证集方法)
该方法是把整个数据集分成两部分,一部分用于训练,另一部分用于验证,分割时以比例进行调节。
同样以汽车分类为例,以不同的比例分割数据集,其错误率是不同的,如图 2-4-4 所示。
图 2-4-4 汽车分类案例不同比例分割的错误率
可以看到,在不同的划分方法下,错误率的变动是很大的。所以如果训练集和测试集的划分方法不够好,很有可能无法选择到最好的模型与参数。
(二)Cross-Validation(交叉验证法)
1. LOOCV
LOOCV 方法即 leave-one-out cross-validation,或称为留一法。像 test set approach 一样,LOOCV 方法也包含将数据集分为训练集和测试集这一步骤。但是不同的是,现在只用一个数据作为测试集,其他数据都作为训练集,并将此步骤重复 n 次(n 为数据集的数据数量)。留一法的示意图如下所示:
,在这个模块中,采样类型被分为 4 种,其窗口如图 2-4-5 所示。
图 2-4-5 数据采样器模块窗口
▶Fixed proportion of data:这是一种按固定比例将数据进行分割的方法,其数量可以按照比例条进行调节,一般按 6∶4 或 7∶3 的比例进行分割。
▶ Fixed sample size:这是按照固定数量将数据集进行分割的方法,勾选 Sample with replacement 表示有放回的采样方式。
▶ Cross validation:交叉验证,是常用的一种采样方式,是将数据集平均分为几折,然后取其中的一折作为测试集的验证方法。调节参数 Number of folds 表示分为几折,即几份;Selected fold 表示取那一份为测试集。
▶ Bootstrap:是通过样本来估计总体的采样方法。
可选项 Replicable(deterministic)sampling 是可复制(确定性)采样,Stratify sample 是根据数据属性不同而采取的分层采样。
2)测试模块测试模块的名称是 Test and Score,其模块图形是
。在这一模块中,也有采用的参数调节选项,如图 2-4-6 所示。
▶ Cross validation:交叉验证。
▶ Random sampling:随机采样。其中,Repeat train/test 表示重复训练及测试的次数,Training set size 表示随机抽取的训练测试集的比例。


图 2-4-6 测试模块窗口
▶ Leave one out:表示留一法。 ▶ Test on train data:用训练数据测试。 ▶Test on test data:用测试数据测试,如数据已经被采样。