Support Vector Machine(SVM)——支持向量机

1.从逻辑回归到SVM

        回顾一下逻辑回归的模型

                h_\theta(x)=\frac1{1+e^{-\theta^Tx}}

        然后h_\theta(x)经过sigmoid函数得到预测y=1的概率,sigmoid函数如下图

                

        对于单个样本来说损失函数如下

          

        当一个输入的真实标签为1时,损失函数就只剩-\log\frac{1}{1+e^{-\theta^{T}x}},如左图所示,我们想要让\theta ^{T}X>>0,来使损失函数尽可能的小

        对于SVM来说,损失函数会做些修改,如右图所示,是一个分段函数,在>=1的时候,损失值直接为0,而<1部分是一条线段,假设命名为cost_{1}

        

       当一个输入的真实标签为0时,损失函数就只剩1-\log\frac{1}{1+e^{-\theta^{T}x}},如左图所示,同时我们想要让\theta ^{T}X<<0,来使损失函数尽可能的小

       同样的修改方式,在<=1的时候,损失值直接为0,而>1部分是一条线段,假设命名为cost_{0}

        于是在逻辑回归的基础上,我们可以得到SVM的损失函数如下

        \operatorname*{min}_{\theta}C\sum_{i=1}^{m}\left[y^{(i)}cost_{1}(\theta^{T}x^{(i)})+(1-y^{(i)})cost_{0}(\theta^{T}x^{(i)})\right]+\frac{1}{2}\sum_{i=1}^{n}\theta_{j}^{2}

对比逻辑回归,除了cost部分外,还有如下不同

  • 省去了\frac{1}{m},因为这并不会影响\theta的最优取值,只是影响函数值而已
  • 令C=\frac{1}{\lambda },接着正则化方式从A+\lambda BCA+B

        最后有别于逻辑回归经过一个sigmoid输出概率,SVM在得到参数\theta的值后,直接进行预测                        

                        

2.SVM——大间距分类器

        SVM构造出的决策边界总是使决策边界到两类样本点的距离较大,这点有别于感知机。

2.1 直观的理解

        回顾一下SVM修改后的损失函数

        如果说有一个y=1的正样本,如果\theta ^TX>=0,预测值就为1,预测正确。但如果从损失函数的来看,只有当\theta ^TX>=1的时候,损失函数的值才为0,同时在训练的过程中为了使损失函数最小,也确实会让\theta ^T X>=1(负样本同理)。也就是说SVM的损失函数让其对分类的要求更高,也就是大间距。

        接着,我们加上考虑C的影响。如果将C设置成一个非常大的值,则在最小化损失函数的时候,会迫切的希望找到一个让第一项(如下)为0的解,也就是\theta ^TX>=1(正样本时)

        

        对于二分类来说,绿色、蓝色、红色的线都可以将两者分类,但对于SVM来说,黑色的线才是其所要寻找的决策边界,因为它距离两个样本有更大的间隔,从效果上来看,黑色也确实是最好的

        

        如果找到了这个\theta,那么可以简化为如下

        

………………………………………………………………………………………………………………

        额外的对于参数C的理解,在上面的解释中我们使用了一个很大C来举例。因为C=1/λ,所以作用是类似

                                        

        但很大的C也意味着,如果多了一个左下角的“x”(有可能是异常值),决策边界直接从黑色的线变成粉色的线,这是不太好的,尽管在SVM中C的取值确实会比较大。如果C设置的不要太大,你仍然会得到和黑色线类似的线,只是分类的结果允许有点错误,忽略掉一些异常点的影响,同时如果你的数据是线性不可分的,也能给出好的结果

                                        

…………………………………………………………………………………………………………………

2.2 从数学上理解

        范数,表示向量的长度或大小(模其实是一样的)

||\theta ||=(\sqrt{\theta _{1}^{2}+\theta _{2}^{2}+\cdots +\theta _{n}^{2}})

