SVM

一.概念

寻找到一个超平面使样本分成两类,并且间隔最大。而我们求得的w就代表着我们需要寻找的超平面的系数。
这里写图片描述
与超平面的距离表示分类的确信度,距离越远则分类正确的确信度越高
这里写图片描述

1.多重超平面

B是最好地分离这两个类的线
这里写图片描述

2. 多分离超平面

要选择尽可能远离每个类别的数据点的超平面
这里写图片描述

3.超平面方程

超平面的一般方程如下:这里写图片描述+b=0
其中w和x是向量,w T 是两个向量的点积。向量w通常被称为权重。w,x皆为向量,wx+b=0就是a1*x1+a2*x2+…an*xn+b=0
这里写图片描述

(1)超平面方程表达式

这里写图片描述

(2)超平面距离

这里写图片描述

(3)超平面距离取值

这里写图片描述

(4)超平面的分类

这里写图片描述

(5)点到超平面的距离

引用块内容

二.拉格朗日数学推导

1.超平面方程

引用块内容

2.函数间隔和集合间隔

https://www.cnblogs.com/fantasy01/p/4633557.html
这里写图片描述在线性可分的情况下,特征空间中距离分离超平面的距离最近的特征向量为支持向量

3.硬间隔最大化的求解方法

这里解释一下何为硬间隔最大化,这个是相对训练数据集或说特征空间来说的,假如数据是完全的线性可分的,则学习到的模型可以称为硬间隔支持向量机,除此之外还有软间隔支持向量机(近似线性可分),非线性支持向量机等,最终的目的都是为了求的w*,b*
这里写图片描述s.t------>拉格朗日乘子

4对偶算法

(1)引入拉格朗日乘子,即s.t
引用块内容
(2)求出极大值max
这里写图片描述
上图中min改为max
(3)求极小值min
这里写图片描述
(4)求解各参数
这里写图片描述这里写图片描述

5.线性可分支持向量机算法流程

引用块内容这里写图片描述

6.例题

引用块内容

(1)解法一

引用块内容

(2)解法二

引用块内容这里写图片描述

7.软间隔最大化

引用块内容这里写图片描述

7.1简单理解

这里写图片描述
这里写图片描述

8.KKT条件

引用块内容
由此可知:若α i =0则样本不会出现,对f(x)没有影响;α i >0则y i f(x i )=1说明样本在最大边界上。可知: 训练完成之后,大部份样本不需要保留,最终模型只与支持向量有关

9.请比较决策树和SVM对缺失值的处理方法,想想为什么SVM对缺失数据敏感?

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

三.核函数

引用块内容

1.核函数原理

假设X是输入空间,H是特征空间,存在一个映射?使得X中的点x能够计算得到H空间中的点h ,对于所有的X中的点都成立:这里写图片描述

2.举例

引用块内容

3.核函数的推导

引用块内容

4.核函数的作用

核函数的作用就是隐含着一个从低维空间到高维空间的映射,而这个映射可以把低维空间中线性不可分的两类点变成线性可分的。

5.效果展示

在 SVM 中设定一个参数「C」;从而你可以在两种结果中权衡:1. 拥有很宽的间隔;2. 精确分离训练数据;
C 的值越大,意味着在训练数据中允许的误差越少。必需强调一下这是一个权衡的过程。如果想要更好地分类训练数据,那么代价就是间隔会更宽。以下几个图展示了在不同的 C 值中分类器和间隔的变化(未显示支持向量)。
这里写图片描述
注意决策边界随 C 值增大而倾斜的方式。在更大的 C 值中,它尝试将右下角的红点尽可能的分离出来。但也许我们并不希望在测试数据中也这么做。
第一张图中 C=0.01,看起来更好的抓住了普遍的趋势,虽然跟更大的 C 值相比,它牺牲了精确性。
考虑到这是一个权衡方法,需要注意间隔如何随着 C 值的增大而缩小。
在之前的例子中,间隔内是不允许任何错点的存在的。在这里我们看到,同时拥有好的分离边界和没有错点的间隔是基本不可能的。由于现实世界中的数据几乎不可能精确的分离,确定一个合适的 C 值很重要且很有实际意义。我们往往使用交叉验证选择合适的C 值。

6.线性非线性问题

(1) 对于线性可分数据,SVM 工作地非常出色。
(2)对于近似线性可分数据,只要只用正确的 C 值,SVM 仍然可以工作地很好。
(3)对于线性不可分数据,可以将数据映射到另一个空间使数据变得完美或者几乎完美线性可分,将问题回归到了 1 或者 2。

7.核函数工作原理

