Coursera machine learning week 6(一)

来源:互联网 发布:最火淘宝店铺 编辑:程序博客网 时间:2024/06/05 20:21

机器学习第六周主要讲当在新的测试集上测试假设函数时,发现预测的误差很大时该怎么解决的问题。

主要用机器学习诊断法去提升算法性能,虽然这个过程要花时间,但是会提高效率。首先通过将数据集分为训练集和测试集来评估假设函数,但此时会有一个问题,如果知道模型的泛化能力?因此需要将数据集分为训练集、交叉验证集、测试集,一般来说训练集占60%,交叉验证集产20%,测试集占20%。假设我们有10个多项式回归模型,如下图所示,


训练集用于训练模型参数,交叉验证集用于计算代价函数,从而获取10个模型中性能最优也即代价函数值最小的模型,但是如何评价选出来的模型的泛化能力呢?所以还需要用测试集去评估模型的泛化能力。

在机器学习中,有两个重要概念,一个是bias(偏差),另一个是方差(variance),其中高偏差对应的是欠拟合,高方差对应的是过拟合,以多项式回归为例,误差和多项式最高项的阶数的关系如下图:


当d=1时,此时多项式为一次函数,模型在训练集和交叉验证集的代价函数J的值都很大,说明误差很大,对应的是过拟合,因为参数过少,随着d的值越来越大,多项式的阶数越来越高,函数越来越复杂,模型拟合越来越好,因此代价函数J的值下降,但是如果d的值继续增大,模型会出现过拟合,表现出来就是在训练集的拟合度很好,但是在交叉验证集的拟合度很差,J的值很大,误差很大。

在讲正则化的线性回归中,可以通过控制λ的值来控制模型参数,当λ参数过小时,模型容易出现过拟合,此时可以将λ的值增大,如果λ参数过大,模型容易出现欠拟合,此时可以将λ的值减小。在正则化的多项式回归中,λ的值与误差的关系如下图所示:


当λ的值很小时,此时模型容易出现过拟合,对应的是训练集的代价函数J值很小,误差很小,而交叉验证集的J值很大,误差很大,随着λ的值越来越大,训练集的误差会逐渐上升,这是因为模型会从过拟合逐渐变成欠拟合,而交叉验证集的误差会变小,因为此时过拟合问题已经得到解决,但是随着λ的值再次增大,模型又会出现欠拟合的问题,使得交叉验证集的J值变大。

最后谈一下学习曲线。对于训练集和交叉验证集来说,J的值代表误差的大小,那么训练集的大小与误差的关系如下图所示:


m表示训练集的大小,当m的值很小的时候,表示训练集的数据很少,此时训练集的拟合度很好,因为训练集的数据很少,但是交叉集的误差很大,因为训练集的数据很少,导致得到的模型参数很少,所以交叉验证集的误差很大;随着m的值逐渐增大,训练集的数据越来越多,误差会越来越大,这是肯定的,但是参数也会越来越多,所以交叉验证集的误差会逐渐下降。

假设你的模型处于高偏置状态,那么训练集的大小与误差的关系如下图所示:


如果模型处于高偏置的状态,也就是说模型欠拟合,此时增加训练集的大小,并不能起到很大的作用,因为模型处于欠拟合,只增加训练集大小,模型仍然会处于欠拟合;如果模型处于高方差的状态,也就是说模型处于过拟合,此时增加训练集的大小,可以消除模型过拟合问题,从而使交叉验证集的误差下降,但是如果继续增大,那么就变成欠拟合问题了。训练集的误差会一直增大,因为训练集的大小在增大。

从上面的描述可以得出,当调试一个学习算法时,当你在新的数据集上测试模型假设函数时,发现预测结果有很大误差,怎么办呢?

1、如果是高偏差,也即欠拟合问题,可以尝试增加一些输入特征,或者给多项式回归增加一些特征(如平方项、乘积项),也可以将正则化项的λ值减小;

2、如果是高方差,也即过拟合问题,可以尝试较少一些输入特征、或者增加训练集的大小,也可以将正则化项的λ值增大。