深度学习数据集的区分方法

深度学习数据集的划分方法

文章原载于知乎@之乎者也

1.为什么需要举行数据集的划分

(1) 在训练模型时,我们得到了一个较高的准确率,比如达到了99%,训练误差只有1%,本以为此模型在应用于评估新样本时,可以得到好的结果,但是令我们意外的是,结果竟然十分差。那么,这样的模型好不好呢?显然这不是我们想要的模型。

(2) 实际上,我们希望的是,一个模型在新样本上能够得到好的结果,也就是泛化能力。所以说,当学习器把训练样本训练到太好了,很有可能是已经把训练样本自身的一些特点当做了所有潜在样本都会具有的一般性质,这样泛化能力也就降低了。这样的情况我们可以称之为过拟合(overfitting)与欠拟合(underfitting)对应。

你也许想到了,我们需要一个测试集测试学习器对新样本的判别能力。以测试误差作为泛化误差的近似。注意,测试集应该与训练集互斥。

2.常用的划分方法

(1)留出法

留出法(hold-out)将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,即:


在S上训练出模型后,用T作为评估其测试误差,作为对泛化误差得估计。

训练/测试及的划分要尽可能的保持数据分布的一致性,避免因数据划分过程引入额外的偏差对最终结果产生影响。例如对数据集D进行分层采样获得70%个样本作为训练集S,30%样本作为测试集,如果D包含500正样本,500负样本,则分层采样的S应该包含350正样本,350负样本,T中则包含150正样本,150负样本,如果S、T中样本类别差别很大,则误差估计将由于训练/测试数据分布得的差异性产生偏差。

另外,在采用留出法时要采用若干次随机划分,每次产生一个训练/测试集用于实验的评估。

此外若训练集S包含绝大多数样本,则训练出来的结果可能更接近D训练出的模型,由于T比较小,评估结果可能不够稳定准确;若令测试集T多包含样本,则训练集S与D差别更大了,被评估的模型与用D训练出来的模型相比可能较大差别,从而降低了评估结果的保真性。常用的做法是将大约2/3~4/5样本用于训练,剩余的样本用于测试。

(2)交叉验证法

交叉验证法(cross validation)先将数据集D划分为K个大小相似的互斥子集,即

 每个子集

都尽可能保持数据分布的一致性,即从

中通过分层采样得到。然后,每次用

个子集作为训练集,剩余的那个子集作为测试集;这样就可以获得k组训练-测试集,从而可以进行

次训练和测试,最终返回

个测试结果的均值。

显然,交叉验证法结果的稳定性和保真性在很大程度上取决于k的取值,通常把交叉验证法称为“K折交叉验证”,

的取值常用10,此时为10折交叉验证。其他常用的有5,20等。下图为10折交叉验证示意图:

10折交叉验证示意图

与留出法类似,将数据集D划分为K个子集同样有多种方式,为减小因为样本划分不同而引起的差别,K折交叉验证通常随机使用不同的划分重复P次最终结果为P次K折交叉验证结果的均值,常见的有“10次10折交叉验证 ”。

(3)自助法

自助法直接以自助采集法(bootstrap sampling)为基础,给定包含m个样本的数据集D,对其进行采样产生数据集D’ ,它的方式是每次从D中挑选一个样本,将其拷贝到D’中,然后再将该样本放入初始数据集D中,使样本在下次采样时仍然可能被采样到,这个过程重复执行m次,得到包含m个样本的数据集D’这就是自助法的结果。

显然,D中有一部分样本会在D’中出现多次,而另一部分可能不出现。可以做一个简单的估计,样本在m次采样中始终不被采样的概率:

取得极限为

,所以初始数据集D中约有36.8%样本未出现在数据集D’中。

优点:训练集的样本总数和原数据集一样都是 m 个,并且仍有约 1/3 的数据不出现在训练集中,而可以作为验证集。

缺点:这样产生的训练集的数据分布和原数据集的不一样了,会引入估计偏差。

用途:自助法在数据集较小,难以有效划分训练集/验证集时很有用;此外,自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处。


本文链接: https://www.yizhekk.com/?p=221651&preview=true

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注