经验误差与过拟合
训练误差与泛化误差
训练误差:学习器在训练集上的误差。
泛化误差:学习器在新样本上的误差。
(泛化越强说明学习器在新样本的适应能力越强)
一般泛化误差我们很难去处理,所以一般做法是将数据集分成训练集和测试集,以测试集来测试学习器对新样本的判别能力,测试误差作为对泛化误差的估计。测试集与训练集尽可能互斥。
欠拟合:学习器的学习能力差,部分总体特征没有学习到,易于克服,例如在决策树学习中扩展分支、神经网络虚席中增加训练轮数。
过拟合:学习器的学习能力过强,将部分样本特征扩大成总体特征。这是机器学习面临的关键障碍,过拟合是无法避免的,我们只能“缓解”,减小其风险。
划分数据集的方法
留出法
将原始数据集D划分成两个互斥的集合S(训练集)、T(测试集)。
注意:
- 数据划分时尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差。(分层采样 stratified sampling)
- 一般是将数据的2/3-4/5的数据用于训练,剩余样本用于测试。(训练集太小,S与D的差异越大,样本规模不同引入了估计误差,降低评估结果的保真性;而若S太大,则T越小,评估结果不够稳定。)
- 单次使用留出法得出的结果往往不够稳定,一般采用若干次随机划分、重复进行试验评估后取平均值作为留出法的评估结果。
留一法(leave-one-out,LOO):不受随机样本划分方式的影响,m个样本只有唯一方式划分为m个子集——每个子集包含一个样本。
缺点:数据集比较大时,训练m个模型需要耗费太多时间内存。
交叉验证法
k折交叉验证法:将数据划分为k个大小相似的互斥子集,每个子集都尽可能保持数分布的一致性。每次用其中k-1个子集的并集作为训练集,剩下的那个子集作为测试集,获得k组训练/测试集,做k次训练和测试,最终返回这k次测试记过的均值。
ps:交叉验证评估的结果的稳定性和保真性很大程度上取决于k的取值。
p次k折交叉验证法:数据集D划分为k个互斥子集存在很多种划分方式,为减小因样本划分不同而引入的误差,k折交叉验证通常需要随机重复p次不同的划分。
自助法 bootstrapping
(解决训练样本规模不同而导致的估计偏差)
自助采样法(bootstrap sampling)
原数据D(包含m个样本),通过有放回抽样m次产生新数据集D’,D中有部分样本在D’中重复出现,而一部分样本在D’中不出现。
也就是说,大概有36.8%的样本不会被采样,则以D’作为训练集,D\D’作为测试集。这样的测试结果,也称为“包外估计(out-of-bag estimate)”
优点:保持了训练样本与原样本的规模一致;在数据集较小、难以划分训练\测试集时很有效。
缺点:改变了原始数据集的分布,会引入估计偏差。
在初始数据量足够的情况下,留出法与交叉验证法更常用一些。
(西瓜书的学习笔记,摘录和总结)
##参考文献
1、周志华. 机器学习[M].北京:清华大学出版社,2016