通常,我们可以通过实验测试来对学习器的泛化误差进行评估并进而做出选择
留出法“留出法”直接将数据集DDD划分为两个互斥的集合,其中一个集合作为训练集SSS,另一个作为测试集TTT,即D=S∪TD=S\cup TD=S∪T,S∩T=∅S\cap T = \varnothingS∩T=∅。
注意:训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。通常采用“分层采样”
“分层采样”是保留类别比例的采样。例如对数据集DDD有1000个样例,其中包含500个正例,500个反例。70%样本作为训练集SSS,30%样本作为测试集TTT,则分层采样得到的SSS应包含350个正例、350个反例,TTT应该包含150个正例和150个反例。
单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。
常把2/3~4/5的样本用于训练,剩余样本用于测试
交叉验证法(k折交叉验证)“交叉验证法”先将数据集D划分为k个大小相似的互斥子集,即D=D1∪D2∪...∪DkD=D_1 \cup D_2 \cup ... \cup D_kD=D1∪D2∪...∪Dk,Di∩Dj=∅(i≠j)D_i \cap D_j = \varnothing(i \not = j)Di∩Dj=∅(i=j)。每个子集DiD_iDi都尽可能保持数据分布的一致性,即从DDD中通过分层采样得到。然后,每次用k−1k-1k−1个子集的并集作为训练集,余下的那个子集作为训练集,这样就可以获得k组训练/测试集,从而可进行kkk次训练和测试,最终返回的是这kkk个测试结果的均值。
k最常用的取值是10
kkk折交叉验证通常要随机使用不同的划分重复ppp次,最终的评估结果是这ppp次kkk折交叉验证结果的均值,例如常见的有“10次10折交叉验证”。
设DDD中包含mmm个样本,当k=mk=mk=m时,叫做留一法
自助法“自助法”是给定包含m个样本的数据集DDD,我们对它进行采样产生数据集D′D^{'}D′:每次随机从DDD中挑选一个样本,将其拷贝放入D′D^{'}D′,然后再将该样本放回初始数据集DDD中,使得该样本在下次采样时仍有可能被采到;这个过程重复mmm次后,我们就得到了包含mmm个样本的数据集D′D^{'}D′,这就是自助采样的结果。
初始数据集DDD中约有36.8%的样本未出现在采样数据集D′D^{'}D′中 数据量小的时候适合采用这种方式 调参与最终模型调参:原则就是,对每个参数选定一个范围和变化步长。
最终模型:在模型选择完成后,学习算法和参数配置已选定,此时再用数据集DDD重新训练模型,这个模型中使用了所有mmm个样本,这才是我们最终提交给用户的模型。