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提出了这样一种修正高偏差模型的方法:
- 尝试一个更大的模型
- 尝试更长时间的训练
- 尝试一个新的模式架构(这可能很难)
如何修复高方差
Ng提出了一些修正高方差模型的方法:
- 获取更多数据
- 这包括数据合成和数据扩充
- 尝试添加正则化
- 尝试提前停止
- 尝试新的模型架构(这可能很难)
如何修复训练/测试不匹配
Ng建议用这种方式来修正一个具有高训练/测试不匹配的模型:
- 尝试获得更多与你的测试数据类似的数据
- 尝试数据合成和数据扩充
- 尝试新的模型架构(这可能很难)
如何解决过度拟合你的开发组
Ng建议只有一种方式来修复设备过度配置:
- 获取更多的开发数据,这也将包括数据合成和数据增加。
--图文来自于吴恩达教授《机器学习》、《DeepLearning》视频
文章来自:http://www.osai.club/forum.php?mod=viewthread&tid=6&extra=page%3D1(复制粘贴打开)