机器学习-感知机

转载自:https://blog.csdn.net/dream_angel_z/article/details/48915561

在机器学习中,感知机(perceptron)是二分类的线性分类模型,属于监督学习算法。输入为实例的特征向量,输出为实例的类别(取+1和-1)。感知机对应于输入空间中将实例划分为两类的分离超平面。感知机旨在求出该超平面,为求得超平面导入了基于误分类的损失函数,利用梯度下降法 对损失函数进行最优化(最优化)。感知机的学习算法具有简单而易于实现的优点,分为原始形式和对偶形式。感知机预测是用学习得到的感知机模型对新的实例进行预测的,因此属于判别模型。感知机由Rosenblatt于1957年提出的,是神经网络支持向量机的基础。

定义

假设输入空间(特征向量)为XRnX⊆Rn,输出空间为Y={-1, +1}。输入xXx∈X表示实例的特征向量,对应于输入空间的点;输出y∈Y表示示例的类别。由输入空间到输出空间的函数为

f(x)=sign(wx+b)f(x)=sign(w·x+b)

称为感知机。其中,参数w叫做权值向量weight,b称为偏置biaswxw·x表示w和x的点积

i=1mwixi=w1x1+w2x2+...+wnxn∑i=1mwixi=w1x1+w2x2+...+wnxn

sign为符号函数,即

