训练集、开发集和测试集数据划分以及机器学习参数调整

1.如何选择训练集、开发集和测试集数据?
a.一般需要将样本分成独立的三部分训练集(train set),开发集(develop set)和测试集(test set)。其中训练集用来估计模型,开发集用来确定网络结构或者控制模型复杂程度的参数,而测试集则检验最终选择最优的模型的性能如何。一个典型的划分是训练集占总样本的50%,而其它各占25%,三部分都是从样本中随机抽取。
b.在大数据时代的机器学习或者深度学习领域中,如果还是按照传统的数据划分方式不是十分合理,因为测试集和验证集用于评估模型和选择模型,所需要的数据量和传统的数据量差不多,但是由于收集到的数据远远大于传统机器学习时代的数据量,所以占的比例也就要缩小。比如我们拥有1000000,这么多的数据,训练集:验证集:测试集=98:1:1。如果是两类,也就是相同的道理。如果你的训练和测试数据来自相同的分布1.打乱并将您的数据分成训练/开发/测试集
Ng建议训练/开发/测试拆分约70%/ 15%/ 15%。

2.测量你的训练错误和开发集错误,并计算偏差和方差
计算你的偏差和方差为:

  • 偏差=(训练集错误) - (人为错误)
  • 方差=(开发集错误) - (训练集错误)

3.你的偏差值高吗?
高偏差的例子:

错误类型 错误率
人为错误 1%
训练集错误 5%
开发集错误 6%

在进入下一步之前修正高偏差。
4.你有高方差吗?
高方差的例子:

错误类型 错误率
人为错误 1%
训练集错误 2%
开发集错误 6%

一旦你解决了高方差,那么你完成了!如果你的训练和测试数据不在同一分布上1.拆分你的数据
如果你的训练和测试数据来自不同的分布,请确保至少您的开发和测试集是从相同的分布。你可以这样做,采取你的测试集,并使用一半作为开发和一半作为测试。
把你的训练集中的一小部分(称之为“训练-开发”),并将您的测试数据分解为开发和测试:

训练(分布1) 测试(分布2)
训练、训练-开发 开发、测试

2.测量你的错误,并计算相关指标
计算这些指标,以帮助你了解你的工作重点:
错误类型
公式

偏差 (训练错误)-(人为错误)
方差 (训练-开发错误)-(训练错误)
训练/测试不匹配 (开发错误) - (训练-开发错误)
开发错误 (测试错误) - (开发错误)

3.你有高偏差吗?
高偏差的例子:

错误类型 错误率
人为错误 1%
训练集错误 10%
训练-开发错误 10.1%
开发集错误 10.2%

在进入下一步之前修正高偏差。
4.你有高方差吗?
高方差的例子:

错误类型 错误率
人为错误 1%
训练集错误 2%
训练-开发错误 10.1%
开发集错误 10.2%

在进入下一步之前修正高方差。
5.你有训练/测试不匹配吗
训练/测试不匹配的例子:

错误类型 错误率
人为错误 1%
训练集错误 2%
训练-开发错误 2.1%
开发集错误 10%

在进入下一步之前修正训练/测试不匹配。
6.你是否过度拟合你的开发集?
过度拟合开发集的例子:

错误类型 错误率
人为错误 1%
训练集错误 2%
训练-开发错误 2.1%
开发集错误 2.2%
测试错误 10%

一旦你解决了拟合开发集,那么你完成了!如何修正高偏差

Ng提出了这样一种修正高偏差模型的方法:

1.png
  • 尝试一个更大的模型
  • 尝试更长时间的训练
  • 尝试一个新的模式架构(这可能很难)

如何修复高方差

Ng提出了一些修正高方差模型的方法:

  • 获取更多数据
  • 这包括数据合成和数据扩充
  • 尝试添加正则化
  • 尝试提前停止
  • 尝试新的模型架构(这可能很难)

如何修复训练/测试不匹配

Ng建议用这种方式来修正一个具有高训练/测试不匹配的模型:


2.png
  • 尝试获得更多与你的测试数据类似的数据
  • 尝试数据合成和数据扩充
  • 尝试新的模型架构(这可能很难)

如何解决过度拟合你的开发组

Ng建议只有一种方式来修复设备过度配置:

  • 获取更多的开发数据,这也将包括数据合成和数据增加。

--图文来自于吴恩达教授《机器学习》、《DeepLearning》视频

文章来自:http://www.osai.club/forum.php?mod=viewthread&tid=6&extra=page%3D1(复制粘贴打开)

你可能感兴趣的:(训练集、开发集和测试集数据划分以及机器学习参数调整)