您的位置:首页 > 其它

机器学习笔记-利用线性模型进行分类

2017-08-16 14:10 681 查看

利用线性模型进行二分类

线性模型

这一部分主要是为了证明为什么可以使用线性回归和逻辑斯蒂回归来做二元分类问题。

我们想要将已知的线性模型应用到二分类甚至是多分类的问题。我们已知的线性模型有如下的三种,它们有一个共同的地方是都会利用输入的特征计算一个加权和 s=wTx。



线性分类linear classification不好解, 因为想要最小化E0/1(w)(被分错的点的个数)被证明是一个NP难问题。但相比之下,线性回归和逻辑斯蒂回归很方便就可以最小化Ein:线性回归使用平方误差square error时有解析解(closed-form solution);逻辑斯蒂回归由于目标函数是凸函数所以可以使用梯度下降法来求解。所以我们想要做的是:因为linear classification不好做,而看起来linear regression或者是logistic regression在最小化Ein这件事情上还是比较简单的。所以我们想要使用线性回归或者是逻辑斯蒂回归作为线性分类的一个替代工具。也就是现在将所有的方法都用在分类问题上,这样的话输出都会被限制在集合{+1,−1}里面。

error function(损失函数)

首先将三种error function进行整理, 得到从s到error的计算函数, 其中s=wTx。

线性分类

h(x)err(h,x,y)err0/1(s,y)=sign(s)=|[h(x)≠y]|↓=|[sign(s)≠y]|=|[sign(ys)≠1]|

线性回归

h(x)err(h,x,y)errSQR(s,y)=s=(h(x)−y)2↓=(s−y)2=(s−y)2y2=(sy−y2)2=(sy−1)2

逻辑斯蒂回归

h(x)err(h,x,y)errCE(s,y)=11+exp(−wTx)=θ(wTx)=θ(s)=−lnh(yx)↓=ln(1+exp(−ys))

通过上面的这些操作,每一个模型的error的计算方法中都出现了ys,我们接下来要做的就是看看这些error和ys的关系。为什么要关注ys这个量呢?我们简单的看看ys的物理意义:对于分类(linear classification)来说,我们希望ys越大越好, 首先如果该值是正的, 说明起码分类正确了, 如果这个值还很大,那么说明置信度很高。

可视化一下我们得到了三个Error Funciton:横轴是ys的值,纵轴是err的值。

0/1: err0/1(s,y)=|[sign(sy≠1)]|

sqr: errsqr(s,y)=(ys−1)2

ce: errce(s,y)=ln(1+exp(−ys))

三个error function



根据在x = 1左右的0/1 error图像和square error的图像的比较可以得到:如果有一个样本在square error上的值很低的话,那么这个样本在0/1 error上也会得到比较低的值。但是如果样本在square error上的值比较大, 很左边或者是很右边, 那么我们是没有办法判别这个样本的0/1 error是小(0)还是大(1)的。

根据0/1 error的图像和corss entropy error的图像(logistics regression的error function的图像)我们可以得到:当corss entropy error小的时候,0/1 error也是很小的;0/1 error比较小的时候,corss entropy error也是很小的。

将corss entropy error换底之后得到下面的scaked ce: errsce(s,y)=log2(1+exp(−sy)),这样一来,corss entropy error就一定会是0/1 error的上界。我们得到的新的图像如下:



接下来开始利用以上提到的error function来说明为什么linear regression 或者是logistics regression可以是一个好的二分类的方法。

如果想做要计算分类的错误的话,它的上限如下:

err0/1(y,s)≤errsce(s,y)=1ln2errce(s,y)

那么我们就可以得到:(err是E的平均)

E0/1in(w)≤ESCEin(w)=1ln2ECEin(w)

同样也可以得到:

E0/1out(w)≤ESCEout(w)=1ln2ECEout(w)

根据VC维的理论我们可以得到:

E0/1out≤E0/1in+Ω≤ESCEin(w)+Ω

所以如果我们能够把逻辑斯蒂回归中的cross entropy error做到最小的话,从某种角度上来说也就是把0/1 error做到了最小。或者说把square error最小化也是在间接的最小化0/1 error, 只不过从图中可以看得出来,square error是0/1error的一个更为宽松的上界,这就表示也可以把linear regression用在linear classification上。我们称之为regression for classification。

Regression for Classification

run logisitic/linear regression on D with yn∈{+1,−1} to get wreg

return g(x)=sign(wTregx)

小结

如果我们有一个二分类的问题,linear regression计算非常的方便,但是太为宽松(从图中可以得到),所以我们通常是使用linear regression的结果作为PLA/pocket/logistic regression的初始的w0值。

linear regression sometimes used to set w0 for PLA/pocket/logistic regression

对于二分类这个其实比较困难的问题,在每一轮中logistic regression和pocket的时间复杂度其实是差不多的,所以我们通常选用logistic regression而不使用pocket来做binary classification, 由于它比较好的optimization性质

