Reading_支持向量机

在这里插入图片描述
参考文章:
1、大神的博客,支持向量机原理,特别是SMO算法的讲解很好
2、怎么理解决策树、xgboost能处理缺失值?而有的模型(svm)对缺失值比较敏感呢?
3、SVM RBF 主要超参数概述 
4、李航《统计学习方法》

定义:二分类模型,定义在特征空间上的的间隔最大的线性分类器,通过核技巧(kernel trick),也可作为非线性分类器。

分类

  1. 线性可分SVM,即硬间隔SVM
  2. 线性SVM,即软间隔SVM
  3. 非线性SVM,即软间隔+核技巧

SVM算法的主要优点有:【1】

1) 解决高维特征的分类问题和回归问题很有效,在特征维度大于样本数时依然有很好的效果。

2) 仅仅使用一部分支持向量来做超平面的决策,无需依赖全部数据。

3) 有大量的核函数可以使用,从而可以很灵活的来解决各种非线性的分类回归问题。

4)样本量不是海量数据的时候,分类准确率高,泛化能力强。

SVM算法的主要缺点有:

1) 如果特征维度远远大于样本数,则SVM表现一般。

2) SVM在样本量非常大,核函数映射维度非常高时,计算量过大,不太适合使用。

3)非线性问题的核函数的选择没有通用标准,难以选择一个合适的核函数。

4)SVM对缺失数据敏感。
    这里说的缺失数据是指缺失某些特征数据,向量数据不完整。SVM没有处理缺失值的策略(决策树有)。而SVM希望样本在特征空间中线性可分,所以特征空间的好坏对SVM的性能很重要。缺失特征数据将影响训练结果的好坏。

part 1 :线性可分支持SVM和硬间隔最大化

假设输入空间为欧式空间或离散空间,特征空间是欧式空间或希尔伯特空间,支持向量机的学习实在特征空间进行的。【拓:机器学习中各个空间的含义】

特征是对原始数据的抽象,是原始数据的抽象表示,通过使用数值表示原始数据。

注:感知机用误分类最小策略,求得超平面,解有无穷多个

函数间隔和几何间隔
在这里插入图片描述
如果是负号前面加一个负号,此处为了方便就只讨论分类为正的时候。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
函数间隔/||w|| = 几何间隔
在这里插入图片描述

所以支持向量机的基本想法是求解能够正确划分数据集并且几何间隔最大的分离超平面(此处的几何分隔是距离超平面点的间隔中取最小的)
所以最大间隔分离超平面可以表示为下面的约束最优化问题:
在这里插入图片描述

变成函数间隔:这个变换就是目标函数几何间隔变成函数间隔,然后s.t处同时乘以||w||
在这里插入图片描述

函数间隔对约束和目标函数没有影响,此处直接设为1,然后变成最小化,也就得到了我们要求的线性可分最大间隔模型:
在这里插入图片描述

总结一下:我们用几何间隔构建模型,然后换成函数间隔,利用函数间隔的等比例变化不变性将函数间隔化1,从而得到一个简化的模型。

下面为了求解这个最优化问题,引入对偶问题:

  1. 对偶问题往往更容易求解,变量只有N个(N为训练集中的样本个数),原始问题中的变量数量与样本点的特征个数相同,当样本特征非常多时,求解难度较大。
  2. 自然引入核函数

在这里插入图片描述
也就是说,先把对偶关系写出来,用KKT条件化成只和拉格朗日系数相关的函数,然后求导得出系数,反求w和b。

其中,KKT条件:其实就是中间多了个kkt对偶互补条件,然后拉式系数 >= 0,然后上面是对各个系数的求导(将w和b转换成拉式系数的表达),下面是原来的s.t条件
在这里插入图片描述
注:此处好像没有对拉式系数求导(也就是第二项没用到),因为对拉式系数求导就是h(x)=0

part 2 :线性支持SVM和软间隔最大化

之所以“软”,是引入了松弛变量乃木他_i,将看起来还算是线性的特征,加一点可以变得东西。
最后得目标函数和part1中的一样,但是s.t不一样了,阿发_i多了一个上限C,这个是通过另一个拉式系数缪_i求得的。

在这里插入图片描述

另外,这个原函数还可以转换为合页损失函数:
在这里插入图片描述

part 3 :非线性支持SVM和核函数

引入了核技巧,就是将低维映射到高维,然后核函数的作用就是在低维计算高维的内积,其实高维映射只是个噱头,直接上核函数就行了(boger face)

将P1和P2里面的目标函数的xx变成K(xx),就好了。
核函数的类别:

  1. 线性核函数:K(x,z)=x∙z 这就可以将前面的线性SVM统一起来了
  2. 多项式核函数:
    在这里插入图片描述
  3. 高斯核函数:又叫径向基核函数
    在这里插入图片描述
      如果是SVM分类模型,这两个超参数分别是惩罚系数CRBF核函数的系数γ,惩罚系数C即我们在之前原理篇里讲到的松弛变量的系数。它在优化函数里主要是平衡支持向量的复杂度和误分类率这两者之间的关系,可以理解为正则化系数。当C比较时,我们的损失函数也会越,这意味着我们不愿意放弃比较远的离群点。这样我们会有更加多的支持向量,也就是说支持向量和超平面的模型也会变得越复杂,也容易过拟合。反之,当C比较小时,意味我们不想理那些离群点,会选择较少的样本来做支持向量,最终的支持向量和超平面的模型也会简单。scikit-learn中默认值是1。
      另一个超参数是RBF核函数的参数γ。回忆下RBF 核函数的表达式,γ主要定义了单个样本对整个分类超平面的影响,当γ比较时,单个样本对整个分类超平面的影响比较,不容易被选择为支持向量,反之,当γ比较大时,单个样本对整个分类超平面的影响比较大,更容易被选择为支持向量,或者说整个模型的支持向量也会多(C和γ大的时候,支持向量都会增加)。scikit-learn中默认值是1样本特征数
      如果把惩罚系数C和RBF核函数的系数γ一起看,当C比较, γ比较时,我们会有更的支持向量,我们的模型会比较复杂,容易过拟合一些。如果C比较小 , γ比较小时,模型会变得简单,支持向量的个数会少。 【3】

part 4 :序列最小最优化算法(sequential minimal optimization)

几乎所有的推导走在SMO之中,有几个地方《统计机器学习》中没有,所以网上的也没什么推导。

在这里插入图片描述

固定前两个系数,得到简化:
在这里插入图片描述
在这里插入图片描述
推导过程如下:

在这里插入图片描述

算法总结:
在这里插入图片描述

首先是选值,第一个是最违背KKT条件的系数,第二个是和系数1的E_i差最大的系数。(好像没什么相关的说明文章)
其次是更新,这里需要推导。

在这里插入图片描述
这个是系数的上下限,可以看图,直线上下平移(上图)

在这里插入图片描述
系数的终止条件,其实就是根据软间隔的kkt条件转化的,推导过程见转化

等以后有时间再推吧,因为好像没有推这么深的(其实是再看s8)

猜你喜欢

转载自blog.csdn.net/weixin_39782583/article/details/83011581