[笔记-统计学习方法]感知机 perceptron

前几天认把感知机这一章读完了,顺带做了点笔记
现在把笔记做第三次的整理

零、总结

  1. 适用于具有线性可分的数据集的二分类问题,可以说是很局限了
  2. 感知机本质上是一个分离超平面
  3. 在向量维数(特征数)过高时,选择对偶形式算法
    在向量个数(样本数)过多时,应选择原始算法
  4. 批量梯度下降和随机梯度下降的区别和优势
    参考链接:随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比、实现对比
  • 批量梯度下降(BGD, Batch Gradient Descent)
    $ \theta \leftarrow \theta + \eta \sum \frac{\partial L}{\partial \theta}$
    即多次做全局样本的参数更新
    缺点:计算耗时
    优点:可以趋向全局最优,受数据噪音影响少
  • 随机梯度下降(SGD, Srochastic Gradient Descent)
    $ \theta \leftarrow \theta + \eta \frac{\partial L}{\partial \theta}$
    即多次做单个样本的参数更新
    缺点:训练耗时较短
    优点:不一定趋向全局最优(往往是最优/较优,单峰问题除外),受数据噪音影响大

一、模型

输入空间 $ \mathcal{X} \subseteq R^n $
输出空间 $ \mathcal{Y} \subseteq {-1, +1} $
假设空间 $ \mathcal{F} \subseteq {f|f(x) = \omega \cdot x + b} $
参数 $ \omega \in R^n, b \in R $
模型 $ f(x) = sign(\omega \cdot x + b) $

其中
符号函数为
\[ sign(x)=\left\{\begin{matrix} +1 , x \geqslant 0\\ -1 , x \geqslant 0 \end{matrix}\right. \]

线性方程
$ \omega \cdot x + b $
可以表示为特征空间 $ R^n $中的一个分离超平面

二、策略

(定义的损失函数,并极小化损失函数)
(注意损失函数非负的性质)

为了使损失函数更容易优化,我们选择误分类点到超平面的距离作为损失函数
任意向量\(x \in R^n\)距分离超平面的距离为
$ S=\frac{1}{|\omega|}|\omega \cdot x + b| $

接下来优化一下这个距离,让它更好的成为一个损失函数

  1. 为了连续可导,去绝对值
    $ S=-\frac{1}{|\omega|} y_i(\omega \cdot x + b) $
  2. 去掉不相关的系数(避免浪费计算),得到
    $ L(\omega, b)=-\sum_{x_i \in M} y_i(\omega \cdot x + b) $
    其中$ M $为误分类点集合

三、算法

(如何实现最优化问题)
注意最终训练出的模型参数的值取决于初值和误分类点的选取,所以一般值不同

为了极小化损失函数,我们采用梯度下降的方法

  1. 原始形式算法
  • 赋初值 $ \omega \leftarrow 0 , b \leftarrow 0 $
  • 选取数据点 $ (x_i, y_i) $
  • 判断该数据点是否为当前模型的误分类点,即判断若$ y_i(\omega \cdot x + b) <=0 $
    则更新
    \[ \begin{matrix} \omega &\leftarrow \omega + \eta n_ix_iy_i \\ b &\leftarrow b + \eta n_iy_i \end{matrix}\]
  1. 对偶形式算法
    注意到原始形式算法中,最终训练好的模型参数是这样的,其中$ n_i $表示在第i个数据点上更新过几次
    \[ \begin{matrix} \omega &= \eta \sum_i n_ix_iy_i \\ b &= \eta \sum_i n_iy_i \end{matrix} \]
    于是我们可以作出以下简化
  • 赋初值 $ n \leftarrow 0, b \leftarrow 0 $
  • 选取数据点 $ (x_i, y_i) $
  • 判断该数据点是否为当前模型的误分类点,即判断若$ y_i(\eta \sum n_iy_ix_i \cdot x + b) <=0 $
    则更新
    \[ \begin{matrix} n_i \leftarrow n_i + 1 \\ b &\leftarrow b + \eta y_i \end{matrix}\]
    为了减少计算量,我们可以预先计算式中的内积,得到Gram矩阵
    $ G=[x_i, x_j]_{N \times N} $
  1. 原始形式和对偶形式的选择
    相见知乎如何理解感知机学习算法的对偶形式?
    在向量维数(特征数)过高时,计算内积非常耗时,应选择对偶形式算法加速
    在向量个数(样本数)过多时,每次计算累计和(对偶形式中的\(\omega\))就没有必要,应选择原始算法

猜你喜欢

转载自www.cnblogs.com/tanglizi/p/8975081.html