西瓜书第二章的笔记,本章主要是如何评估一个学习算法的各种方法,类似传统算法书中用时间复杂度和空间复杂度来评估类似,机器学习算法的评估要复杂得多。
一、基本概念
错误率(error rate)-分类错误的样本数占样本总数的比例,在m个样本中有a个样本分类错误,则错误率E=a/m,则精度(accuracy)为1-a/m。
误差(error)-学习算法在实际预测输出与样本的真实输出之间的差异,在训练集上的误差称为“训练误差(training error)”或“经验误差(empirical error)”,在新样本上的误差称为“泛化误差(generalization error)”。
过拟合(overfitting)-学习器把训练样本自身的特点当作了所有潜在样本都具有的一般性质,导致泛化性能下降。与之相对是欠拟合(underfitting)。
测试集(testing set)-用于测试学习器的泛化误差的样本集。
验证集(validation set)-模型评估与选择中用于评估测试的数据集,验证集一般用于调参。
二、评估方法
留出法(hold-out)-直接将数据集D划分为两个互斥的集合,分别是训练集S和测试集T,在S上训练模型,用T来评估测试误差作为对泛化误差的估计。
在采用留出法时训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的差别而对最终结果产生影响,从采样角度来看数据集的划分过程,保留类别比例的采样方式通常称为“分层采样”。并且因为单次留出法得到的估计结果往往不稳定可靠,所一般要采用若干次随即划分、重复进行实验评估后取平均值作为留出法的评估结果。
留出法面临S和T的划分矛盾,即S过大则模型更接近于D的训练结果但是T的评价结果不准确,T过大则S和D的差别扩大,降低评估结果的保真性。
交叉验证法(cross validation)-将数据集D划分为k个大小相似的互斥子集,即,每个子集Di都尽可能保持数据分布的一致性,每次用k-1个子集的并集作为训练集,余下的作为测试集,这样可以进行k次训练和测试,最终返回k个测试结果的均值。该方法又称k折交叉验证(k-fold cross validation)。
为减少因样本划分不同引入的差别,k折交叉验证通常要随机使用不同的划分重复p次,最终评估结果取均值。
留一法(leave-one-out)属于交叉验证法的特例,假定数据集D中包含m个样本,若令k=m便是留一法,且留一法不受样本划分方式的影响,留一法的缺点是当数据量较大时训练m个模型开销过大。
自助法(bootstrapping)-一种可以减少训练样本规模不同造成的影响,同时还能比较高效的进行实验评估的方法。给定包含m个样本的数据集D,我们对其进行有放回的随机抽取,获得数据集C,重复执行m次后,得到一个包含m个样本的数据集C,通过自助采样,D中约有36.8%的样本不会出现在C中。自助法在数据集较小、难以有效划分训练/测试集时很有用。
三、性能度量
先列举一些接下来要用的假设量,样例集