对于模型性能的评估,我们通常分为一下三步:
1. 对数据集进行划分,分为训练集和测试集两部分;
2. 对模型在测试集上面的泛化性能进行度量;
3. 基于测试集上面的泛化性能,依据假设检验来推广到全部数据集上面的泛化性能
数据集的划分
对于模型来说,其在训练集上面的误差我们称之为“训练误差”或者“经验误差”,而在测试集上的误差称之为“测试误差”。因为测试集是用来测试学习期对于新样本的学习能力的,因此我们可以把测试误差作为泛化误差的近似(泛化误差:在新样本上的误差)。对于我们来说,我们更care的是模型对于新样本的学习能力,即我们希望通过对已有样本的学习,尽可能的将所有潜在样本的普遍规律学到手,而如果模型对训练样本学的太好,则有可能把训练样本自身所具有的一些特点当做所有潜在样本的普遍特点,这时候我们就会出现“过拟合”的问题。
因此在这里我们通常将已有的数据集划分为训练集和测试集两部分,其中训练集用来训练模型,而测试集则是用来评估模型对于新样本的判别能力。对于数据集的划分,我们通常要保证满足一下两个条件:
1. 训练集和测试集的分布要与样本真实分布一致,即训练集和测试集都要保证是从样本真实分布中独立同分布采样而得;
2. 训练集和测试集要互斥
基于以上两个条件我们主要由三种划分数据集的方式:留出法,交叉验证法和自助法
2.1经验误差与过拟合
错误率 = a个样本分类错误/m个样本
精度 = 1 - 错误率
误差:学习器实际预测输出与样本的真是输出之间的差异。
训练误差:即经验误差。学习器在训练集上的误差。
泛化误差:学习器在新样本上的误差。
过拟合:学习器把训练样本学的”太好”,把不太一般的特性学到了,泛化能力下降,对新样本的判别能力差。必然存在,无法彻底避免,只能够减小过拟合风险。
欠拟合:对训练样本的一半性质尚未学好。
2.2评估方法
(在现实任务中,还需考虑时间、存储空间等开销,和其他因此。这里只考虑泛化误差。)
用一个测试集来测试学习其对新样本的判别能力,然后以测试集上的测试误差作为泛化误差的近似。
在只有一个包含m个样例的数据集D,从中产生训练集S和测试集T。
2.2.1留出法
D分为两个互斥的集合,一个作为S,一个作为T。
分层采样:S和T中正例和反例比例一样。
例如D包含500个正例,500反例。分层采样获得含70%样本的S,有350正例,350反例;30%样本的T,有150正例,150反例。
一般采用随机划分、重复进行实验评估后取平均值作为留出法的评估结果。
例如,进行100次随机划分,每次产生一个训练/测试集用于实验评估,100次后得到100个结果,而留出法返回的则是这100个结果的平均。
弊端:T比较小,评估结果不够稳定准确,偏差大。
常见将大约2/3~4/5的样本用于训练,剩余样本用于测试。
2.2.2交叉验证法
将D划分为k个大小相似的互斥子集。(D通过分层采样得到每个子集Di,保持数据分布一致性)。每次用k-1个子集的并集作为训练集,余下那个作测试集。即可获得K组训练/测试集,进行K次训练和测试,最终返回k个测试结果的均值。也称”k折交叉验证”。
为减小因样本划分不同而引入的差别,k折交叉验证要随机使用不同的划分重复p次,最终评估结果是这p次k折交叉验证结果的均值,即进行p*k次训练/测试。
留一法:m个样本划分成m个子集,每个子集包含一个样本。留一法中被实际评估的模型与期望评估的用D训练出来的模型很相似,因此,留一法的评估结果往往被认为比较准确。
留一法缺陷:数据集较大,例如,数据集包含100w个样本,则需训练100w个模型。且留一法的估计结果未必比其他评估法准确。
2.2.3自助法
从m个样本的数据集D,随机采样(选)一个样本,拷贝入训练D’,放回,继续随机挑选,直至m次。
样本在m次采样中始终不被踩到的概率(1-1/m)^m。
实际评估的模型与期望评估的模型都使用m个训练样本,而仍有约1/3的没有在训练集的样本用于测试。
自助法在数据集较小、难以有效划分训练/测试集时很有用。在初始数据量足够时,留出法和交叉验证法更常用。
2.2.4调参与最终模型
①选择适合的学习算法
②对算法参数进行设定,调参
总结
- 对于数据量充足的时候,通常采用留出法或者k折交叉验证法来进行训练/测试集的划分;
- 对于数据集小且难以有效划分训练/测试集时使用自助法;
- 对于数据集小且可有效划分的时候最好使用留一法来进行划分,因为这种方法最为准确。