《统计学习方法》:感知机
感知机
感知机是二分类的线性分类模型,对应输出为 -1 和 +1。
1. 感知机模型
输入空间 $x \subseteq R^n $,输出空间 $ y = \{-1, +1\} $
输入空间到输出空间的映射函数:
其中 $\omega \in R^n$ 叫做权值,$b \in R$ 叫做偏置
2. 感知机学习策略
-
数据集的线性可分性
若存在某个超平面S,$\omega \cdot x + b = 0$,能够将数据集完全正确地划分到超平面地两侧,则称该数据集线性可分。
-
感知机学习策略
损失函数:1. 被误分类的点数; 2. 误分类的点到超平面的总距离
由于 损失函数1 不是 $\omega$ 和 $x$ 的连续可导函数,不易优化。
对于被误分类的点$x_i$,有$-y_i \cdot (\omega \cdot x_i + d) > 0$ ,故该点到超平面的距离为$- \frac{1}{||w||}y_i(wx_i + b)$,不考虑$\frac{1}{||w||}$则得到损失函数$L(w,b) = - \sum_{x_i \in M}y_i(wx_i + b)$,$M$为误分类点集合,显然该函数非负。
3. 感知机学习算法
-
原始形式
梯度:$\nabla {w}L(w,b) = - \sum y_ix_i \ \nabla _{b}L(w,b) = - \sum _{x_i \in w}y_i$
随机选取一个误分类点进行参数更新:$w \leftarrow w + ny_ix_i \ b \leftarrow b + ny_i$
算法流程:
(1) 选取初始值$w_0$,$b_0$
(2) 在训练集中选取数据$(x_i,y_i)$
(3) 若$y_i(w \cdot x_i + b) \leq 0$,更新参数
(4) 转至 (2) ,知道训练集中没有误分类点
-
算法的收敛性:
记$\hat{w} = (w_T,b)^T$,$\hat{x} = (x^T, 1)^T$
证1:设存在超平面$||\hat{w} {opt}|| = 1$,$\hat{w} \cdot \hat{x} = w_{opt} \cdot x + b_{opt} = 0$ 将训练数据集完全正确分开,则有 $\gamma > 0$ 对所有 $i = 1,2,3...N$ 使得 $y_i(\hat{w}_{opt} \cdot \hat{x}_i) \geq \gamma$
证2: 令 $R = max_{1 \leq i \leq N}||\hat{x}_i||$,感知机在训练集上的误分类次数 $k$ 满足:$k \leq (\frac{R}{\gamma})^2$
-
感知机的对偶形式
感知机输出:$f(x) = sign( \sum_{j = 1}^N \alpha_j y_j x_j \cdot x + b)$
(1) $\alpha \leftarrow 0$,$b \leftarrow 0$
(2) 从训练集中选取数据 ($x_i$,$y_i$)
(3) 若 $y_i ( \sum_{j = 1}^N \alpha_j y_j x_j \cdot x_i + b) \leq 0$:
$\alpha_i \leftarrow \alpha_i + n \ b \leftarrow b + n y_i$
(4) 转至 (2) 直到没有误分类数据。
4.代码实现
https://github.com/a74731248/statistical_learning_method/tree/master/perceptron