周志华机器学习第二章笔记
注:我们通常把学得模型在实际使用中遇到的数据称为测试集,我们用测试集上的判别效果来估计模型在实际使用时的泛化能力。
把训练数据划分为训练集和验证集,基于验证集上的性能来进行模型选择和调参。
一、经验误差与过拟合
训练误差(经验误差):学习器在训练集上的误差。
泛化误差:学习器在新样本上的误差。
欠拟合比较容易克服,如在决策树学习中扩展分支,在神经网络学习中增加训练轮数等;
而过拟合则无法彻底避免。
二、评估方法
测试集和训练集的划分选择
留出法
交叉验证法
自助法
1、留出法
将数据集D划分为两个互斥的集和,其中一个作为训练集,另一个作为测试集。
训练集/测试集的划分要尽可能的保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。
如在分类任务中至少要保持样本的类别比例相似。(如可以采用分层抽样)
但是尽管确定了样本的比例,在划分样本的时候也难免存在其他偏差,所以在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。
而训练集和测试集的数量也会对结果差生影响,这个问题还没有完美的解决方案,常见的做法是将大约2/3 ~ 4/5的样本用于训练,剩余的样本用于测试。
2、交叉验证法
先将数据集D划分为k个大小相似的互斥子集,每个子集都尽可能的保持数据分布的一致性,即从D中通过分层抽样得到。
然后每次用K-1个子集作为训练集,余下的子集作为测试集;这样就得到K组训练/测试集,最终返回k个测试结果的的均值。
显然的,交叉验证法评估结果的稳定性和保真性很大程度上取决于k的取值,所以又称为“K折交叉验证“
k最长的取值是10,其余的是5、20等
与留出法类似,将数据集D划分为K个子集同样存在多种划分方式,为较少因样本划分不同而引入的差别,K折交叉验证通常要随机使用不同的划分重复P次,最终的评估结果是这P次K这交叉验证结果的 均值,例如常见的10次10折交叉验证。
留一法
3、自助法
我们希望用于评估的是用D训练出的模型,但是留出法和交叉验证中都保留了一部分作为测试,所以实际评估的模型所使用的训练集比D小,这必然会引入一些因训练样本规模不同而导致的估计偏差。留一法受训练样本规模变化的影响较小,但是计算复杂度太高。
自助法是一个比较好的解决方法,
对数据集D进行有放回的采样,m次重复采样后得到一个数据集。样本在m次采样中始终不被采到的概率是
,取极限得到
即通过自助采样,初始数据集D中约有36.8%的样本未出现在采样数据集
中,于是我们可以将
用作训练集,D\
用作测试集,这样实际评估的模型和期望评估的模型都使用了m个训练集;
而我们还有约1/3的没有在训练集中出现 的样本用于测试,这样的测试结果亦称为“外包估计”;
自助法在数据集较小、难以有效划分训练/测试集时比较有用。
自助法能从初始数据集中产生多个不同的训练集,对集成学习等方法有很大的好处;
但是自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差,因此在初始数据量足够大时,留出法和交叉验证法更常用。
4、调参与最终模型
一般对每个参数选定一个范围和变化步长,如在【0,,05】范围以0.05为步长,则实际要评估的候选参数值有5个,最终从这5个候选值中产生选定值。这样的结果显然不是最佳的,但这是在计算开销和性能之间进行折中的结果;
即使是在折中后调差也仍然是困难的,如对于3个参数的模型,每个参数仅考虑5个候选值,这样对每一组训练/测试集就有125个模型;而很多强大的学习算法有不少的参数,以至于在不少任务中,参数调得好不好往往对最终模型性能有关键的影响。
对于给定包含m个样本的数据集D,在模型评估和选择过程中由于需要留出一部分数据进行评估测试,所以我们只使用了一部分数据训练模型。因此在模型选择完毕后,学习算法和参数配置已选定,此时应该用数据集D重新训练模型,这个模型在训练过程中使用了所有的m个样本,这才是我们最终提交给用户的模型。
把训练数据划分为训练集和验证集,基于验证集上的性能来进行模型选择和调参。