吴恩达机器学习笔记之应用机器学习的建议
决定下一步做什么:
我们在设计或者改进一个机器学习系统时应该怎么做。
采用“机器学习诊断法”,这是一种测试方法,你通过执行这种测试可以深入了解某种算法到底有没有用,测试算法的实现是需要时间的,但是这样的时间是花的值得的,可以让你快速知道怎么改进自己的算法。
评估一个假设:
我们都知道在拟合数据的时候,代价函数越小不一定代表模型越好,因为会存在过拟合的现象,为了检查是否发生了过拟合,我们可以绘制拟合的图来观察,但是对于高维特征,我们就不能这样做了。
一种做法是我们将原始的数据分成两类,一类叫做训练集,一类叫做测试集;两者的比例大约为7:3,再将数据进行分组之前,要打乱数据的顺序,做到随机选取数据。
在用训练集的数据来训练好我们的模型参数后,用测试集的数据来看看我们模型的误差为多大,在线性回归任务中,可以用代价函数来表示这个误差,在逻辑回归的任务中,即可以用代价函数来表示:
也可以用预测错误的的误差来表示:
模型选择和交叉验证集:
我们已经知道,代价函数越小并不代表该模型越好,为了选择一个具有更强泛化能力的模型,我们可以进一步将数据分为:60%的数据作为训练集,20%的数据作为交叉验证集,20%的数据作为测试集。
在面临模型选择的问题的时候,比如拟合数据的时候选择多项式最高系数,我们可以先用训练数据对一系列的模型进行训练,训练好了之后用验证数据进行验证,选择此时误差最小的那个模型,然后在用测试数据进行测试,就可以得到该模型的泛化误差。
诊断偏差与方差:
在我们训练好一个模型之后,模型实际的预测结果可能并不让我们满意,因此我们需要检查是否是由于高偏差或者高方差所引起的,随着训练程度的加深,我们的训练误差会一直降低,但是过了某个临界点可能会造成过拟合的问题,而我们的验证误差,随着训练程度的加深,会先降低后升高。(如下图所示:)
如果你的训练误差和验证误差都很大的话,那么你的模型很可能出现了偏差过大的问题,(对应的欠拟合的问题)
相反的,如果你的训练误差很小,但是验证误差却很大的话,你的模型很可能出现了高方差的问题。(对应过拟合的问题)
正则化和偏差/方差:
正则化和偏差以及方差之间的关系:
我们在选择正则化参数lambda的时候,也是先将数据分为训练数据、验证数据和测试数据,我们在用训练数据进行训练的时候,更新代价函数的时候要加上正则项,但是用验证数据进行选择lambda的时候,代价函数还是原先的误差平方和函数,即不包括正则项,在进行了一系列的lambda的取值之后,采用验证数据进行选择最优的lambda,在用测试数据计算该模型的泛化误差。由于随机选择数据的原因,交叉验证集的误差可能会小于训练集的误差。
学习曲线:
学习曲线对于诊断我们的算法是否存在高偏差或者高方差非常有用,具体的我们通过画出误差与样本数量的对比图进行分析:我们关心的是交叉验证集的误差
在高偏差的情况下:验证数据的误差和训练数据的误差在样本数量到达一定的程度后会差不多相等。
在高方差的情况下:验证数据的误差和训练数据的误差之间有很大的差距。
当你的学习算法有高偏差时,增加样本的数量并不能解决这个问题;但当你的算法存在高方差的时候,增加样本数量是可以解决问题的。
决定接下来做什么:
当我们发现我们训练的模型的效果差强人意的时候,我们应该怎么做呢?
1.收集更多的样本数据——解决高方差问题、
2.减少特征值的数量——解决高方差问题
3.增加特征值的数量——解决高偏差问题
4.增加额外的多项式特征——解决高偏差问题
5.减小lambda——解决高偏差问题
6.增加lambda——解决高方差问题