感知机原理与python实例
原理
线性可分
给定一个二类数据集的标签为正负1,如果存在某个超平面 S S S:
w x + b = 0 wx + b = 0 wx+b=0
将所有正负实例点完全正确地划分到超平面的两侧,即对 y = + 1 y = +1 y=+1的实例有: w x + b > 0 wx + b > 0 wx+b>0;即对 y = − 1 y = -1 y=−1的实例有: w x + b < 0 wx + b < 0 wx+b<0.
判别函数
针对标签为正负1的二分类问题,感知机的判别函数为:
f ( x ) = s i g n ( w x + b ) f(x) = sign(wx + b) f(x)=sign(wx+b)
损失函数
自然地想,损失函数应当是误分类的点的个数,但是这个函数是不可导的,所以优化起来比较困难。
考虑 R n R^n Rn空间中的任意一点 x 0 x_0 x0到超平面的距离为:
1 ∣ ∣ w ∣ ∣ 2 ( w x 0 + b ) \frac{1}{||w||_2}(wx_0 + b) ∣∣w∣∣21(wx0+b)
对应误分类集合 M M M中的点来说:
− y ∣ ∣ w ∣ ∣ 2 ( w x + b ) > 0 -\frac{y}{||w||_2}(wx + b) > 0 −∣∣w∣∣2y(wx+b)>0
所以最终选择的损失函数为:
L ( w , b ) = − ∑ x ∈ M y ( w x + b ) L(w, b) = -\sum_{x \in M}y(wx + b) L(w,b)=−x∈M∑y(wx+b)
学习过程
目前学习的过程就变成使损失函数最小化的过程。
( w , b ) = arg min w , b L ( w , b ) ∂ L ∂ w = − ∑ x ∈ M y x ∂ L ∂ b = − ∑ x ∈ M y \begin{aligned} (w, b) &= \arg \min_{w, b}L(w, b) \\ \frac{\partial L}{\partial w} &= -\sum_{x \in M}yx \\ \frac{\partial L}{\partial b} &= -\sum_{x \in M}y \end{aligned} (w,b)∂w∂L∂b∂L=argw,bminL(w,b)=−x∈M∑yx=−x∈M∑y
通过梯度下降的方式,在每次迭代过程中以学习率 η \eta η更新 w , b w, b w,b的值,直到结果收敛或者达到指定的迭代次数为止。
w t = w t − 1 − η ∂ L ∂ w b t = b t − 1 − η ∂ L ∂ b w^t = w^{t - 1} - \eta\frac{\partial L}{\partial w} \\ b^t = b^{t - 1} - \eta\frac{\partial L}{\partial b} \\ wt=wt−1−η∂w∂Lbt=bt−1−η∂b∂L
收敛性证明
下面证明当数据是线性可分的情况下,感知机准则是一定收敛的。通过两种方法来进行证明。
方式一
方便起见,令 a = ( w T , b ) T , z = ( x T , 1 ) T a = (w^T, b)^T, z = (x^T, 1)^T a=(wT,b)T,z=(xT,1)T。
设最优的权重解为: a ^ \hat{a} a^,一定满足 ∀ x i , a ^ T z y i > 0 \forall x_i, \hat{a}^Tzy_i > 0 ∀xi,a^Tzyi>0。
假设经过 t t t轮迭代之后的解为: a t a^t at,在这一轮中仍然被分错的向量集合为: E ( t ) = { z ∣ a T z y < 0 } E(t) = \lbrace z|a^Tzy < 0 \rbrace E(t)={
z∣aTzy<0},根据上文描述的梯度下降的规则,在第 t + 1 t + 1 t+1轮中,权重应当被更新为:
a ( t + 1 ) = a t + ∑ x i ∈ E ( t ) y i z i a^{(t + 1)} = a^t + \sum_{x_i \in E(t)}y_iz_i a(t+1)=at+xi∈E(t)