支持向量机(SVM)算法

来源:互联网 发布:机械结构优化设计 编辑:程序博客网 时间:2024/05/29 04:01

1. 背景:

 1.1 最早是由 Vladimir N. Vapnik 和 Alexey Ya. Chervonenkis 在1963年提出 1.2 目前的版本(soft margin)是由Corinna Cortes 和 Vapnik在1993年提出,并在1995年发表 1.3 深度学习(2012)出现之前,SVM被认为机器学习中近十几年来最成功,表现最好的算法.是最好的现成的分类器,‘现成’指的是分类器不加修改就可以直接使用。同时这就意味着在数据上应用基本形式的SVM分类器就可以得到低错误率的效果。SVM能够对训练集之外的数据点作出很好的分类决策。

2. 机器学习的一般框架:

 训练集 => 提取特征向量 => 结合一定的算法(分类器:比如决策树,KNN)=>得到结果

3. 介绍:

 3.1 例子:

这里写图片描述

将上图黑点与白点用超平面(这里可以认为就是一条直线)分开,但是哪条直线更好呢?3.2 SVM寻找区分两类的超平面(hyper plane), 使边际(margin)最大

这里写图片描述

 总共可以有多少个可能的超平面?无数条 如何选取使边际(margin)最大的超平面 (Max Margin Hyperplane)? 超平面到一侧最近点的距离等于到另一侧最近点的距离,两侧的两个超平面平行

3. 线性可区分(linear separable) 和 线性不可区分 (linear inseparable)
这里写图片描述
这里写图片描述
这里写图片描述

4. 定义与公式建立

超平面可以定义为:这里写图片描述
W: weight vectot, 这里写图片描述 , n 是特征值的个数
X: 训练实例
b: bias
这里写图片描述
4.1 假设2维特征向量:X = (x1, X2)
把 b 想象为额外的 wight
超平面方程变为: 这里写图片描述
所有超平面右上方的点满足:这里写图片描述
所有超平面左下方的点满足:这里写图片描述
调整weight,使超平面定义边际的两边:这里写图片描述
综合以上两式,得到:这里写图片描述 (1)
所有坐落在边际的两边的的超平面上的被称作”支持向量(support vectors)”
分界的超平面和H1或H2上任意一点的距离为 这里写图片描述 (i.e.: 其中||W||是向量的范数(norm))这里写图片描述
所以,最大边际距离为:这里写图片描述

5. 求解

5.1 SVM如何找出最大边际的超平面呢(MMH)?

利用一些数学推倒,以上公式 (1)可变为有限制的凸优化问题(convex quadratic optimization)利用 Karush-Kuhn-Tucker (KKT)条件和拉格朗日公式,可以推出MMH可以被表示为以下“决定边界 (decision boundary)” 这里写图片描述
其中:
{y_i} 是支持向量点{X_i} (support vector)的类别标记(class label){X^T}是要测试的实例
{\alpha _i} 和 {b_0} 都是单一数值型参数,由以上提到的最有算法得出l 是支持向量点的个数

5.2 对于任何测试(要归类的)实例,带入以上公式,得出的符号是正还是负决定

6. 例子:

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

7.SVM的特性

1.1 训练好的模型的算法复杂度是由支持向量的个数决定的,而不是由数据的维度决定的。所以SVM不太容易产生overfitting
1.2 SVM训练出来的模型完全依赖于支持向量(Support Vectors), 即使训练集里面所有非支持向量的点都被去除,重复训练过程,结果仍然会得到完全一样的模型。
1.3 一个SVM如果训练得出的支持向量个数比较小,SVM训练出的模型比较容易被泛化。
其实总结下来如下:
优点:泛化错误低,计算开销不大,结果容易理解。
缺点:对参数调节和核函数的选择敏感,原始分类器不加修改仅适用于处理二分类问题。
适用数据类型:数值型和标称型数据。

2. 线性不可分的情况 (linearly inseparable case)

2.1 数据集在空间中对应的向量不可被一个超平面区分开

这里写图片描述

2.2 两个步骤来解决:
2.2.1 利用一个非线性的映射把原数据集中的向量点转化到一个更高维度的空间中
2.2.2 在这个高维度的空间中找一个线性的超平面来根据线性可分的情况处理
2.2.3 视觉化演示 https://www.youtube.com/watch?v=3liCbRZPrZA

2.3 如何利用非线性映射把原始数据转化到高维中?
2.3.1 例子:
3维输入向量:这里写图片描述
转化到6维空间 Z 中去: 这里写图片描述这里写图片描述
新的决策超平面:这里写图片描述 其中W和Z是向量,这个超平面是线性的解出W和b之后,并且带入回原方程:这里写图片描述

2.3.2 思考问题:

2.3.2.1: 如何选择合理的非线性转化把数据转到高纬度中?
2.3.2.2: 如何解决计算内积时算法复杂度非常高的问题?

2.3.3 使用核方法(kernel trick)
3. 核方法(kernel trick)
3.1 动机
在线性SVM中转化为最优化问题时求解的公式计算都是以内积(dot product)的形式出现的这里写图片描述,其中 这里写图片描述是把训练集中的向量点转化到高维的非线性映射函数,因为内积的算法复杂 度非常大,所以我们利用核函数来取代计算非线性映射函数的内积

3.1 以下核函数和非线性映射函数的内积等同
这里写图片描述

3.2 常用的核函数(kernel functions)

  • h度多项式核函数(polynomial kernel of degree h): 这里写图片描述
  • 高斯径向基核函数(Gaussian radial basis function kernel): 这里写图片描述

  • S型核函数(Sigmoid function kernel): 这里写图片描述

    如何选择使用哪个kernel?

    根据先验知识,比如图像分类,通常使用RBF,文字不使用RBF
    尝试不同的kernel,根据结果准确度而定

3.3 核函数举例:
假设定义两个向量: x = (x1, x2, x3); y = (y1, y2, y3)
定义方程:f(x) = (x1x1, x1x2, x1x3, x2x1, x2x2, x2x3, x3x1, x3x2, x3x3)

  K(x, y ) = (<x, y>)^2  假设x = (1, 2, 3); y = (4, 5, 6).        f(x) = (1, 2, 3, 2, 4, 6, 3, 6, 9)        f(y) = (16, 20, 24, 20, 25, 36, 24, 30, 36)        <f(x), f(y)> = 16 + 40 + 72 + 40 + 100+ 180 + 72 + 180 + 324 = 1024       K(x, y) = (4  + 10 + 18 ) ^2 = 32^2 = 1024       同样的结果,使用kernel方法计算容易很多

4. SVM扩展可解决多个类别分类问题
对于每个类,有一个当前类和其他类的二类分类器(one-vs-rest)

原创粉丝点击