zoukankan      html  css  js  c++  java
  • 感知机算法及其对偶形式

    最近在重新看李航的统计学习方法,总结下每章的内容。

    基本概念

    感知机定义

    输入空间(chi subseteq R^n),输出空间是(Y={+1,-1}),输入(x in chi),表示实例的特征向量,对应于输入空间的点;输出(y in Y),是该实例的类别。有输入空间到输出空间的映射函数决定:

    [f(x)=sign(w cdot x+b) ]

    其中(sign(x))表示符号函数。(x)非负时为+1,否则是-1。

    注:维基百科上(sign(x))函数在(x=0)处取值定义为0,该函数简写为(sgn(x)),但《统计学习方法》中符号函数在0处取值定义为1,《机器学习》(周志华)中p98定义(sgn(x))为阶跃函数,在所有自变量非正时都取0。

    感知机是线性分类模型,判别模型。可以用超平面(wx+b=0)解释,该平面将空间分为两部分,即正负两类别。

    数据集的线性可分性

    是指存在某个超平面(wx+b=0)可以完整地将数据集的正负实例点划分到两边。对(y_i=+1)的样本,都有(w_ix+b>0),而所有(y_i=-1)的样本,都有(w_ix+b<0)。这种数据集称为线性可分数据集。

    感知机的学习策略

    输入空间中的任意点(x_0)到超平面(S)的距离定义是(frac 1 {||w||} |wx_0+b|),其中(||w||)表示(w)(L_2)范数。

    所有误分类的数据都满足不等式(-y_i(wx_i+b)>0),这是显然的,因为实例类别和计算的值异号。而(y_i)的取值是(pm1),因此误分类点到超平面的距离可以写成(-frac 1 {||w||} y_i(wx_i+b)),距离公式里绝对值是正时,$ -y_i$是正1,反之是负1,从而把绝对值符号去掉。

    数据集中所有的误分类点集合是(M),则全部误分类点到超平面的总距离是

    [-frac 1 {||w||} sum limits_{x_i in M}y_i(wx_i+b) ]

    不考虑前面的(||w||),定义感知机的损失函数为$ L(w,b)= -sum limits_{x_i in M}y_i(wx_i+b)$

    损失函数的特点:非负,且显然误分类点越少,或误分类点离超平面越近,损失函数值越小。直到没有误分类点时损失函数值为0。

    感知机的学习策略就是在假设空间寻找(w,b)让对该数据集的所有点,损失函数最小。

    学习算法

    优化损失函数的方法有很多,最简单是梯度下降。对感知机的损失函数,两个参数的梯度

    [ abla_w L(w,b) = -sum limits_{x_i in M} y_i*x_i\ abla_b L(w,b) = -sum limits_{x_i in M} y_i ]

    所以每次更新两个参数的迭代式子是(w =w+h*y_i*x_i)(b= b+h*y_i),其中(h)是步长,范围在0到1之间,又称为学习率。

    感知机学习算法的原始形式步骤:

    1. 选取初值(w_0,b)

    2. 在训练集中选取数据((x_i,y_i))

    3. 如果该数据是误分类点,即(y_i(wx_i+b)le 0) ,更新参数

      [w =w+h*y_i*x_i\b= b+h*y_i ]

    4. 转向2. ,直到没有误分类点,或者达到训练轮次。

    上述步骤被称为感知机学习算法的原始形式。

    感知机算法的对偶形式

    和原始形式并无太大差别,但是可以加速训练。

    对偶形式的思想:将(w)(b)看作是实例和标签的线性组合。对于每一个样本((x_i,y_i)),在更新过程中使用了(n_i)次,即总次循环中,有(n_i)次中将该样本作为了误分类点,故用它去更新参数。而一共有N个样本。

    原始形式(w =w+h*y_i*x_i)(b= b+h*y_i)就可以写成

    [w=sumlimits_{i=1} limits^{N} n_i hy_ix_i \b = sumlimits_{i=1} limits^{N} n_ihy_i ]

    则,感知机模型化为

    [f(x)=sign(wcdot x+b)=sign(sumlimits_{i=1} limits^{N} n_i hy_ix_i cdot x + sumlimits_{i=1} limits^{N} n_ihy_i) ]

    学习目标变成了(n_i)

    训练过程如下:

    1. 学习参数(n=(n_1,n_2,....n_N)) ,初始赋值全部是0
    2. 在数据集中选取数据((x_j,y_j))
    3. 判断是不是误分类点,即(y_j (sumlimits_{i=1} limits^{N} n_i hy_ix_i cdot x_j + sumlimits_{i=1} limits^{N} n_ihy_j) le 0) ,如果是,更新(n_i = n_i+1)
    4. 转至2,直到没有误分类点

    可以从对偶形式的计算式子中 看到,样本之间的计算都是(x_i cdot x_j),其余计算都是N维向量的矩阵。其中N是样本个数,因此对偶形式适用于样本个数比特征空间的维数小的情况。

    样本之间的內积计算,可以在一开始就计算存储为Gram矩阵,即(G=[x_i cdot x_j]_{N imes N}),进行参数更新时之间查表即可,可以加快训练速度。

    -------于2020年1月5日

  • 相关阅读:
    【L.M.W.Y.D】Scrum Meeting 5
    【L.M.W.Y.D】Scrum Meeting 4
    多喝热水 实验十 团队作业6:团队项目用户验收&Beta冲刺
    多喝热水【Beta】Scrum meeting 4
    多喝热水【Beta】Scrum meeting 3
    多喝热水【Beta】Scrum meeting 2
    多喝热水【Beta】Scrum meeting 1
    多喝热水 实验九 团队作业5:团队项目编码与Alpha冲刺
    多喝热水 [Alpha] Scrum Meeting 7
    多喝热水 [Alpha] Scrum Meeting 6
  • 原文地址:https://www.cnblogs.com/muyisun/p/12333173.html
Copyright © 2011-2022 走看看