Coursera ML笔记 -----week6 Advice for Applying Machine Learning

欢迎点击作者原文地址

改进自己的机器学习算法系统

当我们初步求出了一个机器学习算法以后,我们希望这个算法的预测或者分类能力是很好的,能够对我们的每一个新的数据做出合理的判断。但是我们实际发现这个算法的错误率其实很高,这个时候我们应该怎么去做,怎么做能够更省力更有效更具有针对性? 这就是week6 要解决的问题。

我们很容易就想到的方法有这些:
1.增加训练数据
2.减少特征
3.增加特征
4.增加多项式特征
5.减小 λ
6.增加 λ

但是这些方法到底有没有用,或者说,在什么情况下有用,这就是值得去探讨的问题

那我们需要做的其实是三件事情:

1. 评估一个学习出来的算法
2. 判断一个表现不太好的学习算法是出了什么问题?high bias(欠拟合)还是high variance(过拟合)的问题

2.1 model selection

  • 2.1.1 degree of polynomial
  • 2.1.2 bias vs variance
  • 2.1.3 regularize parameter

2.2 learning curve
3. 如何更有效更有针对性地怎么去改善学习算法


1. 怎么样去评估一个已有的算法——>划分数据集

要去评价评估学习到的算法时,很重要的一部分就是要有能够检验的数据,以估计算法的泛化能力。在实际训练中,如果把所有的数据全部都当作是训练数据,固然可以得到拟合效果比较好的学习算法,但是我们并不知道这个算法对新的数据的估计情况。在现有的条件下,我们不妨将现有的数据分成两部分,一部分用来训练(70%),一部分用来验证(30%)。通过训练数据来训练参数向量,通过验证数据来评价学习到的算法。于是,我们就有一般过程如下:
a. 训练 θs.t.minJ(θ)
b. 计算测试集误差 Jtest(θ) ,来估计学习算法的泛化能力

在不同的情形下, Jtest(θ) 会有不同的形式,但是总体来讲,还是会保持一致性

线性回归:

Jtest(θ)=12mi=1mtest(hθ(x(i)test)y(i)test)2

逻辑回归:
Jtest(θ)=1mi=1mtesty(i)testloghθ(x(i)test)+(1y(i)test)log(1hθ(x(i)test))


2. 判断欠拟合还是过拟合

做完评估以后,我们接着就可以通过“Learning Curve”的判断方式来判断我们的算法究竟是high bias 还是high cvariance 或者两者皆有的问题。其中,high bais就是欠拟合,high variance就是过拟合。

但是我们在考虑learning curve以前,我们需要先做一个工作,model selection。model selection的目的主要是有个:1.引入交叉验证集的概念。2.解释清楚high bias和 high variance这两个概念 3.阐述清楚如何去选择一个更合适的模型,也就是如何确定更合适的参数d,λ,即搞清楚d,λ和bias,variance之间的关系。

理清一下:我们接下来讲清楚两个内容:1.model selection 2.learning curve

2.1 我们解决模型选择的问题。

模型选择主要设计到两个过程和三个参数:1. 多项式次数d 2. 正则化系数λ 3. 特征Θ

2.1.1 这里引入cross validation set并且解释清楚第一个过程:如何选择d

做模型选择的时候,我们首先要做的事情是确定degree of polynomial。增加一个新的参数 d 来表示每一个hypothesis的degree。我们假设有k个不同的假设,每一个k对应了h(x)的最高次方数。这个时候我们要做的事情就是要确定这个最合适的 d 。于是参考前面的做法,我们在训练集上将k个假设的参数向量Θ都算出来,然后再计算每个假设的 Jtest(Θ) ,选最小者的那个假设。于是我们就把 d 确定了下来。但这又给我们带来了新的问题,我们已经把所有的数据都用掉了,但是这个时候我们只确定了degree,并没有考虑到我们选出来的这个假设对新样本的适应能力(generalization),或者这样来理解:我们的每一个未知参数都需要一部分数据来做训练和测试。到目前为止,我们有了两个参数,分别是Θ d 。又考虑到数据的有限性 + degree和generalization的验证之间的无关性(猜测),所以直接就把训练集作为公共的训练集,然后分别验证两个参数。于是我们就有了6:2:2的训练集:交叉验证集:测试集。
一般步骤如下:
a. k个d训练Θ(k)
b. 在验证集上确定 d ,也就是考虑满足minJcv(Θ) d
c. 在测试集上估计泛化的能力,也就是Jtest(Θ(d))
以上是关于d的选择思想。我们输入不同的d,最后得到一个d

