最近在重新看李航的统计学习方法,总结下每章的内容。
基本概念
感知机定义 :
输入空间(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 (sumlimits_{i=1} limits^{N} n_i hy_ix_i cdot x_j + sumlimits_{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 imes N}),进行参数更新时之间查表即可,可以加快训练速度。
-------于2020年1月5日