2.1 感知机模型
定义: 输入特征空间为\(\chi\subseteq R^n\), 输出空间为\(\mathcal{Y}=\{+1, -1\}\). 则由输入空间到输出空间的如下函数:
\[f(x) = sign(w\cdot x+b)\]
其中\[sign(x)=\left\{\begin{array}{cc} +1, & x\geq 0\\ -1, & x<0 \end{array}\right.\]
称为感知机. 是一种线性分类模型, 属于判别模型.
几何解释: 线性方程\(w\cdot x+b=0\)对应特征空间\(R^n\)中一个超平面\(S\), 其中\(w\)为其法向量, \(b\)为其截距. 超平面\(S\)将特征空间划分为两部分, 位于两部分的特征向量被分为正负两类.
2.2 感知机学习策略
在介绍感知机的学习方法之前, 需要知道感知机学习的前提假设是数据集是线性可分的, 即存在某个超平面\(S\)能够将数据集的正负例点完全正确地划分开, 对于所有\(y_i = +1\)的实例\(i\)有\(w\cdot x_i + b>0\), 对于所有\(y_i = -1\)的实例\(i\)有\(w\cdot x_i + b<0\).
假设训练数据集是线性可分的, 感知机学习的目标是确定\(w\), \(b\)从而得到一个可以正确划分训练集正负样本的分离超平面, 需要定义损失函数并将其极小化. 感知机所采用的损失函数是误分类点到超平面\(S\)的总距离.
首先, 特征空间\(R^n\)中任意一点\(x_0\)到超平面\(S\)的距离:
\[ d = \frac{1}{||w||} |w\cdot x_0 + b|\]
而对于误分类的点, 有\(-y_i(w\cdot x_i + b) > 0\), 所以, 误分类点\(x_i\)到超平面\(S\)的距离之和为:
\[-\frac{1}{||w||}\sum_{x_i\in M}{y_i(w\cdot x_i + b)}\]
其中\(M\)为超平面\(S\)误分类点集合. 忽略常数因子,得到感知机学习的损失函数为:
\[L(w,b)=-\sum_{x_i\in M}{y_i(w\cdot x_i + b)}\]
该损失函数就是感知机学习的经验风险函数, 显然\(L(w,b)\)是非负的, 若没有误分类点, 则损失函数为\(0\). 而且对于一个特定样本点的损失函数, 其在错误分类时是参数\(w\), \(b\)的线性函数, 在正确分类时为\(0\). 故损函数\(L(w,b)\)是\(w\), \(b\)的连续可导函数.
2.3 感知机学习算法
感知机学习问题转化为了求解损函数\(L(w,b)\)的最优化问题, 使用随机梯度下降法.
2.3.1 感知机学习算法的原始形式
问题: 给定训练数据集\(T=\{(x_1, y_1), (x_2, y_2),...,(x_N, y_N)\}\), 其中\(x_i \in \chi = R^n,y_i\in \mathcal{Y}=\{+1, -1\},i=1,2,...,N\), 求参数\(w\), \(b\), 使其为以下故损失函数极小化问题的解
\[\min_{w,b}{L(w,b)=-\sum_{x_i\in M}{y_i(w\cdot x_i + b)}}\]
其中\(M\)为错误分类点的集合.
初始时, 任意选择一个超平面\(w_0\), \(b_0\), 然后每次随机选取一个误分类点使其梯度下降. 损失函数的梯度为
\[ \begin{align*} \nabla_w L(w,b) &=-\sum_{x_i\in M}{y_i x_i}\\ \nabla_b L(w,b)&=-\sum_{x_i\in M}{y_i} \end{align*} \]
随机选择一个误分类点\((x_i, y_i)\), 对\(w\), \(b\)更新:
\[ \begin{align*} w &\leftarrow w+\eta y_i x_i \\ b &\leftarrow b+\eta y_i \end{align*} \]
其中\(\eta(0<\eta \leq 1)\)是步长, 即学习率. 迭代算法如下:
算法:
输入: 训练数据集\(T=\{(x_1, y_1), (x_2, y_2),...,(x_N, y_N)\}\), 其中\(x_i \in \chi = R^n,y_i\in \mathcal{Y}=\{+1, -1\},i=1,2,...,N\), 学习率\(\eta(0<\eta \leq 1)\);
输出: \(w\), \(b\); 感知机模型\(f(x) = sign(w\cdot x+b)\).
- 选取初值\(w_0\), \(b_0\)
- 在训练数据中选取\((x_i, y_i)\)
- 如果\(y_i(w \cdot x_i +b) \leq 0\)
\[ \begin{align*} w &\leftarrow w+\eta y_i x_i \\ b &\leftarrow b+\eta y_i \end{align*} \] - 转到2, 直到训练集中没有误分类点.
2.4 实现
python实现: eguilg/bluebook/perceptron