模型评估与选择
模型评估与选择
1 留出法
该方法最为简单粗暴,直接将数据集D划分为两个互斥的集和,其中一个作为训练集S,另外一个作为测试集T。该方法需要注意的是,训练/测试集的划分要尽可能保持数据分布的一致性,并且即便在给定训练/测试集的样本比例之后仍然存在多种划分方式对数据集进行分割,这些不同的划分将会导致不同的训练/测试集,因此,模型评估的结果也会有差别。
所以在使用留出法的时候,一般要采用若干次的随机划分,重复进行实验评估后取平均值作为留出法的评估结果。此外我们希望评估的是用D训练出的模型的性能,但是留出法需划分训练集和测试集,这样将会导致一个问题:如果训练集S中包含大部分样本,那么训练出来的模型可能更加接近于用D训练出来的模型,但是由于T比较小,评估结果可能不够稳定准确;反之,如果训练集S比例小,那么训练出来的模型与用D训练出来的模型可能相差甚大。最常见的做法就啊是将2/3~4/5的样本用于训练,剩下的用于测试。
2 交叉验证法
该类方法是目前机器学习中最为常见的评估方法,先将数据集D划分为k的大小相似的互斥子集,每个子集都尽可能保持数据分布的一致性,然后,每次使用k-1个子集的并集作为训练集,剩余的那个子集作为测试集,这样就可以获得k组训练/测试集,从而进行k次训练和测试,最终的返回结果是这k个测试结果的均值。显然,k的取值在这种方法中是关键。为了强调这一点,通常把交叉验证法成为"k折交叉验证"。
假定数据集D中包含m个样本,若令k=m,则得到了交叉验证发的一个特例:留一法。留一法使用的训练集与初始数据集相比只少了一个样本,这就使得在绝大多数情况下,留一法中被实际评估的模型与期望预估的用D训练出的模型跟相似。因此,留一法的评估结果往往是被认为比较准确的。然而,在数据集比较大的时候,训练m个模型的计算开销是难以忍受的。
3 自助法
在上面所说的留出法和交叉验证法中,由于保留了一部分样本用于测试,因为实际评估的模型所用的训练集比D小,这样就可能导致预估偏差。为了减少训练样本规模不同造成的影响,同时还能比较高效的进行实验估计,“自助法”横空出世。
自助法直接以自助采样法为基础,给定包含m个样本的数据集D,我们对D进行m次有放回的采样(每次只抽取一个),这样我们就得到了包含m个样本的数据集D+,这就是自助采样的结果。显然,D中有一部分样本会在D+中多次出现,另外一部分样本不会出现。由此,样本在m次采样中始终不会被采到的概率为:(该公式不懂的翻翻高数)
由此可见,通过自助采样,初始数据集D中大概有36.8%的样本从没有出现在采样数据集D+中,因此。采用D+作为训练集,剩下的作为测试集。该方法在数据集较小、难以有效划分训练/测试集很有用。在初始数据量足够的时候,留出法和交叉验证法更加常用一些。
以上三种评估方法中交叉验证是楼主遇到最多也是自身使用做多的方法,做个小小的总结,加深一些细节性的记忆。不同的评估方法还是根据不同的任务和应用场景进行选择。
4 调参与模型选择
无论采用那种哪种评估方法,实际上都是牵扯模型的调参。在模型参数调节的过程中,往往会划分出“验证集”,在实际场景中,测试集对我们来说是一份宝贵的数据,在参与各种数据科学竞赛,如kaggle、天池大数据等等,当我们在建立模型的时候,往往我们自己并不清楚模型的好坏,因为平台提供的测试集均是不带标签的数据,这时候,我们往往会在测试集中划分出一部分验证集来临时测试模型的好坏,并且基于模型在验证集上的性能在进行模型选择和调参。