感知机

来源:互联网 发布:windows访问samba拒绝 编辑:程序博客网 时间:2024/05/01 06:07

感知机算法处理的数据必须是线性可分的,否则无法停下来

算法:

While (True)  {

         Bool flag = False

         ForI in N

                   If Yi * (W内积Xi) < 0

                            W= W + YiXi

    flag = True

if !flag break

}

感知机算法在每一轮迭代的过程中,利用错分的点对W进行修正,其实可以把修正的过程看做是两个向量的加减过程,W一个向量,Xi一个向量,yi*(W内积Xi) < 0说明向量W和向量Xi之间的夹角不对(该大于90度没大于,或者是该小于90度的没小于),而W+YiXi就是让这两个向量的夹角朝着正确的方向进行了旋转,但是旋转的角度受限于Xi,||Xi||大点,那么旋转的角度就大点,||Xi||如果比较小,那么旋转的角度也会比较小。

那么对于线性可分的数据,感知机算法是否一定能够收敛,其迭代次数的上界是多少?

证明:

首先对于线性可分的数据,一定存在一个超平面能将数据分开,不妨设这个超平面为Wf。

那么对于所有点一定有Yi*(Wf内积Xi) >= min{ Yi*(Wf内积Xi)} > 0

对于分错的点i,设当前的超平面为Wt,那么必有Yi * (Wt内积Xi) < 0,然后会对Wt修正。

 

Wf 内积 Wt+1 = Wf 内积 (Wt + YiXi)

= Wf内积Wt +Yi*Wf*Xi

>= Wf内积Wt + min{ Yi*(Wf内积Xi)}

另 p = min{ Yi*( (Wf/||Wf||) 内积Xi )}

则Wf 内积 Wt+1 >= Wf内积 Wt +p *  ||Wf||

所以对于初始时我们另W0 为全0,那么经过t轮迭代后有:

Wf内积 Wt >=t* p * ||Wf||

 即

 (Wf/ ||Wf||) 内积 Wt >= t * p 

同时由于每次我们只对Wt修正一个YiXi,这也就限制了Wt+1相比Wt不会改变的太多。

如下:

||Wt+1||^2 = ||Wt+YiXi||^2 = ||Wt||^2 + ||YiXi||^2+ 2*Yi*Wt内积Xi

由于Yi = {+1, -1}, 而Yi*Wt内积Xi < 0

所以||Wt+1||^2 <= ||Wt||^2 + ||YiXi||^2

另R = max{||Xi||},同时我们初始化W0为全0,那么经过t轮迭代后必然有

                            ||Wt||^2<= t*(R^2)

则:

1.                        (Wf/ ||Wf||) 内积 Wt >= t * p 

2.                         (Wf / ||Wf||) 内积 Wt <=||Wt|| <= sqrt(t) * R

所以

                            t<= R^2 / p ^2

也就是说最多经过这么对轮的迭代,感知机算法一定会收敛

这里的R代表离原点最远点,而这里p 代表的是向Wf投影长度最短的点!

0 0