Coursea-吴恩达-machine learning学习笔记(十)【week 6之Advice for Applying Machine Learning】

假设使用正则化线性回归预测房价:

J(θ)=12m[i=1m(hθ(x(i))y(i))2+λj=1nθj2]

当把假设函数用于新的数据集,发现在预测时出现了很大误差。此时,可以执行的下一步措施包括:

  • 获取更多训练样本;
  • 尝试更少特征值;
  • 尝试更多特征值;
  • 尝试增加多项式特征值;
  • 减小λ值;
  • 增大λ值。

机器学习诊断法:通过执行一种测试方法,能够了解某种算法是否有用,通常也能告诉你,想要改进一种算法的效果应该做什么样的尝试。
诊断法需要花费时间,但是一种很有效的方法。

假设拥有一组训练样本,为确保可以评估假设函数,将训练样本分成两部分,70%作为训练集,30%作为测试集,mtest作为测试样本总数:
训练集:(x(1),y(1)),(x(2),y(2)),,(x(m),y(m))
测试集:(xtest(1),ytest(1)),(xtest(2),ytest(2)),,(xtest(mtest),ytest(mtest))

若训练数据存在某种规律,训练集、测试集的选取应采用随机原则。

具体执行步骤:

  1. 利用训练集进行学习,得到参数θ
  2. 计算测试误差:
    对于线性回归
    Jtest(θ)=12mtesti=1mtest(hθ(xtest(i))ytest(i))2

    对于逻辑回归
    Jtest(θ)=1mtesti=1mtest(ytest(i)log(hθ(xtest(i)))+(1ytest(i))log(1hθ(xtest(i))))

    另一种表达方式:0/1误分率:
    err(hΘ(x),y)={1,if (hΘ(x)0.5 and y=0) or (hΘ(x)<0.5 and y=1)0,otherwiseTest Error=1mtesti=1mtesterr(hΘ(x),y)

模型选择问题
在实际应用中,为了更好地评价某个假设函数,通常采用上述方法的升级版:
将一组训练样本分成三部分:训练集、交叉验证集、测试集,典型的分隔比例为(60%:20%:20%)
训练集:(x(1),y(1)),(x(2),y(2)),,(x(m),y(m))
交叉验证集:(xcv(1),ycv(1)),(xcv(2),ycv(2)),,(xcv(mcv),ycv(mcv))
测试集:(xtest(1),ytest(1)),(xtest(2),ytest(2)),,(xtest(mtest),ytest(mtest))

训练误差:Jtrain(θ)=12mi=1m(hθ(x(i))y(i))2
交叉验证误差:Jcv(θ)=12mcvi=1mcv(hθ(xcv(i))ycv(i))2
测试误差:Jtest(θ)=12mtesti=1mtest(hθ(xtest(i))ytest(i))2

若存在以下假设函数:
1. hθ(x)=θ0+θ1x
2. hθ(x)=θ0+θ1x+θ2x2
3. hθ(x)=θ0+θ1x+θ2x2+θ3x3

10. hθ(x)=θ0+θ1x++θ10x10

选择假设函数的具体方法如下:

  1. 用训练集优化各假设函数的参数θ
  2. 用交叉验证集找到误差最小的假设函数;
  3. 用测试集估算步骤2中误差最小的假设函数的泛化误差。

由于欠拟合和过拟合的存在,随着假设函数的多项式最高项的增大,训练误差和交叉验证误差的变化如下图:
Coursea-吴恩达-machine learning学习笔记(十)【week 6之Advice for Applying Machine Learning】
上图中,交叉验证误差曲线的左边对应高偏差,右边对应高方差;
高偏差对应欠拟合:训练误差和交叉验证误差均很大,且训练误差交叉验证误差,原因为多项式最高次项过低;
高方差对应过拟合:训练误差较小,交叉验证误差很大,原因为多项式最高次项过高。

正则化与偏差/方差的关系
假设要对高阶多项式进行拟合: hθ(x)=θ0+θ1x+θ2x2+θ3x3+θ4x4
则:J(θ)=12m[i=1m(hθ(x(i))y(i))2+λj=1nθj2]
关于λ的取值有三种情况:

  1. λ取值很大,则θ00,,θ40,hθ(x)θ0,欠拟合,高偏差;
  2. λ取值很小, λ0,正则化没有起作用,过拟合,高方差;
  3. λ取值适当,拟合度正好。

为选取合适的λ参数,需要进行如下步骤:

  1. 创建一个λ取值列表,如λ{0,0.01,0.02,,10.24}
  2. 创建一个模型集,即不同阶或包含其他的变量的不同假设函数;
  3. 迭代遍历λ,对于每个λ,都遍历所有的假设函数,用测试集得到其θ取值;
  4. 使用步骤3得到的θ带入假设函数,不进行正则化或λ=0,计算交叉验证误差Jcv(θ)
  5. 选择Jcv(θ)最小的λθ对应关系;
  6. 用选择的那对λθ,计算Jtest(θ)看是否有好的泛化效果。

学习曲线
训练误差:Jtrain(θ)=12mi=1m(hθ(x(i))y(i))2
交叉验证误差:Jcv(θ)=12mcvi=1mcv(hθ(xcv(i))ycv(i))2
当学习算法存在高偏差:

  • 训练集规模较小时,Jtrain(θ)较小,而Jcv(θ)较大;
  • 训练集规模较大时,Jtrain(θ)Jcv(θ)趋近,即Jtrain(θ)Jcv(θ),但均较大。

此时,增加训练样本数量对训练算法无帮助。
Coursea-吴恩达-machine learning学习笔记(十)【week 6之Advice for Applying Machine Learning】

当学习算法存在高方差:

  • 训练集规模较小时,Jtrain(θ)较小,而Jcv(θ)较大;
  • 训练集规模较大时,Jtrain(θ)随着样本数增大而增大,Jcv(θ)随着样本数增大而减小,Jtrain(θ)依然小于Jcv(θ),但差距变小。

此时,增加训练样本数量对训练算法有帮助。
Coursea-吴恩达-machine learning学习笔记(十)【week 6之Advice for Applying Machine Learning】

本文最开始提到的修正算法的措施具体作用方向如下:

  • 获取更多训练样本:解决高方差;
  • 尝试更少特征值:解决高方差;
  • 尝试更多特征值:解决高偏差;
  • 尝试增加多项式特征值:解决高偏差;
  • 减小λ值:解决高偏差;
  • 增大λ值:解决高方差。

诊断神经网络:

  • 简单的神经网络趋近于欠拟合,但计算简单;
  • 复杂的神经网络趋近于过拟合,但计算复杂,可以使用正则化(增大λ)解决。