机器学习基石HOW部分(3)

机器学习基石HOW部分(3)


标签:机器学习基石

第十一章

binary classification via (logistic) regression; multiclass via OVA/OVO decomposition

所有的回归算法,经过一些修改,就可以用来做分类。但是分类算法无论怎么改都不能做回归。

前面的章节介绍了三种线性模型,PLA、Linear Regression与Logistic Regression。之所以称他们是线性模型,是因为这三种分类模型的方程中,都含有一个相同的部分,该部分是各个特征的一个线性组合,也可以称这个部分叫做线性评分方程:

s=wTx

三种模型

  • Linear Classification模型:取s的符号作为结果输出,使用0/1 error作为误差衡量方式,但它的cost function,也就是 Ein(w) 是一个离散的方程,并且该方程的最优化是一个NP-hard问题(简单说就是非常难解的问题)。
  • Linear Regression模型:直接输出评分方程,使用平方误差square error作为误差衡量方式,好处是其 Ein(w) 是一个凸二次曲线,非常方便求最优解(可通过矩阵运算一次得到结果)。
  • Logistic Regression模型:输出的是评分方程经过sigmoid的结果,使用cross-entropy作为误差衡量方式,其 Ein(w) 是一个凸函数,可以使用gradient descent的方式求最佳解。

Linear Regression和Logistic Regression的输出是一个实数,而不是一个Binary的值,他们能用来解分类问题吗?
当然可以,就像在最前面说的那样,回归模型可以用来做分类。只要定一个阈值,高于阈值的输出+1,低于阈值的输出-1就好。既然Linear Regression和Logistic Regression都可以用来解分类问题,并且在最优化上,他们都比Linear Classification简单许多,我们能否使用这两个模型取代Linear Classification呢?

好,下面看看可不可以代替。

拿Linear Regression或Logistic Regression来替代Linear Classification

三个模型的区别在于误差的衡量,误差的衡量可以说是一个模型最重要的部分。不同的误差衡量可能会产生不同的g。

看看三种模型的误差衡量吧。
误差衡量

我们可以看到到三个模型的error function都有一个ys的部分,也叫做分类正确性分数 (classification correctness score)。其中s是模型对某个样本给出的分数,y是该样本的真实值。

既然叫做分类正确性分数,那就是正确性越高分数越高啦。
于是,我们将不择手段把分数提高。
当y=+1时,我们希望s越大越好,当y=−1时,我们希望s越小越好。
既然这三个error function都与ys有关,我们可以以ys为横坐标,err为纵坐标,把这三个函数画出来。

ys

sqr (squre error)为Linear Regression的误差函数,ce (cross entropy)为Logistic Regression的误差函数。

errsqr 在ys较小的时候很大,但是,在ys较大的时候 errsqr 同样很大,这点不是很理想,因为我们希望ys大的时候cost要小,尽管如此,至少在 errsqr 小的时候, err0/1 也很小,因此可以拿来做error function。

errce 则是一个单调递减的函数,形态有点点像 err0/1 ,但来的比较平缓。注意到 errce 有一部分是小于 err0/1 的,我们希望 errce 能成为 err0/1 的一个upper bound,只要将 errce 做一个换底的动作,即:

scaledce:errsce(s,y)=log2(1+exp(ys))

scale

现在稍稍回忆一下我们的问题是什么:
  能不能拿Linear Regression或Logistic Regression来替代Linear Classification?
  为什么会想做这样的替代?Linear Classification,在分类这件事上,它做的很好,但在最优化这件事上,由于是NP-hard问题,不大好做,而Linear Regression与Logistic Regression在最优化上比较容易。因此,如果他们在分类能力上的表现能够接近Linear Classification,用他们来替代Linear Classification来处理分类的问题,就是件皆大欢喜的事。这时候就可以想想刚刚为何要把 errse scale 成 err0/1 的upper bound,目的就是为了让这几个模型的观点在某个方向上是一致的,即:
   errsqr/errsce 低的时候, err0/1 也低

  通俗一点讲:
  如果使用 errsqr/errsce 来衡量一个模型分类分得好不好的时候,如果他们认为分得好,那么如果使用 err0/1 ,它也会认为分得好。

很容易通过比较三个error function 来得到分类的0/1 error 的上界
上界

对比下在处理分类问题时,使用PLALinear Regression以及Logistic Regression的优缺点。
  PLA:
优点:数据是线性可分时, E0/1in 保证可以降到最低
缺点:数据不是线性可分时,要额外使用pocket技巧,较难做最优化
  Linear Regression:
