感知机是二分类的线性分类器,其输入为实例的特征向量,输出为实例的类别,取+1和-1二值。感知机将特征空间中的实例划分为正负两类,属于判别模型。
感知机模型
模型
输入空间:X ⊆ R n \mathcal X\sube \bf R^nX⊆Rn
输出空间:Y = { + 1 , − 1 } \mathcal Y=\{+1,-1\}Y={+1,−1}
决策函数:f ( x ) = s i g n ( w ⋅ x + b ) f(x)=sign (w\cdot x+b)f(x)=sign(w⋅x+b)
其中sign是符号函数,即
s i g n ( x ) = { 1 , x ≥ 0 − 1 , x < 0 sign(x) = \begin{cases} 1,\qquad x \geq 0 \\-1, \qquad x < 0\end{cases}sign(x)={1,x≥0−1,x<0
感知机将特征空间中的实例划分为正负两类,属于判别模型。
模型的几何解释
线性方程:
w ⋅ x + b = 0 w\cdot x+b = 0w⋅x+b=0
对应特征空间R n \bf R^nRn 中的一个超平面 S \bf SS ,其中w ww 是超平面的法向量,b bb 是超平面的截距。
超平面将样本点分成两类。感知机的目标就是确定这个超平面。即确定模型的参数w , b w,bw,b ,这就需要一个损失函数,并将损失函数极小化。
损失函数
选择误分类点到超平面S \bf SS 的总距离作为损失函数。
首先,找出一个误分类点到超平面的距离
因为输入空间$\bf R^n $ 中任一点x 0 x_0x0到超平面S SS 的距离:
1 ∣ ∣ w ∣ ∣ ∣ w ⋅ x 0 + b ∣ \frac{1}{||w||}|w\cdot x_0 + b|∣∣w∣∣1∣w⋅x0+b∣
对于误分类点来说: w ⋅ x 0 + b w\cdot x_0 + bw⋅x0+b 与 y i y_iyi 总是符号相反。即:
− y i ( w ⋅ x 0 + b ) > 0 -y_i(w\cdot x_0 + b)>0−yi(w⋅x0+b)>0
所以一个误分类点到超平面之间的距离是:
− 1 ∣ ∣ w ∣ ∣ y i ( w ⋅ x 0 + b ) -\frac{1}{||w||} y_i(w\cdot x_0 + b)−∣∣w∣∣1yi(w⋅x0+b)
其次,假设所有的误分类点的集合是M MM,所以所有误分类点到平面的总距离为:
− 1 ∣ ∣ w ∣ ∣ ∑ x i ∈ M y i ( w ⋅ x i + b ) -\frac{1}{||w||}\sum_{x_i\in M}y_i(w\cdot x_i+b)−∣∣w∣∣1xi∈M∑yi(w⋅xi+b)
令∣ ∣ w ∣ ∣ = 1 ||w||=1∣∣w∣∣=1,得到损失函数:
L ( w , b ) = − ∑ x i ∈ M y i ( w ⋅ x i + b ) L(w,b)=-\sum_{x_i\in M}y_i(w\cdot x_i+b)L(w,b)=−xi∈M∑yi(w⋅xi+b)
注意:损失函数是非负的,若不存在误分类点,则损失函数为0。
有了损失函数,接下来就是极小化损失函数,确定模型参数。
学习算法
学习算法的原始形式
给定一个训练集:
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } x i ∈ X = R n , y i ∈ Y = { − 1 , + 1 } , i = 1 , 2 , … , N ; 0 < η ⩽ 1 T=\{(x_1,y_1),(x_2,y_2),\dots,(x_N,y_N)\} \\ x_i\in \mathcal X=\bf R^n, y_i\in \mathcal Y\it =\{-1,+1\}, i=1,2,\dots,N; 0<\eta\leqslant 1T={(x1,y1),(x2,y2),…,(xN,yN)}xi∈X=Rn,yi∈Y={−1,+1},i=1,2,…,N;0<η⩽1
求w , b w,bw,b,使得损失函数极小化:
min w , b L ( w , b ) = − ∑ x i ∈ M y i ( w ⋅ x i + b ) \min\limits_{w,b} L(w,b)=-\sum_{x_i\in M}y_i(w\cdot x_i+b)w,bminL(w,b)=−xi∈M∑yi(w⋅xi+b)
采用梯度下降算法。假设误分类点M是固定的。所以有:
∂ L ( w , b ) ∂ w = − ∑ x i ∈ M x i y i ∂ L ( w , b ) ∂ b = − ∑ x i ∈ M y i \frac{\partial L(w,b)}{\partial w} = -\sum_{x_i \in M} x_i y_i\\ \frac{\partial L(w,b)}{\partial b} = -\sum_{x_i \in M} y_i∂w∂L(w,b)=−xi∈M∑xiyi∂b∂L(w,b)=−xi∈M∑yi
对于每一个分类点,对w , b w,bw,b 进行更新:
w ← w + η y i x i b ← b + η y i w\leftarrow w+\eta y_ix_i \\ b\leftarrow b+\eta y_iw←w+ηyixib←b+ηyi
具体算法流程如下:
输入:
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } x i ∈ X = R n , y i ∈ Y = { − 1 , + 1 } , i = 1 , 2 , … , N ; 0 < η ⩽ 1 T=\{(x_1,y_1),(x_2,y_2),\dots,(x_N,y_N)\}\\ \\x_i\in \mathcal X=\bf R^n , y_i\in \mathcal Y\it =\{-1,+1\}, i=1,2,\dots,N; \ \ 0<\eta\leqslant 1T={(x1,y1),(x2,y2),…,(xN,yN)}xi∈X=Rn,yi∈Y={−1,+1},i=1,2,…,N; 0<η⩽1
输出:w , b ; f ( x ) = s i g n ( w ⋅ x + b ) w,b;f(x)=sign(w\cdot x+b)w,b;f(x)=sign(w⋅x+b)
- 选取初值w 0 , b 0 w_0,b_0w0,b0
- 训练集中选取数据( x i , y i ) (x_i,y_i)(xi,yi)
- 如果y i ( w ⋅ x i + b ) ⩽ 0 y_i(w\cdot x_i+b)\leqslant 0yi(w⋅xi+b)⩽0
w ← w + η y i x i b ← b + η y i w\leftarrow w+\eta y_ix_i \\ b\leftarrow b+\eta y_iw←w+ηyixib←b+ηyi
- 转至(2),直至训练集中没有误分类点
学习算法的对偶形式
对偶形式的基本思想是:将w ww和b bb表示为实例x i x_ixi和标记y i y_iyi的线性组合的形式,通过求解其系数而求得w ww和b bb。
回顾w , b w,bw,b 的更新过程:
w ← w + η y i x i b ← b + η y i w\leftarrow w+\eta y_ix_i \\ b\leftarrow b+\eta y_iw←w+ηyixib←b+ηyi
对于某一个误分类点( x i , y i ) (x_i,y_i)(xi,yi) 而言,他可能参与了n i n_ini次的w , b w,bw,b 的更新过程,直至超平面能使他成为正确分类点,他才不参与w , b w,bw,b 的更新。所以此误分类点对w , b w,bw,b 所贡献的增量分别为 $n_i\eta y_i x_i 和 和和n_i\eta y_i, 这 是 一 个 误 分 类 点 的 情 况 。 令 ,这是一个误分类点的情况。令,这是一个误分类点的情况。令\alpha_i = n_i\eta$,对于多个分类点,我们对其累加即可:
w = ∑ i = 1 N n i η y i x i = ∑ i = 1 N α i y i x i b = ∑ i = 1 N n i η y i = ∑ i = 1 N α i y i w = \sum_{i=1}^Nn_i\eta y_i x_i = \sum_{i=1}^N\alpha_i y_i x_i \\ b = \sum_{i=1}^Nn_i\eta y_i = \sum_{i=1}^N\alpha_i y_iw=i=1∑Nniηyixi=i=1∑Nαiyixib=i=1∑Nniηyi=i=1∑Nαiyi
这样我们就实现了将w ww和b bb表示为实例x i x_ixi和标记y i y_iyi的线性组合的形式
输入:
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } x i ∈ X = R n , y i ∈ Y = { − 1 , + 1 } , i = 1 , 2 , … , N ; 0 < η ⩽ 1 T=\{(x_1,y_1),(x_2,y_2),\dots,(x_N,y_N)\}\\ x_i\in \mathcal{X}=\bf{R}^n , y_i\in \mathcal{Y} =\{-1,+1\}, i=1,2,\dots, N; 0< \eta \leqslant 1T={(x1,y1),(x2,y2),…,(xN,yN)}xi∈X=Rn,yi∈Y={−1,+1},i=1,2,…,N;0<η⩽1输出:
α , b ; α = ( α 1 , α 2 , ⋯ , α N ) T f ( x ) = s i g n ( ∑ j = 1 N α j y j x j ⋅ x + b ) \alpha ,b;\quad\alpha=(\alpha_1,\alpha_2,\cdots,\alpha_N)^T \\f(x)=sign\left(\sum_{j=1}^N\alpha_jy_jx_j\cdot x+b\right)\\α,b;α=(α1,α2,⋯,αN)Tf(x)=sign(j=1∑Nαjyjxj⋅x+b)
- α ← 0 , b ← 0 \alpha \leftarrow 0,b\leftarrow 0α←0,b←0
- 训练集中选取数据( x i , y i ) (x_i,y_i)(xi,yi)
- 如果y i ( ∑ j = 1 N α j y j x j ⋅ x i + b ) ⩽ 0 y_i\left(\sum_{j=1}^N\alpha_jy_jx_j\cdot x_i+b\right) \leqslant 0yi(∑j=1Nαjyjxj⋅xi+b)⩽0
α i ← α i + η b ← b + η y i \alpha_i\leftarrow \alpha_i+\eta\\ b\leftarrow b+\eta y_iαi←αi+ηb←b+ηyi
- 转至(2),直至训练集中没有误分类点
Gram matrix
对偶形式中,训练实例仅以内积的形式出现。
为了方便可预先将训练集中的实例间的内积计算出来并以矩阵的形式存储,这个矩阵就是所谓的Gram矩阵
G = [ x i ⋅ x j ] N × N G=[x_i\cdot x_j]_{N\times N}G=[xi⋅xj]N×N
感知机不能用于异或
现感知机是一种线性分类模型。而异或可以表示为如下形式:
x 1 x_1x1 | x 2 x_2x2 | y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
由图可知,这个问题是线性不可分的,所以不能用感知机。