转载请注明作者和出处:http://blog.csdn.net/john_bh/
运行平台: Windows
Python版本: Python3.6
IDE: Sublime text3
一、什么是SVM
支持向量机(support vector machines)是一种二分类模型,它的基本模型是定义在特征空间上的最大间隔的线性分类器,间隔最大化是他有别于感知机(旨在求出将训练数据进行划分的分离超平面,采用的是误分类最小策略),从而将数据分开。
1.1 SVM学习方法模型
线性可分SVM:当训练数据线性可分时,通过硬间隔最大化(所有样本都必须划分正确),学习一个线性分类器,即线性可分支持向量机,又称为硬间隔支持向量机。
线性SVM:当训练数据近似线性可分时,通过软间隔最大化(允许一些样本不满足条件,即允许错分),学习一个线性分类器,即线性支持向量机,又称为软间隔支持向量机。
非线性SVM:当训练数据线性不可分时,通过使用核技巧和软间隔最大化,学习一个线性分类器,即非线性支持向量机。
1.2 相关概念
支持向量机学习的目标是在特征空间中找到一个分离超平面,能将实例分到不同的类。定义分离超平面目标函数为:
其中 w=(wi,w2,...,wd) 为法向量,决定了超平面的方向; b 为位移项,决定了超平面与原点之间的距离。
样本空间中任意一点
1.2.1 函数间隔和几何间隔
1.2.2 间隔最大化
svm为什么采用间隔最大化?
当训练数据线性可分时,存在无穷多个分离超平面可以将两类数据正确分开,感知机利用的是误分类最小策略求得分离超平面,不过此时的解有无穷多个,而线性可分SVM,利用间隔最大化求得的最有超平面有且只有一个,另外,此时的分割超平面所产生的分类效果也是最鲁棒的,对未知实例的泛化能力最强。
1.2.3 对偶算法及拉格朗日乘子法
1.2.4 KKT条件
1.2.5 SMO算法
序列最小最优化(sequential minimal optimization,SMO)算法是一种启发式算法。基本思路是:
如果所有变量都满足次最优化问题的KKT条件(Karush-Kuhn-Tucker conditions),那么这个最优化问题的解就得到了。因为KKT条件是该最优化问题的充分必要条件,,否则选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题,这个
先固定
αi
之外的所有参数,然后求
αi
上的极值。
1.2.6 核函数
二、SVM算法推导
2.1 线性可分SVM算法推导
2.2 线性SVM算法推导
2.3 非线性SVM算法推导
三、总结
3.1 SVM的优缺点
优点:泛化错误率低,计算开销不大,结果容易解释
缺点:对参数的调节和核函数的选择敏感,演示分类器不加修改仅适用于处理二类问题。
适用数据类型:数值型和标称型数据
3.2 SVM应用的一般框架
SVM的一般流程:
- 收集数据:可以使用任意方法
- 准备数据:需要数值型数据
- 分析数据:有助于可视化分割超平面
- 训练算法:SVM的大部分时间都源自训练,该过程主要实现两个参数的调优
- 测试算法:十分简单的计算过程就可以实现
- 使用算法:几乎所有分类问题都可以使用SVM,值得一提的是,SVM本身是一个二类分类器,对多类问题应用SVM需要对代码做一些修改。