优点:在这三个模型中最容易做最优化
缺点:在ys很大或很小时,这个bound是很宽松的,意思就是没有办法保证 E0/1in 能够很小
  Logistic Regression:
优点:较容易最优化
缺点:当ys是很小的负数时,bound很宽松

所以我们常常可以使用Linear Regresion跑出的w作为(PLA/Pocket/Logistic Regression)的 w0 ,然后再使用 w0 来跑其他模型,这样可以加快其他模型的最优化速度。同时,由于拿到的数据常常是线性不可分的,我们常常会去使用Logistic Regression而不是PLA+pocket。

随机梯度下降 (Stochastic Gradient Descent)

PLA与Logistic Regression都是通过迭代的方式来实现最优化的。
For t = 0, 1, …
wt+1wt+ηv
  when stop, return last w as g
区别在于,PLA每次迭代只需要针对一个点进行错误修正,而Logistic Regression每一次迭代都需要计算每一个点对于梯度的贡献,再把他们平均起来:
logistic

所以PLA每次迭代复杂度是O(1),而logistic regression是O(N)。

logistic regression每次更新都需要遍历所有data,当数据量太大或者一次无法获取全部数据时,这种方法并不可行。

我们希望用更高效的方法解决这个问题,基本思路是:只通过一个随机选取的数据( xn,yn ) 来获取“梯度”,以此对w 进行更新。这种优化方法叫做随机梯度下降。
随机梯度:

werr(w,xn,yn)

真实梯度:
wEin(w)=ϵrandomnwerr(w,xn,yn)

随机梯度当成是在真实梯度上增加一个均值为0的noise:
stochastic gradient=true gradient+zero-mean ‘noise’ directions

虽然和true gradient存在一定的误差,但是可以认为在足够多的迭代次数之后,也能达到差不多好的结果。我们把这种方法成为随机梯度下降,Stochastic Gradient Descent (SGD):

wt+1wt+ηθ(ynwTtxn)(ynxn)

这种方法在统计上的意义是:进行足够多的更新后,平均的随机梯度与平均的真实梯度近似相等。
注意:在这种优化方法中,一般设定一个足够大的迭代次数,算法执行这么多的次数时我们就认为已经收敛。(防止不收敛的情况)

多类别分类 (multiclass classification)

简单说,就是与二值分类不同的是,我们的target 有多个类别(>2)。
我们前面学了二值分类,既然这个也是分类,可不可以把二值分类的方法套进来了。
利用二元分类器来解决多类别分类问题主要有两种策略,OVA(One vs. ALL)和OVO(One vs. One)。

One-Versus-All (OVA):一种直观的解决方法是将其转化为多轮的二值分类问题:任意选择一个类作为+1,其他类都看做-1,在此条件下对原数据进行训练,得到w;经过多轮训练之后,得到多个w。对于某个x,将其分到可能性最大的那个类。(例如逻辑斯蒂回归对于x 属于某个类会有一个概率估计)
如果target是k个类标签,我们需要k轮训练,得到k个w。

ova

从图中我们可以看到,中间的那个,本来应该被分到五角星组的数据没有被分到任何一组,也就是说它被漏掉了。这真是一种不好的情况。
当然,还有一种不好的情况,就是一个数据被分到了很多个类里。

所以要怎么解决这样的情况呢?很简单,只要让各个分类器都输出是否为自己类别的概率值,即可,然后选择概率值最高的那个分类器所对应的类别,作为最终的输出。

在类别较多的时候,如果使用OVA方法,则又会遇到数据不平衡(unbalance)的问题,你拿一个类别作为圈圈,其他所有类别作为叉叉,那么圈圈的比例就会非常小,而叉叉的比例非常高。为了解决这个不平衡的问题,我们可以利用另外一个策略,OVO,即每次只拿两个类别的数据出来建建立分类器,如下图。
OVO

One-Versus-One(OVO),对比上面的OVA 方法。
基本方法:每轮训练时,任取两个类别,一个作为+1,另一个作为-1,其他类别的数据不考虑,这样,同样用二值分类的方法进行训练;目标类有k个时,需要 k*(k-1)/2 轮训练,得到 k*(k-1)/2 个分类器。
预测:对于某个x,用训练得到的 k*(k-1)/2 个分类器分别对其进行预测,哪个类别被预测的次数最多,就把它作为最终结果。即通过“循环赛”的方式来决定哪个“类”是冠军。
这种方法的优点是每轮训练面对更少、更平衡的数据,而且可以用任意二值分类方法进行训练;缺点是需要的轮数太多(k*(k-1)/2),占用更多的存储空间,而且预测也更慢。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值