感知器学习笔记
感知器(Perceptron) 是一种用于线性可分数据集的二类分类器算法。这种算法的局限性很大:web
- 只能将数据分为 2 类
- 数据必须是线性可分的
虽然有这些局限,可是感知器是 ANN 和 SVM 的基础,理解了感知器的原理,对学习ANN 和 SVM 会有帮助,因此仍是值得花些时间的。算法
感知器能够表示为
f:RN→{−1,1}
的映射函数。其中
f
的形式以下:
svg
f(x)=sign(w.x+b)
其中,
w
和
b
都是
N
维向量,是感知器的模型参数。感知器的训练过程其实就是求解
w
和
b
的过程。正确的
w
和
b
所构成的超平面
w.x+b=0
刚好将两类数据点分割在这个平面的两侧。
感知器的训练算法
误分类的点
(xi,yi)
,则
xi
距离超平面的距离为:
函数
1||w|||w⋅xi+b|
,其中
||w||
为
w
的
L2
范数。学习
因为
|yi|=1
,所以上式刚好等于
atom
−yi(w⋅xi+b)||w||
定义损失函数为全部误分类数据点到超平面的距离之和。
spa
L0(w,b)=−1||w||∑xi∈Myi(w⋅xi+b)
若是没有误分类点,则
L(w,b)=0
。感知器的训练算法就是求取使得
L(w,b)=0
的
w
和
b
。xml
大多数教科书上给出的感知机
sign(w⋅x+b)
学习的损失函数定义为:
ip
L(w,b)=−∑xi∈Myi(w⋅xi+b)
能够看到这个定义去掉了分母的
||w||
。当
||w||≠0
时,
L0(w,b)=0
和
L(w,b)=0
是等价的。而感知器的训练算法能够保证最终求得的
w
知足条件
||w||
。因此这样定义损失函数倒也没有问题。it
感知机学习算法
1.感知机学习算法的原始形式:
训练集:
T={(x1,y1),(x2,y2),⋯,(xN,yN)},xi∈Rn,yi∈{+1,−1}
,求参数
w,b
,使得
minw,bL(w,b)=minw,b⎡⎣−∑xi∈Myi(w⋅xi+b)⎤⎦
- 假设误分类点集合 M 是固定的,则损失函数
L(w,b)
的梯度由:
∇wL(w,b)=−∑xi∈Myixi∇bL(w,b)=−∑xi∈Myi
这两个梯度给出的是损失函数增加的方向。后面使用时需用反方向。
- 梯度降低法:随机选取一个误分类点
(xi,yi)
,对
w,b
进行更新:
w←w+η.yixib←b+η.yi
其中
η∈(0,1]
是学习率。经过迭代可使得损失函数
L(w,b)
不断减少直到 0。
能够证实,若是数据是线性可分的,那么这种算法是收敛的。也就是说通过有限步迭代,会求出可以正确分类的
w,b
。
除了原始算法外,感知器还有所谓的对偶形式。这里就很少介绍了。须要进一步了解的能够参考李航写的《统计学习方法》一书。