????????开门见山,只玩真实,直接先介绍三个概念:训练误差、测试误差和泛化误差。
????????训练误差:也称为经验误差,简单理解就是机器学习模型在训练集上的真实label和预测label的误差。
????????测试误差:模型在测试集上的真实label和预测label的误差。
????????泛化误差:模型在新样本上的真实label和预测label的误差。
????????关于测试误差和泛化误差我是这么理解的:泛化误差,所谓泛化就是广泛,可以将泛化误差比喻成一个无穷大的数据集的误差;而测试误差呢则只是对于测试数据的误差,可能测试集中只有10000个数据,但通常,我们可以将测试误差作为泛化误差的近似。
????????然而在模型的训练过程中,由于我们无法利用测试数据来进行训练,因此我们只能使得模型在训练集中的误差尽可能小从而希望在测试集中也小,泛化误差也小,因此我们所能做到的只能是使训练误差尽可能小。
????????但是呢,这样会又引出一个问题,那就是过拟合和欠拟合的问题。
? ? ? ? 过拟合:在训练集上的误差非常小,模型的效果非常好,但是在测试集上效果却一般。说明该模型只是在训练集上提取的特征非常好,能够很完美的进行分类任务,但是如果用新的数据集进行分类,则无法很好的提取出特征。
? ? ? ? 欠拟合:在训练集上都不能提取什么特征,误差很大。可能是模型过于简单无法将数据进行分类。
? ? ? ? 因此我们可以看出,训练集和测试集的选择是十分重要的,下面我将介绍三种常用的切分数据集方法:
? ? ? ? 留出法:将数据集分为两个互斥数据集,需满足:训练集和测试集尽可能保持数据分布的一致性;由于这种分割方式的不稳定性,可以多次划分、进行实验后取平均值;一般训练集:测试集=2:1或4:1。
? ? ? ? 交差验证法:将数据集分为k个互斥子集,也需满足数据分布一致。过程:用k-1个数据集做训练集,剩下的一个做测试集,这样可以得到k个结果,最后取均值。但这个方法也存在留出法中分割方式的不稳定性,因此也得p次划分取平均值。这里也要介绍留一法:就是在交差验证法中p=k,则每个子集只有一个样本,这时能够不受数据分布的影响,结果也比较准确,但是计算开销很大。
? ? ? ? 自助法:这个方法比较新颖,我们可以看到,上面介绍的两种方法中的训练集都是数据集的子集,因此在训练中不能覆盖到整个数据集,样本的规模变小,可以引起误差,而自助法可以覆盖到全部。假设数据集有m个数据,训练集中没有数据,如果每次从数据集中有放回的取出一个数据放入训练集中,持续操作m次,这时会发现数据集中可能有的数据出现四五次,有的没出现过,我们可以利用m次都没出现求概率并取极限可以得出大概有1/3的数据会一次都不出现,这时便可以产生2/3的训练集和1/3的测试集,很奇妙吧。自助法在数据集较小、数据集难以分割的时候效果很好,但是这种操作会改变整个数据集的分布特点,引入误差。
? ? ? ? 一般而言,在初始数据集够多时,选择留出法和交差验证法,我反正还没用过自助法,基本上留出法用的较多。
|