感知机


因为感知机,我被周某人嘲笑了,在哪里跌倒就要在哪里爬起来并写一篇博客!
感知机

感知机

  • 输入空间:χRn\chi\subseteq R^n
  • 输出空间:y={+1,1}y=\{+1,-1\}
  • 函数:f(x)=sign(wx+b)f(x)=sign(w\cdot x+b) sign(x)={+1x01x<0sign(x)=\begin{cases}+1&x\ge 0\\-1&x<0\end{cases}
  • wx+b=0w\cdot x+b=0可看做分离超平面,ww为超平面的法向量,bb为截距
  • 小知识:
    • 感知机为二分类的线性分类模型,只能处理完全线性可分的数据

感知机分类策略

  • 损失函数——虽然很自然的想到用误分类点个数作为损失函数,但是这样的损失函数不是w,bw,b连续可导函数(分段)了,不易对损失函数进行优化,所以,一个更好的选择是——
    • 将所有误分类点到超平面的总距离作为损失函数
    • 任意一点x0x_0到超平面wx+b=0w\cdot x+b=0的距离为:1w2wx0+b\frac1{\parallel w\parallel}_2|w\cdot x_0+b| w2\parallel w\parallel_2L2L_2范数
    • 不想要分数形式,可将超平面归一化,即wx+b=0wwx+bw=0w\cdot x+b=0\Rightarrow\frac{w}{\parallel w\parallel}\cdot x+\frac{b}{\parallel w\parallel}=0w:=ww,b:=bww:=\frac{w}{\parallel w\parallel},b:=\frac{b}{\parallel w\parallel}
    • 再想着能不能把绝对值去了,减少一下计算机的计算负担,发现对于误分类点来说,yi(wxi+b)>0-y_i(w\cdot x_i+b)>0恒成立
    • 所以损失函数最终变成了L(w,b)=xiMyi(wxi+b)L(w,b)=-\sum\limits_{x_i\in M}y_i(w\cdot x_i+b) M为所有误分类点的集合

感知机学习算法

  • 训练集:T={(x1,y1),...,(xN,yN)}T=\{(x_1,y_1),...,(x_N,y_N)\}
  • 对损失函数极小化:minw,bL(w,b)=xiMyi(wxi+b)\min\limits_{w,b}L(w,b)=-\sum\limits_{x_i\in M}y_i(w\cdot x_i+b)
  • wL(w,b)=xiMyixi\triangledown_wL(w,b)=-\sum\limits_{x_i\in M}y_ix_i bL(w,b)=xiMyi\triangledown_bL(w,b)=-\sum\limits_{x_i\in M}y_i
  • 这里采用的是随机梯度下降(stochastic gradient descent):一次随机选择一个误分类点使其梯度下降
    • 若选(xi,yi),w,b(x_i,y_i),对w,b更新:
      • wL(w,b)=yixi,bL(w,b)=yi\triangledown_wL(w,b)=-y_ix_i,\triangledown_bL(w,b)=-y_i
      • w:=wηwL(w,b)=w+ηyixiw:=w-\eta\triangledown_wL(w,b)=w+\eta y_ix_ib:=bηbL(w,b)=b+ηyib:=b-\eta\triangledown_bL(w,b)=b+\eta y_i η\eta为移动步长

原始算法

  • 输入:数据集T,η(0<η1)T,学习率\eta(0<\eta\le1)
  • 输出:w,bw,b
  • 模型:f(x)=sign(wx+b)f(x)=sign(w\cdot x+b)
  • 步骤:
    • (1)选取初值w0,b0w_0,b_0
    • (2)选取数据(xi,yi)(x_i,y_i)
    • (3)若该点为误分类点,即yi(wxi+b)0y_i(wx_i+b)\le0 w:=w+ηyixiw:=w+\eta y_ix_i b:=b+ηyib:=b+\eta y_i
    • (4)转至(2),直到训练集没有误分类点(或许这就是要求数据完全线性可分的原因?)

对偶算法

  • (xi,yi)(x_i,y_i)会误分nin_i次,则关于(xi,yi)(x_i,y_i)点,w,bw,b变化为ηniyixi,ηniyi\eta n_iy_ix_i,\eta n_iy_i,记αi=ηni\alpha_i=\eta n_i
  • 最后学习到的w,bw,bw:=w0+i=1Nαiyixiw:=w_0+\sum\limits_{i=1}^N\alpha_iy_ix_i b:=b0+i=1Nαiyib:=b_0+\sum\limits_{i=1}^N\alpha_iy_i
  • 对偶算法,转化为求α=(α1,α2,...,αN)T(ni),b\alpha=(\alpha_1,\alpha_2,...,\alpha_N)^T(其实是n_i),b
  • 模型:f(x)=sign(j=1Nαjyjxjx+b)f(x)=sign(\sum\limits_{j=1}^N\alpha_jy_jx_j\cdot x+b)
  • 步骤:
    • (1)初始化:α=0,b=0\alpha=0,b=0
    • (2)在训练集中选取(xi,yi)(x_i,y_i)
    • (3)若yi(j=1Nαjyjxjxi+b)0y_i(\sum\limits_{j=1}^N\alpha_jy_jx_j\cdot x_i+b)\le 0:αi:=αi+η\alpha_i:=\alpha_i+\eta b:=b+ηyib:=b+\eta y_i
    • (4)转至(2),直到训练集没有误分类点
    • 这里有xixix_i\cdot x_i,表示内积,可以先生成Gram矩阵:G=[xixj]N×NG=[x_i\cdot x_j]_{N\times N}