2.1.2 接下来我们来解释清楚high bias和high variance这两个概念

我们的test error 是由bias² 和variance组成
bias是回归值的期望与实际值之间的差距
variance是回归曲线的波动程度
具体的数学过程这里不多叙述。

这里重点其实是在于我们怎么去区分这两类不同的情况:
区分bias和variance其实是要从 Jtrain 着手的,因为high bias代表着underfit,high variance代表着overfit 这两个不同状态下 Jcv 或者 Jtest 都是很高的,而在underfit的时候 Jtrain 高,overfit的时候 Jtrain
这里写图片描述

2.1.3 最后我们来考虑第二个过程:λ的选择

λ的选择,也是通过类似选择d的方式来进行。
a. 选择k个λ,然后分别计算使得 min Jλ(θ) θ(k)
b. 代入 Jcv(θ) ,取 min Jcv(θ) 所对应的那个λ,作为我们选定的λ
c. 代入计算 Jtest(θ)

d vs λ
目的都要求一个合适的参数
输入都是要进行比较的多个参数(不妨设k)
过程1训练k个使得 min J(θ) 的θ求λ时,θ的训练要用带有正则化项(惩罚项)的 Jλ(θ) ,而求d时,训练θ不用带惩罚项
中间输出 θ(k)
过程2 min Jcv(θ)
最终输出要求的参数d或者λ,并且记录对应的θ,便于计算 Jtest(θ)


最后我们总结一下d,λ和high bias,high variance以及error之间的关系。

  • 在欠拟合的情况下,degree小,λ大 这个时候 JtrainJcv ,并且都很大

  • 在过拟合的情况下,degree大,λ小,这个时候 JcvJtrain

用图表来概括d和λ是怎么引发high bias和high variance的问题的

high biashigh variance
d太小太大
λ太大太小

2.2 接下来我们又要回到learning curve的内容

首先是理想状态下的learning curve
理想状态下的learing curve,x轴是m(训练集的数量),y轴是error。我们在坐标平面内表示不带λ的 Jtrain Jcv ,于是,我们可以看到,m↑时, Jtrain ↑, Jcv ↓,并逐渐趋于平缓,两曲线之间有一个距离不算大的gap

接下来是high bais情况下的learning curve
很明显,两条曲线的升降趋势没有太大变化,但是升降的幅度(也就是收敛的速度)快了很多,两者之间的gap极小,几乎贴近(因为数量多了以后,在训练集和验证集上的表现不会有太大的差别)。另外一个值得注意的地方是,两条曲线的收敛值都比之前要大,也就意味着large error

从而,我们知道,在high bias的情况之下,增加训练集数量并没有太多帮助

最后是high variance情况下的learning curve
同样地,曲线的升降趋势没有太大变化,只是收敛的速度b似乎变慢了,比理想状态下还要慢,在同样的m情况下,gap变大了很多。但是有意思的是,随着m的增大,两条曲线最终还是会逐渐靠拢。

于是,我们就知道了,增加训练集数量可能对high variance的情况助益更大


3. 有针对性地改善现有算法

我们前面已经总结了欠拟合和过拟合状态下d和λ的状态,如果我们想要改善所出现的问题,我们就可以从d,λ和m上下手

所处状态high biashigh variance
d太小太大
λ太大太小

如何解决high biashigh variance
d增大d减小d
λ减小λ增大λ
m无能无力增加m


把上面的表格表达成更易理解的语言,就可以回到我们一开始的问题

1.增加训练数据 ———-> 解决过拟合 m↑
2.减少特征 ———-> 解决过拟合 d↓
3.增加特征 ———-> 解决欠拟合 d ↑
4.增加多项式特征 ———-> 解决欠拟合 d ↑
5.减小 λ ———-> 解决欠拟合 λ↓
6.增加 λ ———-> 解决过拟合 λ↑

至此,我们就解决了我们一开始提出的三个问题。

ps:文中所有图的来源是Ng的课程视频截图和讲义截图

======================================
其他的一些想法

我们做这些的目的就是减少error

这里有两个问题,一个是为什么只用了traing set 和cross validation set?另外一个是究竟怎么去判断大和小的问题

  1. 验证集和测试集的本质都是用来做测试的数据,只是用途不一样,一个用来测试degree 另外一个用来测试θ

  2. d,λ,m到底是大还是小我们其实不用知道,因为我们使用的这三个参数其实是一个相对的大小。我们只要去比较 Jtrain Jcv 的大小,然后根据我们判断出来的情况,决定是在现有的参数基础上往增加的方向还是减小的方向即可。

3.彩蛋。作者本人可见

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值