机器学习算法二:支持向量机(SVM)

  1. 简介:支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,
  2. 原理:基于训练集在样本空间中寻找一个划分超平面,将不同类别的样本分开。 

 

 

寻找间隔最大的超平面,即:

●  距离计算:点x到超平面(w,b)的距离:

\gamma =\frac{|\omega ^{T}+b|}{||\omega ||}

●  间隔计算:两个异类支持向量的差在 w 上的投影,即:

\gamma =\frac{|\omega ^{T}*x\vec{}_{+}+b|}{||\omega ||}-\frac{|\omega ^{T}*x\vec{}_{-}+b|}{||\omega ||}=\frac{(x\vec{}_{+}-x\vec{}_{-})*\omega \vec{}^{T}}{||\omega ||}=\frac{x\vec{}_{+}*\omega \vec{}^{T}-x\vec{}_{-}*\omega \vec{}^{T}}{||\omega ||}

● 由于x\vec{}_{+}x\vec{}_{-}表示两个正负支持向量,则两点均满足(其中y表示样本的类比当X为正例的时候Y=+1,当X为负例的时候Y=-1):

y_{i}*(\omega ^{T}x_{i}+b)=1 \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \; \omega ^{T}x_{i}=\frac{1}{y_{i}}-b

将y的值分别代入上式,并计算其间隔距离:

\gamma =\frac{x\vec{}_{+}*\omega \vec{}^{T}-x\vec{}_{-\frac{}{}}*\omega \vec{}^{T}}{||\omega ||}=\frac{(\frac{1}{y_{i}^{+}}-b)-(\frac{1}{y_{i}^{-}}-b)}{||\omega ||}=\frac{(1-b)-(-1-b)}{||\omega ||}=\frac{2}{||\omega ||}

●  因此,两点之间的间隔距离为:\frac{2}{||\omega ||}

 

● 在求最大间隔即:

max(\frac{2}{||\omega ||})\: \: --> max(||\omega ||^{-1})\: \: --> min(\frac{1}{2}||\omega ||^{2})

●  SVM求极小值的问题转换为对偶问题:(为了使问题变得易于处理,我们的方法是把目标函数和约束全部融入一个新的函数,即拉格朗日函数,再通过这个函数来寻找最优点。)

对其约束条件添加拉格朗日乘子a后的拉格朗日函数为:

由于求最小值,即F(w,b,a)分别对w,b求偏导等于0得:   

 ||w||=\sum_{i=1}^{m}a_{i}y_{i}x_{i}\: \: \: \: \: \: \: \: \: \: \: \: \sum_{i=1}^{m}a_{i}y_{i}=0                        

最终带回原公式F(w,b,a)得:

在对这个函数求解,求解方法有SMO方法,也可以通过求极值方法;

设已知a的值,然后再通过

w=\sum_{i=1}^{m}a_{i}y_{i}x_{i}

根据y=wx+b:                 

 b=y_{i}-\sum_{i}a_{i}y_{i}x_{i}x_{j}

  1.  核函数:

★针对训练集中原始样本空间无法正确划分两类样本空间问题,将样本从原始样本空间映射到一个更高维的特征空间,映射函数为\phi (x_{i}),使得样本线性可分;

y=\sum_{i=1}^{m}w_{i}\phi (x_{i})+b

则其对偶函数为:

★针对高维下的特征映射计算即:\phi (x_{i})^{T}\phi (x_{j})

xi和xj在高维特征空间的内积通过其在原始样本空间中通过核函数k(xi,xj)计算

 

常用核函数:

名称

表达式

参数

线性核

k(x_{i},x_{j})=x_{i}^{T}x_{j}

多项式核

k(x_{i},x_{j})=(x_{i}^{T}x_{j})^{d}

d>1为多项式的次数

高斯核

k(x_{i},x_{j})=e^{-\frac{||x_{i}-x_{j}||^{2}}{2\sigma ^{2}}}

\sigma >0为高斯核的带宽

拉普拉斯核

k(x_{i},x_{j})=e^{(-\frac{||x_{i}-x_{j}||}{\sigma })}

\sigma >0

Sigmoid核

