模型评估中测试集的选择方法

  • 前言

对训练好的模型进行评估,目的是为了测试我们所训练的模型是否拥有好的泛化能力。为此,需使用一个“测试集”来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”作为泛化误差的近似。通常我们假设测试样本也是从样本真实分布中独立同分布采样而得。但需注意的是,测试集应该尽可能与训练集互斥,即测试样本尽量不在训练集中出现,未在训练过程中使用过。因此本文介绍如何从数据集中选择测试集的方法。

以下为实验过程中总结的方法。

  • 留出法

“留出法”直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T。S与T互斥。在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。

以二分类任务为例,假设D包含1000哥样本,将其划分为S包含700个样本,T包含300个样本,用S进行训练后,如果模型在T上有90个样本分类错误,那么其错误率为(90/300)*100%=30%,相应的,精确度为1-30%=70%

需注意的是, 训练/测试机的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响,例如在分类任务中,至少要保持样本的类别比例相似。如果从采样的角度来看待数据集的划分过程,则保留类别比例的采样方式通常称为“分层采样”。例如通过对D进行分层采样而获得含70%样本的训练集S和30%的测试集T,若D包含500个正例,500个反例,则分层采样得到的S应包含350个正例,350个反例,而T则包含150个正例,和150个反例;若S,T中样本类别比例差别很大,则误差估计将由于训练/测试数据分布的差异而产生偏差

于此同时,即便在给定训练/测试集的样本比例后,但存在多种划分方式对初始数据集D进行分割,例如在上面的例子中,可以把D中的样本排序,然后把前350个正例放到训练集中,也可以把最后350个正例放到训练集中。这些不同的划分将导致不同的训练/测试集,相应的,模型的评估结果也会有差别。因此,单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分,重复进行实验评估后取平均值作为留出法的评估结果。例如进行100次随机划分,每次产生一个训练。测试集用于实验评估,100次后就得到100个结果,而留出法返回的则是这100个结果的平均。

此外,我们希望评估的使用D训练出的模型的性能,即能将模型遍历我们的整个数据集。但留出法需划分训练/测试集,着就会导致一个窘境。若令训练集S包含绝大多数样本,则训练出的模型可能更接近于用D训练出的模型,但由于T比较小,评估结果可能不够稳定准确;若令测试集T多包含一些样本,则训练集S与D差别更大了,被评估的模型与用D训练出的模型相比可能有比较大差别,从而降低了评估结果的保真性。这个问题没有完全的解决方案,常见的做法是将大约2/3~4/5的样本用于训练,剩余样本用于测试。

  • 交叉验证法

“交叉验证法“先将数据集D划分为k个大小相似的互斥子集。每个子集都尽可能保持数据分布的一致性,即从D中通过分层采样得到。然后,每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集;这样就可获得K组训练/测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果的均值。显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于k的取值,为强调这一点,通常把交叉验证法称为”K折交叉验证“。K最常用的取值是10,此时称为10折交叉验证;其他常用的K值有5,20等。

于留出法相似,将数据集D划分为k个子集同样存在多种划分方式,为减小因样本划分不同而引入的差别,K折交叉验证通常要随机使用不同的划分重复P次,最终的评估结果是这P次K折交叉验证结果的均值。例如常见的有”10次10折交叉验证“。

  • 留一法(特殊的交叉验证法)

假设数据集D中包含m个样本,若令k=m,则得到了交叉验证的一个特例:留一法。显然,留一法不受随机样本划分方式的影响,因为m个样本只有唯一的方式划分为M个子集------每个集合包含一个样本;留一法使用训练集于初始数据集相比只少了一个样本,这就使得在绝大多数情况下,留一法中被实际评估的模型于期望评估的用D训练出的模型很相似。因此,留一法的评估结果往往被认为比较准确。然而,留一法也有其缺陷:在数据集比较大时,训练M个模型的计算开销可能是难以忍受的(例如数据集包含1百万个样本,则需训练1百万个模型),而这还是在未考虑算法调参的情况下。另外,留一法的估计结果也未必永远比其他评估方法准确;

以下做一个小总结:

1.留全法:缺乏保真性,保真性意思为在训练模型时候所用的训练集尽量等于或接近给定未拆分的数据集合,同时没办法保证即使进行多次留全法后每个数据都被训练到。

2.交叉验证:保证每个数据都可以被训练到,虽然保真性得以完善,但是测试集合仍旧占据部分数据。

3.留一法:特殊的交叉验证法,保证每个数据都可以被训练到的同时,使测试集合只有一个样本,使训练集接近原数据集合。但此方法遇到大数据集时,计算庞大。

猜你喜欢

转载自blog.csdn.net/weixin_41370083/article/details/81707496