一、学习曲线(Learning curves)
用处:帮助了解学习算法性能如何的方式
曲线随着经验的数量(算法所拥有的训练样本)发生的变化
PS: 随着训练样本的增大,交叉验证误差会越来越小,趋于平稳;而训练集的误差会越来越大,趋于平稳(因为模型很难去符合所有的样本)。
如果算法本身就是高偏差(训练集的误差大),那增加数据集也不会让偏差改变太多。所以在确定是否要增加数据集之前,要先看我们的算法是否有高偏差。
而如果我们的算法是有高方差(也就是训练集的误差低于我们所知的准线误差,而交叉验证误差要高于准线误差的情况),这个时候就是可以增加数据集了,因为函数过拟合。
综上:
高偏差:增加数据集的量可能没有用
高方差:增加数据集的量可能有用
所以一般在做实验的时候,假如我们的数据集有1000条数据,为了看我们是高偏差还是高方差,我们会选择先选取100条,或者200条数据,这样逐步递增,把学习曲线画出来,看看数据量的增加,J_cv 和J_train之间的关系,这样才能判断是高偏差还是高方差
二、高偏差和高方差的调整
解决高方差(过拟合):
1. 增加训练集的数据样本
2. 尝试更少的特征
3. 尝试增加正则化参数的值
解决高偏差(欠拟合):
1. 增加特征
2. 尝试多项式特征
3. 尝试减小正则化参数的值
但是实际上,我们可以通过训练神经网络来解决高偏差和高方差
当具有高偏差时,可以增加神经网络的层数和神经元数量来调整,直到高偏差消失。
此时,如果具有高方差,就可以通过正则化参数的调整来让高方差消失。这样就可以无脑训练出一个合适的模型。
三、误差分析过程(Error analysis process)
指人工检查算法出错的这些样本,对样本进行主题/属性的分类,找到是为什么让样本出错,针对性的去解决问题。比如算法可能是因为A、B 和C出错,那就要看哪种占比更大,因为解决占比更大的错误,才能让算法的效能提升更大。
数据增强:使用现有的数据,生成新的数据。(比如给了一张图片,可以把这种图片旋转、放大或改变对比度等方式来生成新的几张图片)
数据合成:从空白开始创造全新的例子,而不是对现有的例子进行修改
四、迁移学习(Transfer learning)
对于一个没有那么多数据的算法应用,迁移学习可以让你用来自不同任务的数据帮助你解决当前任务。