• 机器学习之支持向量机SVM


    支持向量机(support vector machine,SVM)是一种二分类模型。它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使其有别于感知机。支持向量机还包括核技巧,使它成为实质上的非线性分类器。支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划问题,也等价于正则化的合页损失函数的最小化问题。支持向量机的学习算法是求解凸二次规划的最优化算法。

    1. 线性可分支持向量机与硬间隔最大化

    1.1 线性可分支持向量机

    考虑一个二分类问题,假设输入空间与特征空间为两个不同的空间。输入空间为欧式空间或离散集合,特征空间为欧式空间或希尔伯特空间。线性可分支持向量机、线性支持向量机假设这两个空间的元素一一对应。并将输入空间的输入映射为输出空间的特性向量。非线性支持向量机利用一个从输入空间到特征空间的非线性映射将输入映射为特性向量。所以,输入都由输入空间转换到特性空间,支持向量机的学习是在特征空间进行的。

    假设给定一个特征空间上的训练数据集如下:

    $T=left { left ( x_{1},y_{1} ight ),left ( x_{2},y_{2} ight ),...,left ( x_{N},y_{N} ight ) ight }$

    其中,$x_{i}in chi =mathbb{R}^{n}, y_{i}in u =left { +1, -1 ight }, i=1,2,...,N$,$x_{i}$为第$i$个特征向量,也称为实例,$y_{i}$为$x_{i}$的类标记,当$y_{i}=+1$时,称$x_{i}$为正例;当$y_{i}=-1$时,称$x_{i}$为负例,$left ( x_{i},y_{i} ight )$称为样本点。假设训练数据集是线性可分的。

    学习目标是在特征空间中找到一个分离超平面,能将实例分到不同的类。分离超平面的方程为$wcdot x+b=0$,其由法向量$w$和截距$b$决定,可表示为$(w, b)$。法向量指向的一侧表示分类的正类,另一侧为负类。

    当数据集是线性可分时,会存在无穷多个超平面分离两类数据。我们知道的感知机是利用误差分类最小的策略求得超平面的,因此这样的超平面有无穷多个。而本章节的线性可分支持向量机利用间隔最大化求得最优的分离超平面,此时,解是唯一的。线性可分支持向量机的定义如下:

    定义:

    给线性可分训练数据集,通过间隔最大化获等价地求解相应的凸二次规划问题学习得到分离超平面为:

    $w^{*}cdot x+b^{*}=0$

    以及相应的分类决策函数为:

    $f(x)=sign(w^{*}cdot x+b^{*})$

    称为线性可分支持向量机。

    至于间隔最大化的约束,在下面章节介绍。

    1.2函数间隔和几何间隔

    一个点距离分离超平面的远近程度可以表示为分类预测的置信度。在超平面$wcdot x+b=0$确定的情况下,$left | wcdot x+b ight |$能够相对地表示点到超平面的距离。而$wcdot x+b$的符号与分类标记$y$的符号是否一致能够表示分类是否正确。所以可用$y(wcdot x+b)$来表示分类的正确性以及确信度,这就是函数间隔(functional margin)。定义如下:

    (函数间隔定义)

    对于给定的训练数据及$T$和超平面$(w, b)$,定义超平面$(w, b)$关于样本点$(x_{i},y_{i})$的函数间隔为:

    $hat{gamma_{i}}=y_{i}(wcdot x_{i}+b)$

    定义超平面$(w, b)$关于训练数据集$T$的函数间隔为超平面$(w, b)$关于$T$中所有样本点$(x_{i},y_{i})$的函数间隔的最小值,即:

    $hat{gamma }=underset{i=1,...,N}{min}hat{gamma _{i}}$

    函数间隔可以表示分类预测的正确性和确信度,但是还是有缺陷。因为只要$w$和$b$比例性地改变,例如将它们改成$2w$和$2b$,超平面没有改变,但是函数间隔却成为了原来的2倍。这一事实启示我们,可以对分离超平面的法向量$w$进行约束,如规范化,$left | w ight |=1$,是的间隔数确定的,这是函数间隔称为几何间隔(geometric margin)。

    由前面介绍的,可以计算点到超平面的距离:

    $gamma _{i}=frac{w}{left | w ight |}cdot x_{i}+frac{b}{left | w ight |}$

    其中,$left | w ight |$为$w$的$L_{2}$范数。上述为点在平面正的一侧的情形,反之如果点在超平面负的一侧,即$y_{i}=-1$,那么点与超平面的距离表示为:

    $gamma _{i}=-(frac{w}{left | w ight |}cdot x_{i}+frac{b}{left | w ight |})$。

    一般地,当样本点$(x_{i},y_{i})$被超平面$(w, b)$正确分类时,点$x_{i}$与超平面$(w, b)$的距离表示为:

    $gamma _{i}=y_{i}(frac{w}{left | w ight |}cdot x_{i}+frac{b}{left | w ight |})$

    (几何间隔定义)

    对于给定的训练数据及$T$和超平面$(w, b)$,定义超平面$(w, b)$关于样本点$(x_{i},y_{i})$的几何间隔为:

    $gamma _{i}=y_{i}(frac{w}{left | w ight |}cdot x_{i}+frac{b}{left | w ight |})$

    定义超平面$(w, b)$关于训练数据集$T$的几何间隔为超平面$(w, b)$关于$T$中所有样本点$(x_{i},y_{i})$的几何间隔的最小值,即:

    $gamma =underset{i=1,...,N}{min}gamma _{i}$

    1.3间隔最大化

    支持向量机学习的基本思想是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。对于线性可分的数据集而言,线性可分分离超平面有无穷多个(等价于感知机),但是几个间隔最大的分离超平面是唯一的。这里的间隔最大化又称之为硬间隔最大化(与后面讨论的训练数据集近似线性可分时的软间隔最大化相对应)。

    1.3.1最大间隔分离超平面

    可以将求解几何间隔最大化的分离超平面,即最大间隔分离超平面,可以使用下面的约束最优化问题:

    $underset{w,b}{max} gamma $

    s.t. $y_{i}(frac{w}{left | w ight |}cdot x_{i}+frac{b}{left | w ight |})geqslant gamma ,i=1,2,...,N$

    即希望最大化超平面$(w, b)$关于训练数据集的几何间隔$gamma$,约束条件表示的是超平面$(w, b)$关于每个样本点的几何间隔至少是$gamma$。

    考虑到几何间隔和函数几个之间的关系,可将问题改写为:

    $underset{w,b}{max} frac{hat{gamma }}{left | w ight |}$

    s.t. $y_{i}(wcdot x_{i}+b)geqslant hat{gamma }, i=1,2,...,N$

    函数间隔$hat{gamma }$的取值并不影响最优化问题的解。事实上,假设将$w$和$b$按比例改变成$lambda w$和$lambda b$,这时函数间隔为$lambda hat{gamma }$。函数间隔的这一改变对上面最优化问题的不等式约束没有影响,对目标函数的优化也没有影响,即它产生一个等价地最优化问题。这样,可以取$hat{gamma }=1$。将$hat{gamma }=1$代入上面的最优化问题,同时注意到最大化$frac{1}{left | w ight |}$和最小化$frac{1}{2}left | w ight |^{2}$是等价的,于是就得到下面的线性可分支持向量机学习的最优化问题:

    $underset{w,b}{min}frac{1}{2}left | w ight |^{2}$

    s.t.    $y_{i}(wcdot x_{i}+b)-1geqslant 0, i=1,2,...,N$

    这时一个凸二次优化问题。

    凸优化问题是指约束最优化问题:

    $underset{w}{min}f(x)$

    s.t.    $g_{i}(x)leqslant 0,i=1,2,...,k$

             $h_{i}(w)=0, i=1,2,...,l$

     其中,目标函数$f(x)$和约束函数$g_{i}(x)$都是$mathbb{R}^{n}$上的连续可微的凸函数,约束函数$h_{i}(x)$是$mathbb{R}^{n}$上的仿射函数。当目标函数$f(x)$是二次函数切且约束函数$g_{i}(x)$是仿射函数时,上述凸最优化问题成为凸二次规划问题。

    如果求出了约束最优化问题的解是$w^{*}$,$b^{*}$,那么可以得到最大间隔分离超平面$w^{*}cdot x+b^{*}=0$及分类决策函数$f(x)=sign(w^{*}cdot x+b^{*})$,即线性可分支持向量机模型。下面就来介绍线性可分支持向量机的学习算法——最大间隔法。

    (线性可分支持向量机学习算法——最大间隔法)

    输入:线性可分训练数据集$T={(x_{1},y_{1}),(x_{2},y_{2}),...,(x_{N},y_{N})}$,其中,$x_{i}in chi =mathbb{R}^{n}$,$y_{i}in gamma ={-1,+1}$,$i=1,2,...,N$;

    输出:最大间隔分离超平面和分类决策函数。

    步骤如下:

    1)构造并求解约束最优化问题:

    $underset{w,b}{min}frac{1}{2}left | w ight |^{2}$

    s.t.    $y_{i}(wcdot x_{i}+b)-1geqslant 0, i=1,2,...,N$

    求解最优解$w^{*}$,$b^{*}$。

    2)由此得到分离超平面:

    $w^{*}cdot x+b^{*}=0$

    分离决策函数:

    $f(x)=sign(w^{*}cdot x+b^{*})$。

    1.4 学习对偶算法

        为了求解上述的最优化问题,可以将其作为原始最优化问题,应用拉格朗日对偶性,通过求解随偶问题得到原始问题的最优解,这就是线性可分支持向量机的对偶算法。这样做的优点,一是对偶问题往往容易求解;二是自然引入核函数,进而可以推广到非线性分类问题。

        首先需要构造拉格朗日函数,对每一个不等式约束条件引入拉格朗日乘子$alpha _{i}geqslant 0$,$i=1,2,...,N$,定义拉格朗日函数如下:

    $L(w,b,alpha )=frac{1}{2}left | w ight |^{2}-sum_{i=1}^{N}alpha _{i}y_{i}(wcdot x_{i}+b)+sum_{i=1}^{N}alpha _{i}$

    其中,$alpha =(alpha _{1},alpha _{2},...,alpha _{N})^{T}$为拉格朗日乘子向量。

    根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题:

    $underset{a}{max}underset{w,b}{min}L(w,b,alpha )$    (1.18)

    所以,为了得到对偶问题的解,需要先求$L(w,b,alpha )$对$w$,$b$的极小,再求对$alpha$的极大。

    (1)求$underset{w,b}{min}L(w,b,alpha )$

    将拉格朗日函数$L(w,b,alpha )$分别对$w$,$b$求偏导数并令其为0,可得:

    $ riangledown _{w}L(w,b,alpha )=w-sum_{i=1}^{N}alpha _{i}y_{i}x_{i}=0$

    $ riangledown _{b}L(w,b,alpha )=-sum_{i=1}^{N}alpha _{i}y_{i}=0$

    得:

    $w=sum_{i=1}^{N}alpha _{i}y_{i}x_{i}$     (1.19)

    $sum_{i=1}^{N}alpha _{i}y_{i}=0$    (1.20)

    将式(1.19)代入拉格朗日函数(1.18),并利用式(7.20),即得:

    $L(w,b,alpha )=frac{1}{2}sum_{i=1}^{N}sum_{j=1}^{N}alpha _{i}alpha _{j}y_{i}y_{j}(x_{i}cdot x_{j})-sum_{i=1}^{N}alpha _{i}y_{i}left ( left ( sum_{j=1}^{N}alpha _{j}y_{j}x_{j} ight )cdot x_{i}+b ight )+sum_{i=1}^{N}alpha _{i}=-frac{1}{2}sum_{i=1}^{N}sum_{j=1}^{N}alpha _{i}alpha _{j}y_{i}y_{j}(x_{i}cdot x_{j})+sum_{i=1}^{N}alpha _{i}$

    $underset{w,b}{min}L(w,b,alpha )=-frac{1}{2}sum_{i=1}^{N}sum_{j=1}^{N}alpha _{i}alpha _{j}y_{i}y_{j}(x_{i}cdot x_{j})+sum_{i=1}^{N}alpha _{i}$

    2)对$underset{w,b}{min}L(w,b,alpha )$对$alpha$的极大,即是对偶问题

    $underset{a}{max} -frac{1}{2}sum_{i=1}^{N}sum_{j=1}^{N}alpha _{i}alpha _{j}y_{i}y_{j}(x_{i}cdot x_{j})+sum_{i=1}^{N}alpha _{i}$    (1.21)

    s.t.  $sum_{i=1}^{N}alpha _{i}y_{i}=0$

           $alpha _{i}geqslant 0, i=1,2,...,N$

    将式(1.21)的目标函数由求极大转换成求极小,就得到下面与之等价的对偶最优化问题:

    $underset{alpha}{max} frac{1}{2}sum_{i=1}^{N}sum_{j=1}^{N}alpha _{i}alpha _{j}y_{i}y_{j}(x_{i}cdot x_{j})-sum_{i=1}^{N}alpha _{i}$

    s.t.  $sum_{i=1}^{N}alpha _{i}y_{i}=0$

           $alpha _{i}geqslant 0, i=1,2,...,N$

    定理

    设$alpha^{*}=(alpha {_{1}}^{*},alpha {_{2}}^{*},...,alpha {_{N}}^{*})^{T}$是对偶最优化问题的解,则存在下标$j$,使得$alpha {_{j}}^{*}> 0$,并可按下式求得原始最优化问题的解$w^{*}$,$b^{*}$:

    $w^{*}=sum_{i=1}^{N}alpha {_{i}}^{*}y_{i}x_{i}$

    $b^{*}=y_{j}-sum_{i=1}^{N}alpha {_{i}}^{*}y_{i}(x_{i}cdot x_{j})$

    (证明略)

    (线性可分支持向量机学习算法)

    输入:线性可分训练数据集$T={(x_{1},y_{1}),(x_{2},y_{2}),...,(x_{N},y_{N})}$,其中,$x_{i}in chi =mathbb{R}^{n}$,$y_{i}in gamma ={-1,+1}$,$i=1,2,...,N$;

    输出:最大间隔分离超平面和分类决策函数。

    1)构造并求解约束最优化问题

    $underset{alpha}{max} frac{1}{2}sum_{i=1}^{N}sum_{j=1}^{N}alpha _{i}alpha _{j}y_{i}y_{j}(x_{i}cdot x_{j})-sum_{i=1}^{N}alpha _{i}$

    s.t.  $sum_{i=1}^{N}alpha _{i}y_{i}=0$

           $alpha _{i}geqslant 0, i=1,2,...,N$

    求得最优解$alpha^{*}=(alpha {_{1}}^{*},alpha {_{2}}^{*},...,alpha {_{N}}^{*})^{T}$。

    2)计算

    $w^{*}=sum_{i=1}^{N}alpha {_{i}}^{*}y_{i}x_{i}$

    并选择$w^{*}$的一个正分量$alpha {_{j}}^{*}> 0$,计算

    $b^{*}=y_{j}-sum_{i=1}^{N}alpha {_{i}}^{*}y_{i}(x_{i}cdot x_{j})$

    3)求得分离超平面

    $w^{*}cdot x+b^{*}=0$

    分离决策函数:

    $f(x)=sign(w^{*}cdot x+b^{*})$

    2.线性支持向量机与软间隔最大化

    2.1线性支持向量机

    线性可分问题的支持向量机学习方法,对线性不可分训练数据是不适用的,因为这时上述方法中的不等式约束并不能都成立。这就需要修改硬间隔最大化,使其成为软间隔最大化。

    假设给定一个特征空间上的训练数据集

    $T=left { left ( x_{1},y_{1} ight ), left ( x_{2},y_{2} ight ),...,left ( x_{N},y_{N} ight ) ight }$

    其中,$x_{i}in chi =mathbb{R}^{n}$,$y_{i}in gamma =left { +1,-1 ight }$,$i=1,2,...,N$,$x_{i}$为第i个特征向量,$y_{i}$为$x_{i}$的类标记。假设训练数据不是线性可分的。

    即,通常训练数据中有一些特异点,将这些特异点剔除之后剩下的样本点是线性可分的。

    线性不可分的样本点不能满足函数间隔最大化等于1的约束条件。因此对于每个样本点引入松弛变量$xi _{i}geqslant 0$,使得函数间的加上松弛变量大于等于1。这样约束条件就变成

    了:

    $y_{i}left ( wcdot x_{i} +b ight )geqslant 1-xi _{i}$

    对每一个引入的松弛变量,支付一个代价$xi _{i}$,目标函数由原来的$frac{1}{2}left | w ight |^{2}$,变成了

    $frac{1}{2}left | w ight |^{2}+Csum_{i=1}^{N}xi _{i}$

    这里的$C>0$称为惩罚参数,一般由应用问题决定,$C$值大时对误分类的惩罚增大,$C$值小时对误分类的惩罚减小。最小化上述目标函数包含了两层含义:

    使$frac{1}{2}left | w ight |^{2}$尽量小即间隔尽量大,同时使误分类点的个数尽量小,$C$是调和二者的系数。

    可以和训练数据集线性可分时一样来考虑训练数据集线性不可分时的线性支持向量机问题。相比于之前的硬间隔最大化,这里的方法称之为软间隔最大化。

    线性不可分时的线性支持向量机的学习问题可以变成一下凸二次规划问题:

    $underset{w,b,xi }{min}  frac{1}{2}left | w ight |^{2}+Csum_{i=1}^{N}xi_{i}$

    $s.t. y_{i}(wcdot x_{i}+b)geqslant 1-xi_{i}, i=1,2,...,N$

     $xi _{i}geqslant 0, i=1,2,...,N$

    2.2对偶算法

    上述原始问题的对偶问题如下(和线性可分SVM类似,这里不一一推导了)

    $underset{alpha }{min} frac{1}{2}sum_{i=1}^{N}sum_{j=1}^{N}alpha _{i}alpha _{j}y_{i}y_{j}(x_{i}cdot x_{j})-sum_{i=1}^{N}alpha _{i}$

    $s.t.sum_{i=1}^{N}alpha _{i}y_{i}=0$

    $0leqslant alpha _{i}leqslant C, i=1,2,...,N$

    求导对偶问题的极大极小问题,得到解为$alpha ^{*}=left ( alpha {_{1}}^{*},alpha {_{2}}^{*},...,alpha {_{N}}^{*} ight )$

    从而可以得到SVM的解$w^{*}$,$b^{*}$:

    $w^{*}=sum_{i=1}^{N}alpha {_{i}}^{*}y_{i}x_{i}$

    $b^{*}=y_{j}-sum_{i=1}^{N}y_{i}alpha{_{i}}^{*}left ( x_{i}cdot x_{j} ight )$

    解出了$w^{*}$和$b^{*}$,就可以通过分类决策函数得到最终的模型:

    $fleft ( x ight )=signleft ( w^{*}cdot x+b^{*} ight )$

    使用sklearn库实现线性支持向量机拟合,代码如下:

    import numpy as np
    from sklearn import datasets
    from sklearn.svm import LinearSVC
    import matplotlib.pyplot as plt
    
    iris = datasets.load_iris()
    X = iris["data"][:, (2, 3)]
    y = (iris["target"] == 2).astype(np.float64)
    
    ax = plt.axes(projection='3d')
    print(X[:, 0])
    print(X[:, 1])
    print(y)
    ax.scatter3D(X[:, 0], X[:, 1], y)
    svm_clf = LinearSVC(C=1, loss="hinge")
    svm_clf.fit(X, y)
    
    print(svm_clf.coef_)
    x = np.linspace(0, 10)
    y = np.linspace(0, 3)
    z = np.sign(svm_clf.coef_[:, 0] * x + svm_clf.coef_[:, 1] * y + svm_clf.intercept_)
    ax.scatter3D(x, y, z)
    
    plt.show()
    View Code

    通过拟合得到矩阵$w$和$b$,可以的扫决策函数:

    $f(x)=sign(w^{*} cdot x + b)$

    使用matplotlib画图得到如下结果,其中$f(x) = 1$表示得到的类别为1(是类别2,Iris-Virginica),$f(x)  = -1$表示得到的类别为非1(非Iris-Virginica):

  • 相关阅读:
    dategrid快速录入一行数据的一波操作
    shiro权限控制入门
    Activiti工作流小序曲
    在线HTML文档编辑器使用入门之图片上传与图片管理的实现
    ActiveMQ整合spring结合项目开发流程(生产者和消费者)总结
    缓存框架EhCache的简单使用
    关于特征工程入门中的一些基本知识
    SQL SERVER常用系统表和常用函数
    TestOne
    JS 代码调试经验总结
  • 原文地址:https://www.cnblogs.com/xjlearningAI/p/12459457.html
Copyright © 2020-2023  润新知