f(x)={+11if x>=0elsef(x)={+1if x>=0−1else

在二分类问题中,f(x)f(x)的值(+1或-1)用于分类xx为正样本(+1)还是负样本(-1)。感知机是一种线性分类模型,属于判别模型。我们需要做的就是找到一个最佳的满足wx+b=0w⋅x+b=0的w和b值,即分离超平面(separating hyperplane)。如下图,一个线性可分的感知机模型


这里写图片描述 

中间的直线即wx+b=0w⋅x+b=0这条直线。

线性分类器的几何表示有:直线、平面、超平面。

学习策略

核心:极小化损失函数。

如果训练集是可分的,感知机的学习目的是求得一个能将训练集正实例点和负实例点完全分开的分离超平面。为了找到这样一个平面(或超平面),即确定感知机模型参数w和b,我们采用的是损失函数,同时并将损失函数极小化。

对于损失函数的选择,我们采用的是误分类点到超平面的距离(可以自己推算一下,这里采用的是几何间距,就是点到直线的距离):

1w|wx0+b|1∥w∥|w∗x0+b|

其中||w||||w||L2L2范数。

对于误分类点(xi,yi)(xi,yi)来说:

yi(wxi+b)>0−yi(w∗xi+b)>0

误分类点到超平面的距离为:

1wyi(wx0+b)−1∥w∥yi(w∗x0+b)

那么,所有点到超平面的总距离为:

1wxiϵMyi|wx0+b|−1∥w∥∑xiϵMyi|w∗x0+b|

不考虑1||w||1||w||,就得到感知机的损失函数了。

L(w,b)=xiϵMyi(wx0+b)L(w,b)=−∑xiϵMyi(w∗x0+b)

其中M为误分类的集合。这个损失函数就是感知机学习的经验风险函数

可以看出,随时函数L(w,b)L(w,b)是非负的。如果没有误分类点,则损失函数的值为0,而且误分类点越少,误分类点距离超平面就越近,损失函数值就越小。同时,损失函数L(w,b)L(w,b)是连续可导函数。

学习算法

感知机学习转变成求解损失函数L(w,b)L(w,b)的最优化问题。最优化的方法是随机梯度下降法(stochastic gradient descent),这里采用的就是该方法。关于梯度下降的详细内容,参考wikipedia Gradient descent。下面给出一个简单的梯度下降的可视化图:


这里写图片描述 

上图就是随机梯度下降法一步一步达到最优值的过程,说明一下,梯度下降其实是局部最优。感知机学习算法本身是误分类驱动的,因此我们采用随机梯度下降法。首先,任选一个超平面w0w0b0b0,然后使用梯度下降法不断地极小化目标函数

minw,bL(w,b)=xiϵMyi(wx0+b)minw,bL(w,b)=−∑xiϵMyi(w∗x0+b)

极小化过程不是一次使M中所有误分类点的梯度下降,而是一次随机的选取一个误分类点使其梯度下降。使用的规则为 θ:=θαθ(θ)θ:=θ−α∇θℓ(θ),其中αα是步长,θ(θ)∇θℓ(θ)是梯度。假设误分类点集合MM是固定的,那么损失函数L(w,b)L(w,b)的梯度通过偏导计算:

L(w,b)w=xiϵMyixi∂L(w,b)∂w=−∑xiϵMyixi

L(w,b)b=xiϵMyi∂L(w,b)∂b=−∑xiϵMyi

然后,随机选取一个误分类点,根据上面的规则,计算新的w,bw,b,然后进行更新:

w:=w+ηyixiw:=w+ηyixi

b:=b+ηyib:=b+ηyi

其中ηη是步长,大于0小于1,在统计学习中称之为学习率(learning rate)。这样,通过迭代可以期待损失函数L(w,b)L(w,b)不断减小,直至为0.

下面给出一个感知器学习的图,比较形象:


这里写图片描述 

由于上图采取的损失函数不同,所以权值的变化式子有点区别,不过思想都是一样的。

算法描述如下:

算法:感知机学习算法原始形式

输入:T={(x1,y1),(x2,y2)...(xN,yN)}(其中xi∈X=Rn,yi∈Y={-1, +1},i=1,2...N,学习速率为η)
输出:w, b;感知机模型f(x)=sign(w·x+b)
(1) 初始化w0,b0,权值可以初始化为0或一个很小的随机数
(2) 在训练数据集中选取(x_i, y_i)
(3) 如果yi(w xi+b)≤0
           w = w + ηy_ix_i
           b = b + ηy_i
(4) 转至(2),直至训练集中没有误分类点
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

解释:当一个实例点被误分类时,调整w,b,使分离超平面向该误分类点的一侧移动,以减少该误分类点与超平面的距离,直至超越该点被正确分类。

伪代码描述:

这里写图片描述

对于每个wxw⋅x其实是这样子的(假设x表示的是七维):


这里写图片描述 

yj(t)=f[w(t)xj+b]=f[w1(t)xj,1+w2(t)xj,2++wn(t)xj,n+b]yj(t)=f[w(t)⋅xj+b]=f[w1(t)xj,1+w2(t)xj,2+⋯+wn(t)xj,n+b]

对于输入的每个特征都附加一个权值,然后将相加得到一个和函数f,最后该函数的输出即为输出的y值。

实例

正样本点:x1=(3,3)Tx1=(3,3)T,x2=(4,3)Tx2=(4,3)T 
负样本点:x1=(1,1)Tx1=(1,1)T 
求感知机模型f(x)=sign(wx+b)f(x)=sign(w⋅x+b),其中w=(w(1),w(2))T,x=(x(1),x(2))Tw=(w(1),w(2))T,x=(x(1),x(2))T

解答思路:根据上面讲解的,写初始化权值w和偏置b,然后一步一步的更新权值,直到所有的点都分正确为止。

解:

(1) 令w0=0,b0=0w0=0,b0=0 
(2) 随机的取一个点,如x1x1,计算y1(w0x1+b0)y1(w0⋅x1+b0),结果为0,表示未被正确分类,根据下面的式子更新w,bw,b(此例中,我们将学习率ηη设置为1):

ww+ηyixiw←w+ηyixi

bb+ηyib←b+ηyi

计算得到

w1=w0+ηy1x1=(3,3)Tw1=w0+ηy1x1=(3,3)T

b1=b0+ηy1=1b1=b0+ηy1=1

得到一个模型

w1x+b1=3x(1)+3x(2)+1w1⋅x+b1=3x(1)+3x(2)+1

(3)接着继续,计算各个点是否分错,通过计算得到,x1x2x1和x2两个点,yi(w0xi+b1)yi(w0⋅xi+b1)都大于0,所以是被正确分类的点,无需修改权值w和bias项;而对于x3x3通过计算得到y3(w0x3+b1)<0y3(w0⋅x3+b1)<0,误分了,所以修改权值:

w2=w1+y3x3=(2,2)Tw2=w1+y3x3=(2,2)T

b2=b1+y3=0b2=b1+y3=0

得到线性模型:

w2x+b2=2x(1)+2x(2)w2x+b2=2x(1)+2x(2)

一次下去,知道所有的点都有yi(w0xi+b1)>0yi(w0⋅xi+b1)>0即可 


…… 
…… 
…… 

最后求得

w7=(1,1)T,b7=3w7=(1,1)T,b7=−3

所以感知机模型为:

f(x)=sign(x(1)+x(2)3)f(x)=sign(x(1)+x(2)−3)

即我们所求的感知机模型。

小结

感知器Perceptron在机器学习当中是相当重要的基础,理解好感知器对后面的SVM和神经网络都有很大的帮助。事实上感知器学习就是一个损失函数的最优化问题,这里采用的是随机梯度下降法来优化。

好吧,对于感知机的介绍,就到此为止!在复习的过程中顺便做下笔记,搜搜资料,整理整理,也算是给自己一个交代吧。希望本文章能对大家能有点帮助。

References

[1] 统计学习方法, 李航 著 
[2] Wikiwand之Perceptron http://www.wikiwand.com/en/Perceptron 
[3] Wikipedia https://en.wikipedia.org/wiki/Machine_learning

阅读更多
文章标签: code 机器学习 Python
个人分类: 机器学习 Python
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