我们在调试一个学习算法时,通常会用学习曲线(Learning Curves)观察机器学习算法是否为欠拟合或过拟合。
随着样本数的不断增大,我们发现在高偏差(欠拟合)时交叉验证集代价函数 J_cv(θ) 和测试集代价函数 J_test (θ) 的图像如下,这个图像也叫做学习曲线(Learning Curves):
在高偏差时,随着样本数目的增加,测试集的偏差与交叉验证集的偏差几乎相等,测试集的偏差在上升到一定程度后就不会继续上升;根据交叉验证集来看,多项式的泛化程度随着数据集的增加减小到一定程度后就不再减小。这代表着,在高偏差(欠拟合)的情况下,增大数据集并不会优化你的算法。所以,在高偏差的情况下,你不需要把时间浪费在收集大量数据上。
再来看,在高方差的情况:
在高方差下,随着样本数目的增加,交叉验证集的偏差一直与测试集的偏差有很大的差距,测试集的偏差在不断地上升;根据交叉验证集来看,多项式的泛化程度随着数据集的增加而不断地减小。这代表着,在高方差(过拟合)的情况下,增大数据集在一定程度上会优化你的算法。
因此,你了解当前算法处于高偏差或高方差对于你决定是否把大量的时间花费在寻找数据集很有必要,这会为你节省大量的时间,把时间用在刀刃上吧!
回到一开始的问题,在机器学习中,我们训练了一个模型,可能会发现这个模型得到的数据与实际数据偏差太大,也就是这个模型表现的不好。这时,我们需要想一些方法来优化我们的算法。
下面这些方法,就是在遇到高方差或高偏差时,我们所需要做的事情。
-
得到更多的训练集:适用于高方差。
-
减小特征的数目:适用于高方差。
-
尝试去增加特征:适用于高偏差。
-
增加多项式:适用于高偏差。
-
增大 λ:适用于高方差。
-
减小 λ:适用于高偏差。
ps. 本篇文章是根据吴恩达机器学习课程整理的学习笔记。如果想要一起学习机器学习,可以关注微信公众号「SuperFeng」,期待与你的相遇。