Stochastic Gradient Descent(随机梯度下降算法)

PLA算法和gradient descent算法都可以看成是iterative optimization(一步一步的接近最佳的wOPT)。不同的是:PLA算法每一次只看一个数据点来更新来w(如果这个点被划分错误了);而在logistic regression中的gradient descent算法每一次对w的更新都要扫描所有的点。这一小节我们想要做的是优化梯度下降算法。让logistic regression和PLA一样快。目前来说,logistic regression是和pocket算法差不多快的。

逻辑斯蒂回归中的梯度下降算法

逻辑斯蒂回归使用梯度下降算法更新权重的规则:

wt+1⟵wt+η1N∑n=1Nθ(−ynwTtxn)(ynxn)−▽Ein(wt)

我们看到在更新的时候有1N∑Nn=1这样的操作,那么我们可以随机的抽取一个样本替代这个加和取平均的操作(比例这里有1w个数字,我们把这1w个数字求和取平均的值应该差不多等于我们只抽取几个数字来求和取平均的值,应该也差不多等于我们随机抽取一个数字的值)。只在这一个样本点上求取梯度值,即只针对一个点的error求取偏微分,这个值称为随机梯度stochastic gradient。这样的话整体的梯度可以看成是这个随机梯度的期望值。

随机梯度下降算法(stochastic gradient descent)

使用随机的梯度取代真正的梯度:

wt+1⟵wt+ηθ(−ynwTtxn)(ynxn)−▽errin(wt, xn, yn)(1)

算法的优点:

如果迭代足够多次的话, 真实的梯度和随机的梯度应该是会差不多接近的。(justification)

简单,不再需要对所有的点计算梯度,而只计算一个点的梯度。在big data的背景下这样的方式会很有用。

当资料本身就是一笔一笔的来的时候(online learning), stochastic gradient descent会很适合这样的场景。

算法的缺点:

算法在性质上可能会不稳定。特别是当步长很大的时候。

(1)式和我们之前看到过的PLA算法的更新规则非常的相似。

PLA:

wt+1⟵wt+1⋅|[yn≠sign(wTtxn)]| (ynxn)

其中如果◯成立,|[◯]|=1, 否则|[◯]|=0

SGD logistic regression:

wt+1⟵wt+η⋅θ(−ynwTtxn)(ynxn)

[align=center][/align]

SGD logistic regression≈′soft′ PLA

即使用SGD算法的logistic regression可以看成是‘软’的PLA,因为不同于PLA,不再只是看错了没有, 而是看看错了多少, 错的多就更新的多一点, 错的少就更新的少一点。

通过比对上面的两个式子我们可以得到

逻辑斯蒂回归使用随机梯度下降算法大概相当于是一个soft的PLA算法。在PLA算法中|[yn≠sign(wTtxn)]|的取值是0或者1,而在SGD logistic regression中θ(−ynwTtxn)的取值在0和1之间。

当η=1并且wTtxn非常大的时候(这是θ = 0或者是1),PLA算法和SGD logistic regression算法几乎是一样的。

现在有两个问题:

如何决定停止条件:因为不再扫描所有的点,所以不知道是不是已经梯度为0了,所以一般的停止条件是根据预先设定的迭代次数

如何设置步长η:如果X的范围不是很糟糕的话,0.1还不错,不过这只是个经验值,会有专门的方法来帮助我们选择参数,我们之后也会介绍到。

如果把SGD使用在linear regression上, 更新的方向如下:

2(yn−wTtxn)xn也是朝着x的方更新,真实值和预测值的差异越大,更新的越大。

利用逻辑斯蒂回归解决多分类问题

之前的内容只能用来解决是非题,即分类问题,现在我们想要做的是多选题。即判断一个样本属于多个类别中的哪一个,接下来我们想要做的是将二元分类的方法延伸到可以帮助我们求解多分类的问题。

具体的思想就是,将多元分类转化为多个二元分类问题, 每一次只识别一个类型。



我们可以把这个问题转换为一个二分类的问题,即首先我们关心数据是 □ 还是不是 □ ,是的话其label记为1, 不是的话其label记为0。 (对应到我们熟悉的二分类问题就是将 □ 记为 ◯, 将其他的记为 ×), 得到如下图所示的一个新的二分类问题,这个时候就可以使用binary classification算法来解决。



使用相同的方法解决以下的三个二分类问题,即针对每一个类别做一个该类别和其他的类别的二元分类问题,把该类和其他的类别分开。



通过这样的步骤我们就得到了如下的四个分类器:



将4次二元分类的结果综合起来得到如下图所示的多分类器:这个多远的分类器告诉我们一些结果:

在黑色圈起来的部分中的数据点可以很明确的知道自己属于哪一个类别;

在红色区域中的数据点会同时属于两个类别;

在蓝色区域中的数据点没有类别。



