感知机算法及其对偶形式
最近在重新看李航的统计学习方法,总结下每章的内容。
基本概念
感知机定义 :
输入空间\(\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\),则全部误分类点到超平面的总距离是
不考虑前面的\(||w||\),定义感知机的损失函数为$ L(w,b)= -\sum \limits_{x_i \in M}y_i(wx_i+b)$
损失函数的特点:非负,且显然误分类点越少,或误分类点离超平面越近,损失函数值越小。直到没有误分类点时损失函数值为0。
感知机的学习策略就是在假设空间寻找\(w,b\)让对该数据集的所有点,损失函数最小。
学习算法
优化损失函数的方法有很多,最简单是梯度下降。对感知机的损失函数,两个参数的梯度
所以每次更新两个参数的迭代式子是\(w =w+h*y_i*x_i\)和\(b= b+h*y_i\),其中\(h\)是步长,范围在0到1之间,又称为学习率。
感知机学习算法的原始形式步骤:
-
选取初值\(w_0,b\)
-
在训练集中选取数据\((x_i,y_i)\)
-
如果该数据是误分类点,即\(y_i(wx_i+b)\le 0\) ,更新参数
\[w =w+h*y_i*x_i\\b= b+h*y_i \] -
转向2. ,直到没有误分类点,或者达到训练轮次。
上述步骤被称为感知机学习算法的原始形式。
感知机算法的对偶形式
和原始形式并无太大差别,但是可以加速训练。
对偶形式的思想:将\(w\)和\(b\)看作是实例和标签的线性组合。对于每一个样本\((x_i,y_i)\),在更新过程中使用了\(n_i\)次,即总次循环中,有\(n_i\)次中将该样本作为了误分类点,故用它去更新参数。而一共有N个样本。
原始形式\(w =w+h*y_i*x_i\)和\(b= b+h*y_i\)就可以写成
则,感知机模型化为
学习目标变成了\(n_i\)。
训练过程如下:
- 学习参数\(n=(n_1,n_2,....n_N)\) ,初始赋值全部是0
- 在数据集中选取数据\((x_j,y_j)\)
- 判断是不是误分类点,即\(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\)
- 转至2,直到没有误分类点
可以从对偶形式的计算式子中 看到,样本之间的计算都是\(x_i \cdot x_j\),其余计算都是N维向量的矩阵。其中N是样本个数,因此对偶形式适用于样本个数比特征空间的维数小的情况。
样本之间的內积计算,可以在一开始就计算存储为Gram矩阵,即\(G=[x_i \cdot x_j]_{N\times N}\),进行参数更新时之间查表即可,可以加快训练速度。
-------于2020年1月5日