首先 SVM一个非常令人惊喜的方面是,其所有使用的数学机制,如精确的映射、甚至是空间的维度都没有显式表示出来。你可以根据数据点(以向量表示)的点积将所有的数学写出来。例如P 维的向量 i 和 j,第一个下标区分数据点,第二个下标表示维度:
这里写图片描述这里写图片描述
如果数据集中有 n 个点,SVM 只需要将所有点两两配对的点积以寻找分类器。仅此而已。当我们需要将数据映射到高维空间的时候也是这样,不需要向 SVM 提供准确的映射,而是提供映射空间中所有点两两配对的点积。
这里写图片描述

8.常见核函数

这里写图片描述

(1)线性核

引用块内容

(2)多项式核

引用块内容

(3)高斯(RBF)核

引用块内容
这里写图片描述

(4)sigmoid核

引用块内容

9.核函数选择依据

(1)如果特征的数量大到和样本数量差不多,则选用LR或者线性核的SVM;
(2)如果特征的数量小,样本的数量正常,则选用SVM+高斯核函数;
(3)如果特征的数量小,而样本的数量很大,则需要手工添加一些特征从而变成第一种情况。

10.模拟与总结

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

通过上面的实验我们发现使用多项式核、高斯核的SVM确实是可以解决线性不 可分问题的。不同的参数对精度的影响非常大,一般来说,C越大,训练得到的模型越准确。如果采用高斯核,参数γ的值对精度影响也非常大。因此,在实 际应用时调一组好的参数对使用效果非常重要!

11核技巧在支持向量机中的应用

这里写图片描述

12.怎么选用核函数

下面是吴恩达的见解:
1). 如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM
2) 如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel
3). 如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况
总结:当特征数远小于样本数量时,选用S线性核+高斯核;当两者数量差不多时选用线性核

四.SVM优点缺点

1.SVM优点

1、解决小样本下机器学习问题。
2、解决非线性问题。
3、无局部极小值问题。(相对于神经网络等算法)
4、可以很好的处理高维数据集。
5、泛化能力比较强。

2.SVM缺点

1、对于核函数的高维映射解释力不强,尤其是径向基函数。
2、对缺失数据敏感。

五.过拟合

过度的拟合了训练数据,而没有考虑到泛化能力
这里写图片描述

1.发生原因

(1)数据有噪声
这里写图片描述
(2)训练数据不足,有限的训练数据
这里写图片描述
(3)训练模型过度导致模型非常复杂
这里写图片描述

六.SVM实现多分类

参考https://blog.csdn.net/xbmatrix/article/details/59169204

SVM算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器。目前,构造SVM多类分类器的方法主要有两类:

1.直接法

直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题“一次性”实现多类分类。
这里写图片描述
这种方法看似简单,但其计算复杂度比较高,实现起来比较困难,只适合用于小型问题中

2.间接法

主要是通过组合多个二分类器来实现多分类器的构造,常见的方法有one-against-one和one-against-all两种。

(1)一对一

其做法是在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计k(k-1)/2个SVM。
当对一个未知样本进行分类时,最后得票最多的类别即为该未知样本的类别。Libsvm中的多类分类就是根据这个方法实现的。

举例

假设有四类A,B,C,D四类。在训练的时候我选择A,B; A,C; A,D; B,C; B,D;C,D所对应的向量作为训练集,然后得到六个训练结果,在测试的时候,把对应的向量分别对六个结果进行测试,然后采取投票形式,最后得到一组结果。
投票是这样的:
  A=B=C=D=0;
  (A,B)-classifier 如果是A win,则A=A+1;otherwise,B=B+1;
  (A,C)-classifier 如果是A win,则A=A+1;otherwise, C=C+1;
  …
  (C,D)-classifier 如果是A win,则C=C+1;otherwise,D=D+1;
  The decision is the Max(A,B,C,D)
评价:这种方法虽然好,但是当类别很多的时候,model的个数是n*(n-1)/2,代价还是相当大的。

(2)一对多

训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个SVM。分类时将未知样本分类为具有最大分类函数值的那类。

举例

假如我有四类要划分(也就是4个Label),他们是A、B、C、D。于是我在抽取训练集的时候,分别抽取
  (1)A所对应的向量作为正集,B,C,D所对应的向量作为负集;
  (2)B所对应的向量作为正集,A,C,D所对应的向量作为负集;
  (3)C所对应的向量作为正集,A,B,D所对应的向量作为负集;
  (4)D所对应的向量作为正集,A,B,C所对应的向量作为负集;
使用这四个训练集分别进行训练,然后的得到四个训练结果文件。在测试的时候,把对应的测试向量分别利用这四个训练结果文件进行测试。最后每个测试都有一个结果f1(x),f2(x),f3(x),f4(x)。于是最终的结果便是这四个值中最大的一个作为分类结果。
评价:这种方法有种缺陷,因为训练集是1:M,这种情况下存在biased.因而不是很实用。可以在抽取数据集的时候,从完整的负集中再抽取三分之一作为训练负集。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值