缺点:所以这样的分类器对于蓝色区域和红色区域中的样本是不确定的。

利用逻辑斯蒂回归进行改进

同样是上面的任务, 同样是每一次划分一个类别,但是不再是给出“是”或者“不是”的结果,而是使用logistic regression给出一个模糊的边界。即给出每个数据点属于某个类别的概率(下图中颜色越蓝表示概率越接近1(正例),颜色越红表明概率越接近0(负例),颜色越白表明概率越接近0.5(难以辨别))。同样是进行4次二元分类分别得到如下的结果:



综合上述的结果,得到最后的一个多元的分类器如下:因为在每一个数据点(这个例子中是二维平面上的每一个点),上述的四个二元分类器都会给出该点属于某一个类别的一个概率,选取4个概率中值最高的分类器对该数据点的划分结果作为该点的类别就可以了。



分类器的表达式:

g(x)=argmaxk∈y θ(wT[k]x)

在上述的例子中k = 4, 或者不需要使用θ, 因为该函数是单调的。

g(x)=argmaxk∈y wT[k]x

多元分类算法OVA Decomposition

One-Versus-All(OVA) Decomposition

对于每一个类别k,通过在数据集Dk上使用逻辑斯蒂回归得到wk,

其中Dk={(xn,y′n=2|[yn=k]|−1)}Nn=1(是这个类的其y为1,不是这个类的其y为−1)

得到多元分类器 :g(x)=argmaxk∈y wTkx

Decomposition:是指将原来的多分类问题拆成多个二分类问题

OVA:是指每次对一个类别和其他的所有的类别进行分类

优点

有效率,可以使用任何和逻辑斯蒂回归相似的算法来进行计算,只要是分类的结果输出的也是可以比大小的实数值就行。

当面对的是一个K分类的问题的时候,我们其实要做的是K个logistic regression,每一个logistic regression所用的资料和原来的资料其实并没有差太远,只是将label换掉了而已。值得一提的是, 这K个不同logistic regression问题我们是可以分布在K个不同的机器上运行的。所以这是一个很容易并行处理的算法。

缺点

当K很大,即类别很多的时候,会有数据不平衡的问题,

利用二元分类解决多分类问题

上一小节讲到使用OVA(One-Versus-All)进行多元分类的时候,当K的数量很大的时候,很有可能会出现数据unbalance的问题。 也就是只有很少量的label为1的数据, 其余的都是label为0的数据。这样就会造成分类的结果不好。 为了避免这种情况的发生,我们采用的方法是:每一次只选择两个类别进行分类(例如对于猫, 狗,汽车这样的三分类问题,分别对(猫, 狗),(猫, 汽车),(狗, 汽车)做一次二元分类;而OVA在每一次分类中所有的类都参与, 同样是上面的问题,OVA要做的是(猫, (狗,汽车)), (狗, (猫, 汽车)), (汽车, (猫, 狗))这样的三个二分类问题)。在如下的四个类别的分类问题中,按照上述的思路,一共需要进行6次二元分类问题的求解。(每次选两个类进行划分C24=4!2!(4−2)!=6)



6次二元分类问题的求解结果



将这些二元分类的结果进行合并得到如下最终的4元分类器,



得到了分类器之后怎么对新样本进行分类?

对于一个新的样本,分别使用这个6个分类器进行计算,计算得到的结果中,类别最多的类就该样本的类。具体的细节是,对于任意一个给定的数据点,分别使用上面得到的6个二元的分类器来进行类别的划分,选择6个划分结果中出现次数最多的作为该类的类别。例如6个分类器的分类结果分别是:□,□,□,◊,★,★, 那么我们判断该点的最终的类别是 □。

多元分类算法OVO

One-versus-one(OVO) Decomposition

对于数据集中的任意两个类别k,l, 通过在数据集Dk,l上使用任一种二元分类算法来得到wk,l。

其中数据集如下:

Dk,l={(xn,y′n=2|[yn=k]|−1):yn=k or yn=l}。

(是k类的样本其label设置为1, 是l类的样本其label设置为0)

在得到了所有的分类器之后,通过一个投票函数来决定一个新的数据x的属类:g(x)=vote(wTk,lx)

优点:

虽然如果共有4个类别,却要做C42=6次二元分类,但是每一次二元分类涉及到的数据量很少(只包括两个类的数据)。

可以使用任意的binary classification的方法。

可以并行计算

缺点

预测的时间比较长:因为要使用得到的6个分类器来进行投票决定。

需要更多的存储:同样是因为有更多的w,所以需要占用更多的空间。

小结

首先声明了三个linear model都可以用来做binary classification。然后将解决logistics regression的方法从GD算法改进到了SGD算法,然后发现这样的话logistics regression和PLA算法看起来原理差不多。第三部分和第四部分给出了两种不同的做多类别分类的方法OVA和OVO。

参考

林轩田:机器学习基础
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: