SVM支持向量机
SVM(Support Vector Machines) 支持向量机
引言
svm有很多的实现,此处介绍最流行的一种实现 序列最小化 SMO(Sequential Minimal Optimizaiton)
核函数(Kernel): 将SVM扩展到更多的数据集上
基于最大间隔分割数据
优点:
泛化错误率比较低, 计算开销不大,结果易解释
缺点:
对参数调节和核函数的选择敏感, 原始分类器不加修改仅仅适用于二分类问题
适用数据类型:
数值型和标称型数据
概述
二维平面,对线性可分的的数据集,我们只需要一条直线可将,数据集进行分类,
在三维平面,对于数据集的分类,需要一个平面需要一个平面来进行分类,依次类推,在n为平面中,对数据的分类,则需要一个一超平面来将数据进行分类。 这个将数据分隔开的平面,称为
分隔超平面(可能有多个), 也就是分类的决策边界。
同时,数据点距离决策边界越远,那么其最后的预测结果越可信, 支持向量则是距离分隔超平面最近的那些点集。
目的: 最大化支持向量到分隔超平面的距离,即找到一个最优的分隔超平面,使得支持向量到其距离最远。
最大间隔
超平面形式: y = w[T]*x + b, 计算点A到分隔超平面的距离, 必须给出到分隔面的法线或垂线的长度, 该值为:|w[T] * A + b| / ||w||。
输入数据给分类器会输出一个类别标签,相当于sigmoid函数,在这里统一使用海维赛德阶跃函数, 即单位阶跃函数,输出得到 -1 或者 +1。
使用 正负1 有利于数学上的处理,label * (w[T] * x + b) 会得到一个很大正数,从而只需要找出分类器中的w和b。为此需要找到支持向量,最小间隔的数据点,然后对间隔进行优化,即:
argmax[w, b] {min[n] (label (w[T]x + b)) (1/||w||)}
即,超平面固定时,找到最小的间隔点,在找到所有超平面的最小的间隔点后,在已知间隔点下,找到间隔最大的超平面。
数学上的计算优化:
由于上述问题求解很困难,需要转换形式
方式:固定一个因子而最大化其他因子
由于使用的单位越阶函数,令所有label * (w[T] * x + n) 为 1,但是只有那些距离分隔超平面的最近的点的值才是1,距离越远的点其值越大。
基于上述问题,给出约束条件,然后求解最优值,转换为带约束条件的优化问题:
约束条件:
label * (w[T] * x + n) >= 1, 解决约束条件问题,常用方法拉格朗日乘子法, 通过引入拉格朗日乘子,基于约束条件,表述原来的问题,约束条件都是基于数据点。
上述的优化处理都是基于数据百分之百是线性可分的,但是实际中数据确又不“干净”,通过引入 松弛变量, 来允许有一些点可以处于分隔面的错误一侧,
SMO 优化算法
SMO: 将最大优化问题分解为多个小优化问题求解,小优化问题很容易求解,并且对其进行顺序求解的结果与它们作为整体求解结果完全一致