k(x_{i},x_{j})=tanh(\beta x_{i}^{T}x_{j}+\theta )

Tanh为双曲正切函数,β>0,θ<0

  1.  软间隔
  • 问题:超平面无法将不同类样本完全划分开
  • 解决方法:允许支持向量机在一些样本出错,即软间隔

★硬间隔:所有样本均满足约束,即所有样本都必须划分正确

★软间隔:允许样本不满足约束条件(最大化间隔的同时不满足约束的样本尽可能少)

因此软间隔优化目标为:C是一个常数, 是“损失函数”

★当C为无穷大时将迫使所有样本均满足约束,则其优化目标满足约束。当C取有限值时,允许一些样本不满足约束。

然而,非凸,非连续,数学性质不太好,使得优化函数不易直接求解。因此常用其他一些函数来代替,称为“替代损失”,替代损失函数一般具有较好的数学性质,如它们通常式凸的连续函数且是的上界。

三种常用的替代损失函数:

若采用hinge损失,则优化函数:

引入“松弛变量”,可将优化函数重写为:

因此软/硬间隔下的对偶问题:

两者位移的差别就是对偶变量的约束不同;

  1. SVM拓展:支持向量回归SVR

SVR与一般线性回归的区别

SVR

一般线性回归

数据在间隔带内则不计算损失,当且仅当f(x)与y之间的差距的绝对值大于ϵ 才计算损失

只要f(x)与y不相等时,就计算损失

通过最大化间隔带的宽度与最小化总损失来优化模型

通过梯度下降之后求均值来优化模型

 

  1. SVM的Sklearn框架实现:
  2.  

    参数

    SVC(软间隔)

    C

    对偶形式中的惩罚系数C,默认为1,一般需要通过交叉验证来选择一个合适的C。一般来说,如果噪音点较多时,C需要小一些。

    kernel

    核函数有四种内置选择,‘linear’即线性核函数, ‘poly’即多项式核函数, ‘rbf’即高斯核函数, ‘sigmoid’即sigmoid核函数。默认是高斯核'rbf'

    degree

    如果在kernel参数使用了多项式核函数‘poly’,那么需要对degree进行调参;此参数对应  K(x,z)=(\gamma x*z+r)^{d} 中的d,默认值是3,一般需要通过交叉验证选择一组合适的\gamma,r,d

    gamma

    如果在kernel参数中使用了多项式核函数‘poly’,高斯函数‘rbf’,或者singmoid核函数,则需对此参数调参;

    ★多项式核函数中此参数对应  K(x,z)=(\gamma x*z+r)^{d} 中的\gamma,一般通过交叉检验选择一组合适的\gamma,r,d

    ★高斯核函数中此参数对应  K(x,z)=e^{-\gamma ||x-z||^{2}}中的\gamma,一般通过交叉检验选择一组合适的\gamma

    ★sigmoid核函数中,此参数对应  K(x,z)=tanh(\gamma x*z+r) 中的\gamma,一般通过交叉检验选择一组合适的\gamma,r;

    \gamma 默认为‘auto’,即‘1/特征维度’

    coef0

    如果在kernel参数中使用了多项式核函数‘poly’,或者singmoid核函数,则需对此参数调参;

    ★多项式核函数中此参数对应  K(x,z)=(\gamma x*z+r)^{d} 中的\gamma,一般通过交叉检验选择一组合适的\gamma,r,d

    ★sigmoid核函数中,此参数对应  K(x,z)=tanh(\gamma x*z+r) 中的\gamma,一般通过交叉检验选择一组合适的\gamma,r;

    coef0默认为0

    class_weight

    指定样本各类别的的权重,主要是为了防止训练集某些类别的样本过多,导致训练的决策过于偏向这些类别。这里可以自己指定各个样本的权重,或者用“balanced”,如果使用“balanced”,则算法会自己计算权重,样本量少的类别所对应的样本权重会高。当然,如果你的样本类别分布没有明显的偏倚,则可以不管这个参数,选择默认的"None"

    cache_size

    在大样本的时候,缓存大小会影响训练速度,因此如果机器内存大,推荐用500MB甚至1000MB。默认是200,即200MB.

     

     

     

     

     

     

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值