【ML模型详细推导3】- 感知机

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/KevinBetterQ/article/details/84331696

1. 一句话介绍感知机

· 一个二分类的线性分类模型。
· 感知机学习旨在求出将训练集数据进行线性划分的分类超平面,导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得模型。
· 分为原始形式和对偶形式。

2. 模型介绍(原始形式)

前提:数据集要求线性可分性
- 模型:
f ( x ) = s i g n ( w x + 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.

- 损失函数(学习策略)
损失函数,误分类点到超平面的“函数间隔”和:
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) 其中, M M 为误分类的集合。

函数间隔待了解
(Q1:什么是函数间隔,和几何间隔的区别)

- 随机梯度下降(学习算法)

随机梯度下降法,最小化损失函数 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 \\ b L ( w , b ) = x i M y i \triangledown _bL(w,b)=-\sum _{x_i\in M}y_i
随机选取一个数据点 ( x i , y i ) (x_i,y_i) ,判断其是否误分类,也就是判断 y i ( w x + b ) < 0 y_i\cdot(wx+b)<0 与否
y i f ( x ) < 0 y_i f(x)<0 ,对 w , b w,b 进行更新:
w w + η y i x i w\leftarrow w+\eta y_ix_i b b + η y i b\leftarrow b+\eta y_i 其中, η \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)\} 全部代入进行随机下降,若第 i 个样本用的次数为 n i n_i ,则最后训练出的 w w b b
w = i = 1 N n i η y i x i w = \sum _{i=1}^{N}n_i\eta y_ix_i b = i = 1 N n i η y i b = \sum _{i=1}^{N}n_i\eta y_i

w w 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)
此时,参数就由 w w b b ,变为了 n 1 , n 2 n N n_1, n_2 … n_N
所以要求 f(x) ,就要求出 n i n_i

- 策略:
从训练集中选数据,直到没有误分类点

- 算法:
从训练集中选数据,直到没有误分类点
1)初始化 n i = 0 \forall n_i=0
2)在训练集选数据 ( x i , y i ) (x_i,y_i)
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 ,代表分错了,更新 n i = n i + 1 n_i = n_i+1
4)转到2直到没有误分类数据

为何会有对偶形式?(对偶形式的好处):
 对偶形式的目的是降低运算量,但是并不是在任何情况下都能降低运算量,而是在特征空间的维度很高时才起到作用。
  设样本特征维度为n,样本数量为m,m相对于n很小,也就是特征维度很高:
  首先考虑原始的感知机学习算法,每一轮迭代至少要判断某个输入实例是不是误判点,也就是要计算 是否 y i ( w x + b ) < 0 y_i\cdot(wx+b)<0 。这里的运算量主要集中在 w x wx 的内积计算上,时间复杂度为 O ( m ) O(m) ,由于特征维度m很大,所以会很慢。
  在对偶形式的学习算法中,判断输入实例 ( x i , y i ) (x_i,y_i) 是否误判的条件变换为 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 。可以看到这里所有的输入实例都仅仅以内积的形式 x j x i x_jx_i 出现,可以预先计算输入实例两两之间的内积,得到所谓的Gram矩阵 G = [ x i x j ] N N G=[x_ix_j]_{N*N} ,这样一来,每次误判检测时直接在Gram矩阵里查表就能拿到内积 x j x i x_jx_i ,所以这个误判检测的时间复杂度是 O ( n ) O(n)
  可以看出,对偶形式的感知机,把每轮迭代的时间复杂度的从特征维度m转移到了训练集大小n上,那么对于维度非常高的空间,运算量自然就降低了。


参考:
1.《统计学习方法》李航
2. 知乎回答:如何理解感知机学习算法的对偶形式

猜你喜欢

转载自blog.csdn.net/KevinBetterQ/article/details/84331696