吴恩达机器学习:方差与偏差

在前几周的课程里,我们已经学习了 监督学习 中的 线性回归逻辑回归神经网络( 点击进入笔记 )。回顾课程作业,所有的样本数据都被用来训练模型。验证模型时,也只是将模型的数据结果与正确结果作对比来看正确率。 这样的训练方法是否正确?正确率是否能作为评价模型的标准?这周就将学习如何评价我们的模型,以及如何采取正确有效的改进策略。

点击 课程视频 你就能不间断地学习 Ng 的课程,关于课程作业的 Python 代码已经放到了 Github 上,点击 课程代码 就能去 Github 查看,代码中的错误和改进欢迎大家指出。

以下是 Ng 机器学习课程第五周的笔记。

改进策略

对于 预测函数,我们通常会使用以下几种手段来改进:

  1. 采集更多的样本数据
  2. 减少特征数量,去除非主要的特征
  3. 引入更多的相关特征
  4. 采用多项式特征
  5. 减小正则化参数 λ \lambda λ
  6. 增加正则化参数 λ \lambda λ

Andrew Ng 告诉大家,他见过很多开发者盲目地使用改进策略,为此耗费了大量的时间和精力,却没什么效果。所以我们需要一些依据来帮助我们选择合适的策略。

数据集划分

为了评价模型,我们通常将数据集分为三个部分, 60 % 60\% 60%训练集 20 % 20\% 20%交叉验证集 20 % 20\% 20%测试集,并使用 误差 作为模型使用在这些集合上的评价,误差 的形式与之前的 代价函数 相同( 线性回归误差函数如下 )。

J s ( θ ) = 1 2 m s ∑ i = 1 m s ( h θ ( x s ( i ) ) − y s ( i ) ) 2      ( s = t r a i n , c v , t e s t ) J_s(\theta)=\frac{1}{2m_s}\sum\limits_{i=1}^{m_s}(h_\theta(x_s^{(i)})-y_s^{(i)})^2 \ \ \ \ (s=train,cv,test) Js(θ)=2ms1i=1ms(hθ(xs(i))ys(i))2    (s=train,cv,test)

在被划分的集合中,我们使用 训练集 来训练参数 θ \theta θ,使用 交叉验证集 来选择模型( 比如该使用多少次的多项式特征 ),使用 测试集 来评估模型的预测能力。

方差与偏差

当我们的模型表现不佳时,通常是出现两种问题,一种是 高偏差 问题,另一种是 高方差 问题。识别它们有助于选择正确的优化方式,所以我们先来看下 偏差方差 的意义。

  • 偏差: 描述模型输出结果的期望与样本真实结果的差距。
  • 方差: 描述模型对于给定值的输出稳定性。
    这里写图片描述
    就像打靶一样,偏差描述了我们的射击总体是否偏离了我们的目标,而方差描述了射击准不准。接下来让我们通过各种情况下 训练集交叉验证集误差 曲线来直观地理解 高偏差 与 高方差 的意义。

对于 多项式回归,当次数选取较低时,我们的 训练集误差 和 交叉验证集误差 都会很大;当次数选择刚好时,训练集误差 和 交叉验证集误差 都很小;当次数过大时会产生过拟合,虽然 训练集误差 很小,但 交叉验证集误差 会很大( 关系图如下 )。
这里写图片描述
所以我们可以计算 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ) J c v ( θ ) J_{cv}(\theta) Jcv(θ),如果他们同时很大的话,就是遇到了高偏差问题,而 J c v ( θ ) J_{cv}(\theta) Jcv(θ) J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ) 大很多的话,则是遇到了高方差问题。

对于 正则化 参数,使用同样的分析方法,当参数比较小时容易产生过拟合现象,也就是高方差问题。而参数比较大时容易产生欠拟合现象,也就是高偏差问题。
这里写图片描述

学习曲线

无论你是要检查你的学习算法是否正常工作或是要改进算法的表现,学习曲线 都是一个十分直观有效的工具。学习曲线 的横轴是样本数,纵轴为 训练集交叉验证集误差。所以在一开始,由于样本数很少, J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ) 几乎没有,而 J c v ( θ ) J_{cv}(\theta) Jcv(θ) 则非常大。随着样本数的增加, J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ) 不断增大,而 J c v ( θ ) J_{cv}(\theta) Jcv(θ) 因为训练数据增加而拟合得更好因此下降。所以 学习曲线 看上去如下图:
这里写图片描述
在高偏差的情形下, J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ) J c v ( θ ) J_{cv}(\theta) Jcv(θ) 已经十分接近,但是 误差 很大。这时候一味地增加样本数并不能给算法的性能带来提升。
这里写图片描述
在高方差的情形下, J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)误差 较小, J c v ( θ ) J_{cv}(\theta) Jcv(θ) 比较大,这时搜集更多的样本很可能带来帮助。
这里写图片描述

总结

有了以上的分析手段,就能够得出在何种场景下使用我们的改进策略:

  1. [高方差] 采集更多的样本数据
  2. [高方差] 减少特征数量,去除非主要的特征
  3. [高偏差] 引入更多的相关特征
  4. [高偏差] 采用多项式特征
  5. [高偏差] 减小正则化参数 λ \lambda λ
  6. [高方差] 增加正则化参数 λ \lambda λ

So~,第五周的内容就是这些了,谢谢大家耐心阅读。

  • 21
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值