感知机概述
感知机是二类分类的线性模型,输入为实例的特征向量,输出为实例的类别,取+1和-1两个值。感知机本质对应于输入空间的一个超平面,通过将正负两类通过一个超平面划分开来,属于判别式模型。
感知机模型
假设输入空间(特征空间)是 χ ⫅ R n \chi \subseteqq R^n χ⫅Rn 输出空间是 y = { + 1 , − 1 } y=\{+1,-1\} y={+1,−1} 。输入 x ∈ χ x\in \chi x∈χ表示实例的特征向量,对应于输入空间的点;输出$ y \in Y$表示实例的类别。由输入空间到输出空间的如下函数 f ( x ) = s i g n ( w ⋅ x + b ) f(x)=sign(w \cdot x +b) f(x)=sign(w⋅x+b) 称为感知机。其中 w w w 和 b b b称为感知机模型参数, w ∈ R n w\in R^n w∈Rn 叫做权值或者权重向量, b ∈ R b\in R b∈R 叫做偏置, w ⋅ x w\cdot x w⋅x 表示 w w w和 x x x的内积, s i g n sign sign是符号函数,即 s i g n ( x ) = { + 1 , x ⩾ 0 − 1 , x < 0 sign(x)=\left\{\begin{array}{cc}+1, & x \geqslant0 \\-1, & \ x<0\end{array}\right. sign(x)={+1,−1,x⩾0 x<0
感知机学习策略
数据集的要求
运用感知机模型首先要求数据集是线性可分的,即通俗的说就是对于给定的数据集,存在这样一个超平面,能够将数据集的正实例点(y=+1)和负实例点(y=-1)完全正确的划分到超平面的两侧,这样就称为数据集是线性可分的。
形式化定义:
给定一个数据集, T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) . . . ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2)...(x_N,y_N)\} T={(x1,y1),(x2,y2)...(xN,yN)}其中 x i ∈ χ = R n , y i ∈ γ = { + 1 , − 1 } , i = 1 , 2 , . . . N , x_i \in \chi=R^n,y_i \in \gamma=\{ +1,-1\},i=1,2,...N, xi∈χ=Rn,yi∈γ={+1,−1},i=1,2,...N,如果存在某个超平面S,对所有 y i = + 1 y_i=+1 yi=+1的实例 i i i有 w ⋅ x i + b > 0 w \cdot x_i+b>0 w⋅xi+b>0,对所有 y i = − 1 y_i=-1 yi=−1的实例 i i i有 w ⋅ x i + b < 0 w \cdot x_i+b<0 w⋅xi+b<0。则称数据集T为线性可分数据集,否则为线性不可分。
学习策略(损失函数最小化策略)
感知机 s i g n ( w ⋅ x + b ) sign(w\cdot x+b) sign(w⋅x+b)学习的损失函数定义为: L ( w , b ) = − ∑ x i ∈ M y i ( w ⋅ x + b ) L(w,b)=-\sum_{x_i \in M}y_i(w\cdot x+b) L(w,b)=−xi∈M∑yi(w⋅x+b)其中 M M M为误分类点的集合。
这个损失函数的基本思想就是通过衡量误分类点距离超平面的总距离来计算,实际上计算了感知机器学习的经验风险函数。直观来看,如果没有误分类点,损失函数就是0,而且误分类点越少,离超平面越近。损失函数值就越少。
注:任意一点到超平面的距离公式为 1 ∣ ∣ w ∣ ∣ ∣ w ⋅ x + b ∣ \frac{1}{||w||}|w\cdot x+b| ∣∣w∣∣1∣w⋅x+b∣这里 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣是 w w w的 L 2 L_2 L2范数。在构造感知机学习损失函数时不考虑 1 ∣ ∣ w ∣ ∣ \frac{1}{||w||} ∣∣w∣∣1
感知机学习算法
感知机学习算法有一个直观的理解,当一个实例被误分类时其位于分离超平面错误的一侧,我们通过调整 w , b w,b w,b的值使得超平面向该误分类点的一侧移动,以减少该误分类点与超平面的距离,直到超平面越过该点,使其被正确分类。
原始形式
输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) . . . ( x N , y N ) } ; T=\{(x_1,y_1),(x_2,y_2)...(x_N,y_N)\}; T={(x1,y1),(x2,y2)...(xN,yN)};其中 x i ∈ χ = R n , y i ∈ γ = { + 1 , − 1 } , i = 1 , 2 , . . . N x_i \in \chi=R^n,y_i \in \gamma=\{ +1,-1\},i=1,2,...N xi∈χ=Rn,yi∈γ={+1,−1},i=1,2,...N;学习率 η ( 0 < η ⩽ 1 ) \eta(0<\eta\leqslant1) η(0<η⩽1)
输出: w , b ; w,b; w,b;感知机模型 f ( x ) = s i g n ( w ⋅ x + b ) f(x)=sign(w\cdot x+b) f(x)=sign(w⋅x+b)
(1)选取初始值 w 0 , b 0 w_0,b_0 w0,b0
(2)在训练集中选取数据 ( x i , y i ) (x_i,y_i) (xi,yi)
(3)如果 y i ( w ⋅ x i + b ) ⩽ 0 y_i(w\cdot x_i+b)\leqslant0 yi(w⋅xi+b)⩽0, w ← w + η y i x i w\gets w+\eta y_ix_i w←w+ηyixi b ← b + η y i b\gets b+\eta y_i b←b+ηyi
(4)转至(2),直至训练集中没有误分类点
对偶形式
输入:线性可分数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) . . . ( x N , y N ) } ; T=\{(x_1,y_1),(x_2,y_2)...(x_N,y_N)\}; T={(x1,y1),(x2,y2)...(xN,yN)};其中 x i ∈ χ = R n , y i ∈ γ = { + 1 , − 1 } , i = 1 , 2 , . . . N x_i \in \chi=R^n,y_i \in \gamma=\{ +1,-1\},i=1,2,...N xi∈χ=Rn,yi∈γ={+1,−1},i=1,2,...N;学习率 η ( 0 < η ⩽ 1 ) \eta(0<\eta\leqslant1) η(0<η⩽1)
输出: α , b ; \alpha,b; α,b;感知机模型 f ( x ) = s i g n ( ∑ j = i N α j y j x j ⋅ x + b ) f(x)=sign(\sum_{j=i}^{N}\alpha_jy_jx_j\cdot x+b) f(x)=sign(∑j=iNαjyjxj⋅x+b),其中 α = ( α 1 , α 2 , . . . α N ) T \alpha = (\alpha_1,\alpha_2,...\alpha_N)^T α=(α1,α2,...αN)T
(1) α ← 0 , b ← 0 \alpha\gets0,b\gets0 α←0,b←0
(2)在训练数据集中选取数据 ( x i , y i ) (x_i,y_i) (xi,yi)
(3)如果 y i ( ∑ j = 1 N α j y j x j ⋅ x i + b ) ⩽ 0 y_i(\sum_{j=1}^{N}\alpha_jy_jx_j\cdot x_i+b)\leqslant0 yi(∑j=1Nαjyjxj⋅xi+b)⩽0, α i ← α i + η \alpha_i\gets\alpha_i+\eta αi←αi+η b ← b + η y i b\gets b+\eta y_i b←b+ηyi
(4)转至(2)直至没有误分类数据
联系与区别
在最开始看到两种形式的感知机学习算法时有点不明白为什么会在原始形式上发展出对偶形式,因为虽然对偶形式的算法可以通过提前计算一些变量来获得一定的加速,但是本质上还是要迭代更新权重来进行训练。
后来明白这是由于从不同的角度去解决问题而给出的算法,对偶通俗理解即从不同角度去解答相似问题,但问题的解是相通的,甚至是一样的。另外感知机的对偶算法在特征维度很高时提升性能的效果很明显,由于可以提前计算出
x
j
⋅
y
j
x_j\cdot y_j
xj⋅yj这样每次在判断误分类时可以直接查找表中数据,不用重新计算两者内积。例如对于特征向量维度为N的数据集,可以把每次的
N
⋅
N
N\cdot N
N⋅N运算降低到
N
N
N
详细可以阅读知乎回答如何理解感知机学习算法的对偶形式?