本章内容
简单介绍支持向量机
利用SMO进行优化
利用核函数对数据进行空间转换
将SVM和其他分类器进行对比
有人认为,SVM是最好的现成的分类器,“现成”指的是分类器不加修改即可直接使用。同时,意味着在数据上应用基本形式的SVM分类器就可以得到低错误率的结果。SVM能够对训练集之外的数据点做出很好的分类决策。
SVM有很多实现,先介绍最流行的一种实现,序列最小优化(Sequential Minimal Optimization,SMO) 算法。之后再介绍如何使用一种称为核函数 的方式将SVM扩展到更多数据集上。
SVM的一般流程
(1)收集数据:可以使用任意方法
(2)准备数据:需要数值型数据
(3)分析数据:有助于可视化分割超平面
(4)训练算法:SVM的大部分时间都源自训练,该过程主要实现两个参数的调优。
(5)测试算法:十分简单的计算过程就可以实现。
(6)使用算法:几乎所有分类问题都可以使用SVM,值得一提的是,SVM本身是一个二分类器,对多类问题应用SVM需要对代码做一些修改。
对上面两个式子使用拉格朗日乘子法可得:
对L(w,b,a)对w,b的偏导为零可得:
将上式代入L(w,b,a)中可以得到下面两个式子:
解出a后,求出w与b即可得到模型:
SMO高效优化算法
原理: 每次循环中选择两个alpha进行优化处理。一旦找到一对合适的alpha,那么就增大其中一个同时减小另一个。这两个alpha必须要在间隔边界之外,并且没有进行过区间化处理或者不在边界上。
SMO算法伪代码如下:
创建一个alpha向量并将其初始化为0向量
当迭代次数小于最大迭代次数时(外循环):
对数据集中的每个数据向量(内循环):
如果该数据向量可以被优化:
随机选择另外一个数据向量
同时优化这两个向量
如果两个向量都不能被优化,退出内循环
如果所有向量都没有被优化,增加迭代数目,继续下一次循环
完整版Platt SMO算法加速优化
改进之处:选择alpha的方式上。Platt SMO算法是通过一个外循环来选择第一个alpha值,并且其选择过程会在两种方式之间进行交替:一种方式是在所有数据集上进行单边扫描,另一种方式则是在非边界alpha中实现单边扫描。在选择第一个alpha值后,算法会通过一个内循环来选择第二个alpha值。