1. 一句话介绍感知机
· 一个二分类的线性分类模型。
· 感知机学习旨在求出将训练集数据进行线性划分的分类超平面,导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得模型。
· 分为原始形式和对偶形式。
2. 模型介绍(原始形式)
前提:数据集要求线性可分性
- 模型:
f
(
x
)
=
s
i
g
n
(
w
x
+
b
)
f(x)=sign(wx+b)
f(x)=sign(wx+b)
其
中
,
s
i
g
n
(
x
)
=
{
+
1
,
x
⩾
0
−
1
x
<
0
其中,sign(x)=\left\{\begin{matrix} +1,& x\geqslant 0 & \\ -1 & x<0& \end{matrix}\right.
其中,sign(x)={+1,−1x⩾0x<0
- 损失函数(学习策略)
损失函数,误分类点到超平面的“函数间隔”和:
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(
w
x
i
+
b
)
L(w,b) = -\sum_{x_i\in M}y_i (wx_i+b)
L(w,b)=−xi∈M∑yi(wxi+b)其中,
M
M
M为误分类的集合。
函数间隔待了解
(Q1:什么是函数间隔,和几何间隔的区别)
- 随机梯度下降(学习算法)
随机梯度下降法,最小化损失函数
L
(
w
,
b
)
L(w,b)
L(w,b)
梯度:
▽
w
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
x
i
\triangledown _wL(w,b)=-\sum _{x_i\in M}y_i x_i \\
▽wL(w,b)=−xi∈M∑yixi
▽
b
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
\triangledown _bL(w,b)=-\sum _{x_i\in M}y_i
▽bL(w,b)=−xi∈M∑yi
随机选取一个数据点
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi),判断其是否误分类,也就是判断
y
i
⋅
(
w
x
+
b
)
<
0
y_i\cdot(wx+b)<0
yi⋅(wx+b)<0与否
若
y
i
f
(
x
)
<
0
y_i f(x)<0
yif(x)<0,对
w
,
b
w,b
w,b 进行更新:
w
←
w
+
η
y
i
x
i
w\leftarrow w+\eta y_ix_i
w←w+ηyixi
b
←
b
+
η
y
i
b\leftarrow b+\eta y_i
b←b+ηyi其中,
η
\eta
η为学习率。
感知机学习算法是误分类驱动的,这样,因为数据线性可分,通过迭代可以直至训练集中没有误分类点。
3. 感知机的对偶形式
- 模型:
将训练集
{
(
x
1
,
y
1
)
(
x
2
,
y
2
)
…
(
x
i
,
y
i
)
}
\{(x_1,y_1)(x_2,y_2)…(x_i,y_i)\}
{(x1,y1)(x2,y2)…(xi,yi)}全部代入进行随机下降,若第 i 个样本用的次数为
n
i
n_i
ni ,则最后训练出的
w
w
w和
b
b
b:
w
=
∑
i
=
1
N
n
i
η
y
i
x
i
w = \sum _{i=1}^{N}n_i\eta y_ix_i
w=i=1∑Nniηyixi
b
=
∑
i
=
1
N
n
i
η
y
i
b = \sum _{i=1}^{N}n_i\eta y_i
b=i=1∑Nniηyi
将
w
w
w 和
b
b
b 带入感知机原始形式得对偶形式:
f
(
x
)
=
s
i
g
n
(
∑
j
=
1
N
n
j
η
y
j
x
j
⋅
x
+
∑
j
=
1
N
n
j
η
y
j
)
f(x) = sign(\sum _{j=1}^{N}n_j\eta y_jx_j \cdot x+ \sum _{j=1}^{N}n_j\eta y_j)
f(x)=sign(j=1∑Nnjηyjxj⋅x+j=1∑Nnjηyj)
此时,参数就由
w
w
w 和
b
b
b ,变为了
n
1
,
n
2
…
n
N
n_1, n_2 … n_N
n1,n2…nN
所以要求 f(x) ,就要求出
n
i
n_i
ni
- 策略:
从训练集中选数据,直到没有误分类点
- 算法:
从训练集中选数据,直到没有误分类点
1)初始化
∀
n
i
=
0
\forall n_i=0
∀ni=0
2)在训练集选数据
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)
3)若
y
i
⋅
(
∑
j
=
1
N
n
j
η
y
j
x
j
⋅
x
i
+
∑
j
=
1
N
n
j
η
y
j
)
<
0
y_i\cdot(\sum _{j=1}^{N}n_j\eta y_jx_j \cdot x_i+ \sum _{j=1}^{N}n_j\eta y_j)<0
yi⋅(∑j=1Nnjηyjxj⋅xi+∑j=1Nnjηyj)<0,代表分错了,更新
n
i
=
n
i
+
1
n_i = n_i+1
ni=ni+1
4)转到2直到没有误分类数据
为何会有对偶形式?(对偶形式的好处):
对偶形式的目的是降低运算量,但是并不是在任何情况下都能降低运算量,而是在特征空间的维度很高时才起到作用。
设样本特征维度为n,样本数量为m,m相对于n很小,也就是特征维度很高:
首先考虑原始的感知机学习算法,每一轮迭代至少要判断某个输入实例是不是误判点,也就是要计算 是否 y i ⋅ ( w x + b ) < 0 y_i\cdot(wx+b)<0 yi⋅(wx+b)<0。这里的运算量主要集中在 w x wx wx的内积计算上,时间复杂度为 O ( m ) O(m) O(m),由于特征维度m很大,所以会很慢。
在对偶形式的学习算法中,判断输入实例 ( x i , y i ) (x_i,y_i) (xi,yi)是否误判的条件变换为 y i ⋅ ( ∑ j = 1 N n j η y j x j ⋅ x i + ∑ j = 1 N n j η y j ) < 0 y_i\cdot(\sum _{j=1}^{N}n_j\eta y_jx_j \cdot x_i+ \sum _{j=1}^{N}n_j\eta y_j)<0 yi⋅(∑j=1Nnjηyjxj⋅xi+∑j=1Nnjηyj)<0。可以看到这里所有的输入实例都仅仅以内积的形式 x j x i x_jx_i xjxi 出现,可以预先计算输入实例两两之间的内积,得到所谓的Gram矩阵 G = [ x i x j ] N ∗ N G=[x_ix_j]_{N*N} G=[xixj]N∗N,这样一来,每次误判检测时直接在Gram矩阵里查表就能拿到内积 x j x i x_jx_i xjxi ,所以这个误判检测的时间复杂度是 O ( n ) O(n) O(n)
可以看出,对偶形式的感知机,把每轮迭代的时间复杂度的从特征维度m转移到了训练集大小n上,那么对于维度非常高的空间,运算量自然就降低了。
参考:
1.《统计学习方法》李航
2. 知乎回答:如何理解感知机学习算法的对偶形式