\left.\min\frac{1}{2}\sum_{j=1}^n\theta_j^2s.t\left\{\begin{matrix}\theta^Tx^{(i)}\geq1ify^{(i)}=1\\\theta^Tx^{(i)}\leq-1ify^{(i)}=0\end{matrix}\right.\right.

        为了便于理解和画图,假设\theta _{0}=0(即决策边界截距为0),并且特征数n=2

 \frac{1}{2}\sum_{j=1}^{n}\theta _{j}^{2}=\frac{1}{2}(\theta _{1}^{2}+\theta _{2}^{2})=\frac{1}{2}(\sqrt{\theta _{1}^{2}+\theta _{2}^{2}})^{2}=\frac{1}{2}\left \| \theta \right \|^{2}

        设向量x^{i}与向量\theta的夹角为t,P^{i}为向量x^{i}在向量\theta方向上的投影的长度

\theta^{T}x^{(i)}=||\theta ||\left \| x^{i} \right \|cost=P^{i}\left \| \theta \right \|(向量内积)

                                ​​​​​​​        

        假如我们的决策边界是这条黑线,那么θ向量就是与黑线垂直的向量(法向量)

        ​​​​​​​        ​​​​​​​        

        如果决策边界是这样的,这个间隔更大,同时P也更加的大

        ​​​​​​​        ​​​​​​​        ​​​​​​​

        SVM需要在最小化||θ||的同时,还需要满足

        那么在最小化||θ||让P更加的大,才能满足,由上面两幅图可以分析出,这等价于让样本点距离决策边界距离更加的大

            ​​​​​​​​​​​​​​

        间隔大小为\frac{2}{||\theta ||},那些则最靠近分类决策面的点,是最难分类的数据点(落在margin线上的)也叫支持向量(support vectors),

2.3 kernel——核函数

        在之前,为了拟合非线性的数据,我们可以创造高次方的特征,使用多项式回归。


        而在SVM我们可以使用核函数,不使用核函数的SVM也叫使用线性核函数的SVM。

2.3.1 Gaussian Kernel高斯核函数

         假设我们预先选定了三个地标(lanmarks),输入x通过与计算与这三个地标的近似程度来获得新的特征f_{1},f_{2},f_{3}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

        f_{1}=similarity(x,l^{(1)})=exp(-\frac{\|x-l^{(1)}\|^{2}}{2\sigma^{2}})

        f_{2}=similarity(x,l^{(2)})=exp(-\frac{\|x-l^{(2)}\|^{2}}{2\sigma^{2}})

        f_{3}=similarity(x,l^{(3)})=exp(-\frac{\|x-l^{(1)}\|^{3}}{2\sigma^{2}})

其中\begin{aligned}\exp\left(-\frac{||x-l||^2}{\sigma^2}\right)\end{aligned}就是高斯核函数,\|x-l^{(1)}\|^{2}=\sum_{j=1}^{n}(x_{j}-l_{j}^{(1)})^{2}表示x与l的距离的平方

        于是就可以得到
        ​​​​​​​h_{\theta}(x)=\theta_{1}f_{1}+\theta_{2}f_{2}+\theta_{3}f_{3}​​​​​​​

       假设输入x与某个地标l的距离为0,那么新特征f=e^{-0}=1,如果较远,那么f的值就靠近于0

        下面通过一个示例,看看高斯核函数的转换

        

        图中水平面的坐标为x1,x2而垂直坐标轴代表f。可以看出,只有当x与l^{(1)}重合时f才具有最大值。随着x的改变f值改变的速率受到\sigma^{2}的控制。

        只有当x=(3,5)与l^{(1)}重合时,f取得最大值,离l^{(1)}越远,f越小。

        可以看作正态分布的三维形式,因为这个这个式子和正态分布是一样的

        l相当于对称轴,函数在这里取得最大值,\sigma^{2}相当于方差,\sigma^{2}越大,分布越散,图象越平坦,\sigma^{2}越小,分布越集中,图象越在对称轴突出

        在下图中,当实例处于洋红色的点位置处,因为其离l^{(1)}更近,但是离l^{(2)}l^{(3)}较远,因此f_{1}接近1,而f_{2},f_{3}接近0,h_{\theta}(x)=\theta_{0}+\theta_{1}f_{1}+\theta_{2}f_{2}+\theta_{1}f_{3}>0,因此预测y=1。同理可以求出,对于l^{(2)}离较近的绿色点,也预测y=1,但是对于蓝绿色的点,因为其离三个地标都较远,预测y=0。我们可以得到决策边界类似下图

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​​​​​​​​        

        这样就可以实现非线性的数据分类。

2.3.2 如何选择地标

        在SVM会使用所有的训练样本作为地标,假设有m个样本

l^{(1)}=x^{(1)},l^{(2)}=x^{(2)},\ldots\ldots,l^{(m)}=x^{(m)}

        对于每一个样本x^{i},都可以计算m个f,得到大小为m的f向量

        此外还需修改我们的损失函数

        minC\sum_{i=1}^{m}[y^{(i)}cost_{1}\left(\theta^{T}f^{(i)}\right)+(1-y^{(i)})cost_{0}(\theta^{T}f^{(i)})]+\frac{1}{2}\sum_{j=1}^{n=m}\theta_{j}^{2}​​​​​​​

2.4.3 高斯核函数的超参数

        超参数为C和\sigma^{2}

  • C较大时,可能会导致低偏差,高方差
  • C较小时,可能会导致高偏差,低方差
  • \sigma^{2}较大时,可能会导致高偏差,低方差
  • \sigma^{2}较小时,可能会导致高偏差,低方差

        由于高斯核函数会使用每个样本

        另外使用高斯核函数使用特征缩放是很有必要的

2.5.4 其他Kernel

  • Polynomial kernel

     \mathrm{Ker}(x,l)=(\gamma x^Tl+c)^k,包括γ,c,k三个参数
  • String kernel
  • chi-square kernel
  • ​​​​​​​histogram intersection kernel
  • ……

无论什么核函数,都需要满足“Mercer’s Theorem”

        Mercer条件:训练样本的核矩阵应为半正定矩阵,因为只有所有大于或等于零的特征值才能产生有效的距离​​​​​​​

2 多分类SVM

        我们可以利用之前在逻辑回归介绍的一对多方法来解决一个多类分类问题。如果一共有k个类,则我们需要k个模型,以及k个参数向量θ。我们同样也可以训练k个支持向量机来解决多类分类问题。

        但是大多数支持向量机软件包都有内置的多类分类功能,我们只要直接使用即可。

3 逻辑回归与SVM的选择

n为特征数,m为训练样本数。

        (1)如果相较于m而言,n要大许多,即训练集数据量不够支持我们训练一个复杂的非线性模型,我们选用逻辑回归模型或者不带核函数的支持向量机。

        (2)如果n较小,而且m大小中等,例如n在1-1000之间,而m在10-10000之间,使用高斯核函数的支持向量机。

        (3)如果n较小,而m较大,例如n在1-1000之间,而m大于50000,则使用支持向量机会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向量机。

              

相关推荐

  1. 支持向量(SVM)

    2023-12-18 02:02:05       31 阅读
  2. 支持向量SVM

    2023-12-18 02:02:05       32 阅读
  3. 支持向量(SVM)

    2023-12-18 02:02:05       29 阅读
  4. 支持向量SVM

    2023-12-18 02:02:05       29 阅读
  5. Sklearn支持向量

    2023-12-18 02:02:05       23 阅读
  6. SVM支持向量

    2023-12-18 02:02:05       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-18 02:02:05       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-18 02:02:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-18 02:02:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-18 02:02:05       18 阅读

热门阅读

  1. 变量命名不够恰当(js的问题)

    2023-12-18 02:02:05       45 阅读
  2. conanfile.py-Methods-package_info()

    2023-12-18 02:02:05       42 阅读
  3. USB简介系列-04

    2023-12-18 02:02:05       38 阅读
  4. MBA-论文说-历年考题参考

    2023-12-18 02:02:05       35 阅读
  5. 六大设计原则

    2023-12-18 02:02:05       33 阅读
  6. 第16课 SQL入门之更新和删除数据

    2023-12-18 02:02:05       44 阅读
  7. c# 数组删除

    2023-12-18 02:02:05       38 阅读