训练集与测试集分布差距

一位老铁的说法:

第一,分布差距大是重要特征数值差距大,比如一个是 0-1,另外一个 0.5-2,如果是这种情况无解,你能做的只能扩大训练集合,因为重要特征一旦偏离,哪怕数学上都是有交集,现实上下文都是差距极大的,这和数据采集流程和规范等非技术问题有关。

第二,重要特征数据差距不大,不太重要的差距较大,这种情况可以屏蔽这些特征,或者利用类似迁移学习 prototype 那种思路约束特征输入不过于偏离训练集。

第三,所有特征数值差距都不大,但是特征之间相关性统计差距大,比如训练集当中 A 和 B 相关性更加强,但是测试集合 A 和 C 的相关性更加强,这对你模型本身高阶组合就要约束,比如上DNN 的话,前期就不是明智的选择。

第四,特征数值差距不大,特征相关性差距也不大,但是目标数值差距过大,这个好办,改变任务设置共同的中间目标,比如你说的目标值是否可以采取相对值,增长率,夏普等,而非绝对值

划分数据集合
假设9K张生成数据,1K张真实数据
一:可以将两个数据集组合起来,然后随机洗牌。并将结果数据集分割成训练/验证/测试集。缺点:但是在验证集中,只有十分之一的图片来自真实数据集。在大多数情况下,我们都在根据生成数据的分布来优化网络模型,这显然不符合优化模型的目的。

二:另一个方法是让验证/测试集来自真实数据集,分出部分真实数据与生成数据混合作为训练集。假设像以前一样对训练/验证/测试集使用96:2:2的划分。验证/测试集将各有2000张真实图像数据,剩下的真实数据和全部生成数据都为训练集。缺点:然而,训练集现在不同于验证/测试集。这意味着在很大程度上,我们是在生成图像上训练网络模型。因此,优化模型需要花费更多更长的时间。更重要的是,当训练集和验证集上的损失差别较大时,我们无法判断这是由过拟合还是数据不匹配造成的。假设训练误差为2%,验证误差为10%。鉴于这两组数据来自不同的分布,这两组数据之间8%的差异中有多少是由于数据不匹配造成的,有多少是由于模型过拟合造成的,我们并不能判断。

三、修改训练/验证/测试集划分。取出训练集的一小部分,称之为“桥集”。桥集将不用于训练网络模型。它是一个独立的集合,划分方式如下所示:
在这里插入图片描述
如果训练:桥:验证:测试集上的误差分别为2%、9%、10%、12%。
因为桥集与训练集来自相同的分布,排除了数据不匹配(数据分布)的影响,它们之间的误差相差为7%,所以有7%的误差来自方差误差,泛化能力不足。桥集和验证集有1%的差异,所以有1%的误差来自数据不匹配误差。如果训练集桥集误差相差小,则可能是方差所带来的误差。测试集与验证集2%的误差为方差误差(存疑)。

参考
https://www.zhihu.com/question/265829982/answer/1770310534
https://zhuanlan.zhihu.com/p/72503153?from_voters_page=true

你可能感兴趣的:(ML基础,机器学习)