模型验证

机器学习中,”模型验证”用验证数据集对模型做测试。一般用于 模型选择 ,针对多个模型在同一验证数据集的测试表现,选择表现最佳的模型。如果同种模型,有不同参数可选,也可用验证手段选择最佳参数,称为 参数选择。 (其实,同种模型不同参数也可视作不同模型,那么“参数选择”也属于“模型选择”了)

模型测试与验证

两者都对模型进行测试以观察模型的表现,并无本质区别。只是模型测试的目的是估计模型的实际表现。例如,在竞赛中,测试数据往往是参赛者未知的,测试由主办方进行。所以,模型测试一般是在模型确定后进行的。而模型验证的目的一般是模型选择,针对多个候选模型进行测试。验证数据一般是可知的,实际上,一般从训练数据分出一部分做验证(另一部分做训练)。在竞赛中,参赛者可能从得到的训练数据(“已知的”)中分出一部分做验证(剩下的做训练),选出自己的最佳模型。

验证数据

测试(不管是模型测试还是验证)数据应该与训练数据不同 。这样,训练出的模型对测试数据是“未知”的,其测试表现才能更接近于实际情况。反之,如果用训练数据测试模型,其表现与实际情况相差可能是很大的。例如,未经剪枝的 决策树模型 ,即完全树,在训练数据上做分类预测可以做到 0 误差,即完全正确分类,而实际应用时差许多。

Holdout 验证

Holdout 验证是常用的模型验证方法,它随机地从原始的样本数据中抽取一部分(一般小于1/3)留做验证,剩下的作为训练数据。

K-Folder 交叉验证

由于验证数据与训练数据必须分开,Holdout 验证又为了保证训练数据的数量,可能导致其验证数据比较少。交叉验证,即 Cross Validation(CV),避开了上述问题。

k-folder 交叉验证将样本数据分成 k 份。做 k 次训练和验证,每次取其中一份作为验证数据,其余作为训练数据。最后取 k 次验证的平均作为结果。这样,验证数据的数量与原始样本数据量持平,充分利用了原始数据。k 常取 10。

留一验证

留一验证,即 Leave One Out Cross Validation,记为LOOCV ,是 K-Folder 交叉验证中的特殊情况。顾名思义,每次只留下一笔数据做验证,相当于 K-Folder 交叉验证中 k 取原始样本数据量。它把 K-Folder 交叉验证的优势发挥到极致,但相应地计算量相当高。