感知机算法及其对偶形式

最近在重新看李航的统计学习方法,总结下每章的内容。

基本概念

感知机定义

输入空间\(\chi \subseteq R^n\),输出空间是\(Y=\{+1,-1\}\),输入\(x \in \chi\),表示实例的特征向量,对应于输入空间的点;输出\(y \in Y\),是该实例的类别。有输入空间到输出空间的映射函数决定:
\[ f(x)=sign(w \cdot x+b) \]
其中\(sign(x)\)表示符号函数。\(x\)非负时为+1,否则是-1。

注:维基百科上\(sign(x)\)函数在\(x=0\)处取值定义为0,该函数简写为\(sgn(x)\),但《统计学习方法》中符号函数在0处取值定义为1,《机器学习》(周志华)中p98定义\(sgn(x)\)为阶跃函数,在所有自变量非正时都取0。

感知机是线性分类模型,判别模型。可以用超平面\(wx+b=0\)解释,该平面将空间分为两部分,即正负两类别。

数据集的线性可分性

是指存在某个超平面\(wx+b=0\)可以完整地将数据集的正负实例点划分到两边。对\(y_i=+1\)的样本,都有\(w_ix+b>0\),而所有\(y_i=-1\)的样本,都有\(w_ix+b<0\)。这种数据集称为线性可分数据集。

感知机的学习策略

输入空间中的任意点\(x_0\)到超平面\(S\)的距离定义是\(\frac 1 {||w||} |wx_0+b|\),其中\(||w||\)表示\(w\)\(L_2\)范数。

所有误分类的数据都满足不等式\(-y_i(wx_i+b)>0\),这是显然的,因为实例类别和计算的值异号。而\(y_i\)的取值是\(\pm1\),因此误分类点到超平面的距离可以写成\(-\frac 1 {||w||} y_i(wx_i+b)\),距离公式里绝对值是正时,$ -y_i$是正1,反之是负1,从而把绝对值符号去掉。

数据集中所有的误分类点集合是\(M\),则全部误分类点到超平面的总距离是
\[ -\frac 1 {||w||} \sum \limits_{x_i \in M}y_i(wx_i+b) \]
不考虑前面的\(||w||\),定义感知机的损失函数为$ L(w,b)= -\sum \limits_{x_i \in M}y_i(wx_i+b)$

损失函数的特点:非负,且显然误分类点越少,或误分类点离超平面越近,损失函数值越小。直到没有误分类点时损失函数值为0。

感知机的学习策略就是在假设空间寻找\(w,b\)让对该数据集的所有点,损失函数最小。

学习算法

优化损失函数的方法有很多,最简单是梯度下降。对感知机的损失函数,两个参数的梯度
\[ \nabla_w \ L(w,b) = \ -\sum \limits_{x_i \in M} y_i*x_i\\\nabla_b \ L(w,b) = \ -\sum \limits_{x_i \in M} y_i \]

所以每次更新两个参数的迭代式子是\(w =w+h*y_i*x_i\)\(b= b+h*y_i\),其中\(h\)是步长,范围在0到1之间,又称为学习率。

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

  1. 选取初值\(w_0,b\)

  2. 在训练集中选取数据\((x_i,y_i)\)

  3. 如果该数据是误分类点,即\(y_i(wx_i+b)\le 0\) ,更新参数
    \[ w =w+h*y_i*x_i\\b= b+h*y_i \]

  4. 转向2. ,直到没有误分类点,或者达到训练轮次。

上述步骤被称为感知机学习算法的原始形式。

感知机算法的对偶形式

和原始形式并无太大差别,但是可以加速训练。

对偶形式的思想:将\(w\)\(b\)看作是实例和标签的线性组合。对于每一个样本\((x_i,y_i)\),在更新过程中使用了\(n_i\)次,即总次循环中,有\(n_i\)次中将该样本作为了误分类点,故用它去更新参数。而一共有N个样本。

原始形式\(w =w+h*y_i*x_i\)\(b= b+h*y_i\)就可以写成
\[ w=\sum\limits_{i=1} \limits^{N} n_i hy_ix_i \\b = \sum\limits_{i=1} \limits^{N} n_ihy_i \]
则,感知机模型化为
\[ f(x)=sign(w\cdot x+b)=sign(\sum\limits_{i=1} \limits^{N} n_i hy_ix_i \cdot x + \sum\limits_{i=1} \limits^{N} n_ihy_i) \]
学习目标变成了\(n_i\)

训练过程如下:

  1. 学习参数\(n=(n_1,n_2,....n_N)\) ,初始赋值全部是0
  2. 在数据集中选取数据\((x_j,y_j)\)
  3. 判断是不是误分类点,即\(y_j (\sum\limits_{i=1} \limits^{N} n_i hy_ix_i \cdot x_j + \sum\limits_{i=1} \limits^{N} n_ihy_j) \le 0\) ,如果是,更新\(n_i = n_i+1\)
  4. 转至2,直到没有误分类点

可以从对偶形式的计算式子中 看到,样本之间的计算都是\(x_i \cdot x_j\),其余计算都是N维向量的矩阵。其中N是样本个数,因此对偶形式适用于样本个数比特征空间的维数小的情况。

样本之间的內积计算,可以在一开始就计算存储为Gram矩阵,即\(G=[x_i \cdot x_j]_{N\times N}\),进行参数更新时之间查表即可,可以加快训练速度。

-------于2020年1月5日

猜你喜欢

转载自www.cnblogs.com/muyisun/p/12333173.html