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

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

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

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

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

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

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

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

具体执行步骤:

  1. 利用训练集进行学习,得到参数 θ θ
  2. 计算测试误差:
    对于线性回归
    Jtest(θ)=12mtesti=1mtest(hθ(x(i)test)y(i)test)2 J t e s t ( θ ) = 1 2 m t e s t ∑ i = 1 m t e s t ( h θ ( x t e s t ( i ) ) − y t e s t ( i ) ) 2

    对于逻辑回归
    Jtest(θ)=1mtesti=1mtest(y(i)testlog(hθ(x(i)test))+(1y(i)test)log(1hθ(x(i)test))) J t e s t ( θ ) = − 1 m t e s t ∑ i = 1 m t e s t ( y t e s t ( i ) l o g ( h θ ( x t e s t ( i ) ) ) + ( 1 − y t e s t ( i ) ) l o g ( 1 − h θ ( x t e s t ( i ) ) ) )

    另一种表达方式: 0/1 0 / 1 误分率:
    err(hΘ(x),y)={1,0,if (hΘ(x)0.5 and y=0) or (hΘ(x)<0.5 and y=1)otherwiseTest Error=1mtesti=1mtesterr(hΘ(x),y) e r r ( h Θ ( x ) , y ) = { 1 , i f   ( h Θ ( x ) ⩾ 0.5   a n d   y = 0 )   o r   ( h Θ ( x ) < 0.5   a n d   y = 1 ) 0 , o t h e r w i s e T e s t   E r r o r = 1 m t e s t ∑ i = 1 m t e s t e r r ( h Θ ( x ) , y )

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

训练误差: Jtrain(θ)=12mi=1m(hθ(x(i))y(i))2 J t r a i n ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2
交叉验证误差: Jcv(θ)=12mcvi=1mcv(hθ(x(i)cv)y(i)cv)2 J c v ( θ ) = 1 2 m c v ∑ i = 1 m c v ( h θ ( x c v ( i ) ) − y c v ( i ) ) 2
测试误差: Jtest(θ)=12mtesti=1mtest(hθ(x(i)test)y(i)test)2 J t e s t ( θ ) = 1 2 m t e s t ∑ i = 1 m t e s t ( h θ ( x t e s t ( i ) ) − y t e s t ( i ) ) 2

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

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

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

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

由于欠拟合和过拟合的存在,随着假设函数的多项式最高项的增大,训练误差和交叉验证误差的变化如下图:
这里写图片描述
上图中,交叉验证误差曲线的左边对应高偏差,右边对应高方差;
高偏差对应欠拟合:训练误差和交叉验证误差均很大,且训练误差 交叉验证误差,原因为多项式最高次项过低;
高方差对应过拟合:训练误差较小,交叉验证误差很大,原因为多项式最高次项过高。

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

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

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

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

学习曲线
训练误差: Jtrain(θ)=12mi=1m(hθ(x(i))y(i))2 J t r a i n ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2
交叉验证误差: Jcv(θ)=12mcvi=1mcv(hθ(x(i)cv)y(i)cv)2 J c v ( θ ) = 1 2 m c v ∑ i = 1 m c v ( h θ ( x c v ( i ) ) − y c v ( i ) ) 2
当学习算法存在高偏差:

  • 训练集规模较小时, Jtrain(θ) J t r a i n ( θ ) 较小,而 Jcv(θ) J c v ( θ ) 较大;
  • 训练集规模较大时, Jtrain(θ) J t r a i n ( θ ) Jcv(θ) J c v ( θ ) 趋近,即 Jtrain(θ)Jcv(θ) J t r a i n ( θ ) ≈ J c v ( θ ) ,但均较大。

此时,增加训练样本数量对训练算法无帮助。
这里写图片描述

当学习算法存在高方差:

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

此时,增加训练样本数量对训练算法有帮助。
这里写图片描述

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

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

诊断神经网络:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值