AI学习笔记(6)——模型评估的几种方法

时间:2024-04-13 10:44:45

训练误差(training error)或经验误差(empirical error):学习器在训练集上的误差。

泛化误差(generalization error):学习器在新样本上的误差。

因为我们不可能真的获取到整个数据集,而且如果我们能对整个数据集进行学习,也就不需要机器学习算法了,机器学习的目的,就在于用有限的数据训练机器,然后用学得的模型去解决未知的同类问题。
所以如何在训练模型的时候判断算法选择的优劣或者是参数调节(parameter tuning)的好坏呢?用训练的数据去获取误差当然是不可行的,因此我们就需要把拥有的训练数据分成互斥的两部分分别用来训练学习器和获取误差进而作为泛化误差的近似值,后者被称为测试集(testing set),测出的误差称为测试误差(testing error)。

几种常见的做法如下:

留出法(hold-out)
其实就是最简单的一分为二,只不过需要注意的是:第一,训练/测试集都需要分层采样(stratified sampling),不然会导致误差非常大;第二,单次使用留出法的估计结果往往非常扯淡,所以一般需要多次的估计,结果则取这些次结果的均值。
常见的分法一般是将大约2/3~4/5的样本用于训练,剩余的样本用于测试。
另外,一般而言,测试集至少应含30个样例。
交叉验证法(cross validation)
直接将数据集划分为k个大小相似的互斥子集,并且每个子集的分布都要相似,然后分别取一个块为测试集,其余块为训练集进行k次训练和测试,最终返回的是其均值。而为了凸显出k取值的重要性,交叉验证法还被称为k折交叉验证(k-fold cross validation)。
而且为了减小因为不同的划分而引入的差别,k折交叉验证往往还需要取不同的划分进行p次评估并取均值作为最后结果,如“10次10折交叉验证”。
另外,特殊的是当k取为数据集的个数m时,称为留一法(Leave-One-Out简称LLO),因为每个块内的数据个数均为1,而训练集内的数据个数为m-1非常接近m,所以往往认为留一法的评估结果比较准确。
(但我不明白的一点是,如此一来测试集只有一个样本,那测试误差怎么会准确呢???不是说测试集至少要30个才靠谱嘛???)
自助法(bootstrapping)
每次从D中随机取出m个样本组成D’,易见D’中总会有一些原来D中的元素出现多次,而又有一些D中的元素不会出现在D’中,且后者的期望为1/e=0.368(具体推导过程见书中,十分简单)。我们将D’作为训练集,而将D/D’作为测试集,这样我们就可以获得一个拥有m个元素的训练集和一个不属于训练集的接近m/3的测试集了。这样的测试结果,亦称为包外估计(out-of-bag estimate)。
本方法在用于数据集较小,难以划分训练/测试集的情况非常有效,但由于改变了训练集的分布,所以会引入一定的估计误差,所以,当初始数据集足够时,我们往往更趋向于前两种方法。

尾页

今天,看了地球的脉动1的2、3集,雪豹真的是一种超级萌的大猫啊!
AI学习笔记(6)——模型评估的几种方法
图片取自,百度百科。
而且小熊猫也好萌的!!!

最后,祝大家学习快乐,快乐学习!