您的位置:首页 > 编程语言 > Go语言

Stanford机器学习__Lecture notes CS229. Logistic Regression(逻辑回归)(2)Perceptron Learning Algorithm

2016-09-10 00:49 555 查看

Stanford机器学习__Lecture notes CS229. Logistic Regression(逻辑回归)(2)

这里其实我们要说的是感知器算法

之所以要把感知器算法(Perceptron Learning Algorithm)放在这里,是因为这两个算法在形式上的相似性。

我们在logistic回归中,考虑到二分类问题,其输出标记y∈(0,1),而线性回归模型产生的预测值H(x)=wTx+b是实值,于是我们需要将实值H(x)转化为0/1值。最理想的是“单位阶跃函数”(unit-step function)。最后我们用对数几率函数(Logistic functino)作为g(.)替代了“单位阶跃函数”得到了logistic回归函数。

hθ(x)=11+e(wTx)

当我们把对数几率函数(Logistic functino)替换为sign函数时,我们就得到了一个二元线性分类器——感知器。

g(z)={10if z≥0if z < 0

此时,另hθ(x)=g(θTx)

参数更新规则:

θjnew=θjold−α(hθ(x(i))-y(i))x(i)j,

到这里,我们就已经有了完整的感知器学习算法。

我们可以看到,这里的参数更新规则实际上跟logistic随机梯度下降的参数更新规则是一致的。

细心一点可以看出,其实θTx=0在1维空间中代表一个点,在2维空间中代表一条直线,在3维空间中代表一个平面。

以2维空间为例:

对于所有满足θTx<0的x,将落在直线一边的区域中(下图中的蓝色).对于所有满足θTx>0的x,将落在直线另一边的区域中(下图中的红色).



Perceptron Learning

Perceptron Learning Algorithm的目的是要找到一个perceptron,能把正确地把不同类别的点区分开来。在二维平面上,任何找一条直线都可以用来做perceptron,只不过有些perceptron分类能力比较好(分错的少),有些perceptron分类能力比较差(分错的多)。



自然,Perceptron Learning Algorithm需要找到一个好的perceptron。

Perceptron Learning要做的是,在“线性可分”的前提下,至少存在一个perceptron,可以做到百分百的正确率,对于任意的(yi,xi),有hθ(xi)=yi。

我们把完美的Perceptron记作:

hθ(x)=11+e(wTx)

由一个初始的Perceptron开始,通过不断的learning,不断的调整hθ(x)的参数θ,使他最终成为一个完美的perceptron。

Perceptron Learning Algorithm (PLA) - “知错就改”的算法

PLA的方法如下:

PLA的costfunction(x)=−∑错误分类的索引集合iyi(θxi+b)

为了简化我们之后的论证过程,在这里做出小改动:

1. 我们将负样本标记为-1

2. 基于1的改动,我们也需要把g(.)函数替换为:

sign(z)={1−1if z≥0if z < 0

3. 基于以上,我们需要变动参数的更新法则:

极小化cost function的梯度是对w和b求偏导,即:

∇θcostfunction=−∑yixi∇bcostfunction=−∑yi

这样,我们只需要对每个错分类的样本进行下面的更新即可:

θjnew=θjold+yix(j)i,

For(t=0,1,...) ,t 表示第t次更新——第t次遍历数据集

xi表示第i个样本,循环遍历整个训练集

如果yi(t)≠sign(θTxi(t)),则

θ(t)new=θ(t)old+yi(t)x(j)i(t),

直到找不到错误点,返回最后一次迭代的θbest。

Perceptron Learning Algorithm (PLA)收敛性证明

我们知道在数据线性可分的前提下,我们心目中有个完美的θbest

,它能够完美的把圈圈和叉叉区分开来。那么如何证明PLA能够使

θ不断接近θbest呢?

这里就要用到夹角余弦的公式,如果令t表示θ的更新次数,

θt更新之后的θi+1与θbest之间的夹角余弦变大(夹角变小)了,则我们可以认为PLA是有效的。

当数据“线性可分”时,θbest是必然存在的,所以训练集中任意的(xi,yi)都可以被正确分类,可知:

yi(t)θbestxi(t)≥minyiθbestxi>0

2. 下面证明在数据线性可分时,简单的感知机算法会收敛。

初始时θ0=0,每次遇见错误数据才会更新。

yi(t)≠sign(θTxi(t))⟺yi(t)θTxi(t)≤0

t次更新以后:

θbestθt=θbest(θt−1+yixi)≥θbestθt−1+minyiθbestxi≥...≥θbestθ0+tminyiθbestxi=tminyiθbestxi(1)(i)(t)(t+1)

看起来θt更接近θbest了,但他们内积的增大并不能表示他们夹角的变小。也可能是|θt|变大了。



根据上述的性质,我们可以求算θbest与θt的夹角的余弦值,从θ0开始,经过t次错误更正,变成θt。

|θt+1|2=|θt+yi(t)xi(t)|2=θ2t+2yi(t)θtxi(t)+|yi(t)xi(t)|2≤θ2t+|yi(t)xi(t)|2≤θ2t+maxi|yixi|2(1)(2)(3)(4)

根据上式可得:

θ2t≤tmaxi|yixi|2

cos(∠)=θbestθt|θbest||θt|≥tminyiθbestxi|θbest||θt|≥tminyiθbestxi|θbest|t√maxi|yixi|=t√minyiθbestxi|θbest|maxi|yixi|=t√*const常数

由于夹角余弦是小于等于1的,我们可以有:

1≥θbestθt|θbest||θt|≥t√*const常数

上面的不等式告诉我们两点:

PLA能够帮助θt进步,因为θt与θbest的夹角余弦随着更新错误点的次数 t 的增加而增加,θt越来越接近θbest。

PLA会停止(halt),因为当数据是线性可分时,经过有限次数的迭代,一定能找到一个能够把数据完美区分开的perceptron。

Pocket Algorithm

当数据线性不可分时(存在噪音),简单的PLA 算法显然无法收敛。我们要讨论的是如何得到近似的结果。即寻找θg使错误分类的数据尽可能得少。



与简单PLA 的区别:迭代有限次数(提前设定);随机地寻找分错的数据(而不是循环遍历);只有当新得到的θ比之前得到的最好的θg 还要好时,才更新θg(这里的好指的是分出来的错误更少)。

由于计算θ后要和之前的θg比较错误率来决定是否更新θg, 所以pocket algorithm 比简单的PLA 方法要低效。

参考博客:

https://www.douban.com/note/319669984/

http://www.tuicool.com/articles/eeame2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  机器学习 算法