SVM
SVM:Support Vector Machine
中文名:支持向量机
学习模型
有监督学习:需要事先对数据打上分类标签,这样机器就知道数据属于哪一类。
无监督学习:数据没有打上分类标签,有可能因为不具备先验知识,或打标签的成本很高,需要机器代替我们部分完成改工作,比如将数据进行聚类,方便后人工对每个类进行分析。
SVM 是有监督的学习模型:可以进行模式识别、分类以及回归分析。
SVM工作原理
示例: 桌面上有两种颜色混乱的小球,我们将这两种小球来区分开,我们猛拍桌子小球会腾起,在腾空的那一刹那,会出现一个水平切面,将两种颜色的球分开来。
原因: 二维平面无法找出一条直线来区分小球颜色,但是在三位空间。我们可以找到一个平面来区分小球颜色,该平面我们叫做超平面。
SVM计算过程: 就是帮我们找到一个超平面的过程,该超平面就是 SVM分类器。
分类间隔
我们在示例中,会找到一个决策面来将小球颜色分离,在保证决策面C不变,且分类不产生错误的情况下,我们可以移动决策面,来产生两个极限位置:决策面A和决策面B,分界线C就是最优决策面,极限位置到最优决策面的距离就是 分类间隔 。
我们可以转动最优决策面,会发现存在多个最优决策面,它们都能把数据集正确分开,这些最优决策面的分类间隔可能是不同的,拥有最大间隔的决策面就是 SVM 需要的最优解。
点到超平面距离公式
决策面在一维空间就是一个点、二维空间就是一条直线、三维空间就是一个平面,当空间维度更多,这个线性函数名称叫做 “超平面”: g ( x ) = w T x + b g(x) = w^Tx + b g(x)=wTx+b,其中 w , x ∈ R n w,x\in R^n w,x∈Rn
w、x是n维空间里的向量,其中x是函数变量,w是法向量。法向量指的是垂直于平面直线所表示的向量,决定超平面的方向。
SVM就是帮我们找到一个超平面 ,这个超平面能将不同样本划分,使得样本集中的点到这个分类超平面的最小距离(分类间隔)最大化,在这个过程中 支持向量 就是离 分类超平面 最近的样本点,如果确定了支持向量也就确定了这个超平面,所以支持向量决定了分类间隔是多少,在最大间隔以外的样本点,对分类都没有意义。
SVM就是求解 最大分类间隔的过程,我们还要对分类间隔大小进行定义。
定义某类样本集到超平面的距离就是这个样本集合内的样本到超平面的最短距离,用di
代表点xi
到超平面wxi+b=0
的欧氏距离。因此我们求di
最小值,计算公式
d
i
=
∣
w
x
i
+
b
∣
∣
∣
w
∣
∣
d_i = \frac{|wx_i + b|}{||w||}
di=∣∣w∣∣∣wxi+b∣,其中
∣
∣
w
∣
∣
||w||
∣∣w∣∣为超平面的范数,di
可以用解析几何知识进行推导。
最大间隔优化模型
目标: 找出所有分类间隔中最大的那个值对应的超平面。
硬间隔、软间隔和非线性SVM
- 数据线性可分:模型称为硬间隔支持向量机
- 硬间隔:完全分类准确,不存在分类错误的情况
- 软间隔:允许一定量的样本分类错误
- 非线性数据:模型称为非线性支持向量机
非线性数据集合: 两种颜色的小球,呈现大小圆环的形状。
非线性数据集合,不论多高级的分类器,只要映射函数是线性的,就没办法处理,SVM
也处理不了。
核函数: 可以将样本从原始空间映射到一个更高的特质空间中,使得样本在新空间中线性可分,我们就以可以使用原来的推到进行计算,所有推到都是在新空间,而不是在原来的空间中进行。
在非线性SVM
中,核函数的选择就是影响SVM
最大的变量,下面是常用的核函数
- 线性核
- 多项式核
- 高斯核
- 拉普拉斯核
- sigmoid核
这些函数的区别在于映射方式的不同,通过核函数就能把样本空间投射到新的高维空间中。
结果: 软间隔和核函数的提出,都是为了方便对超平面公式中的w和b进行求解,得到最大分类间隔的超平面。
SVM解决多分类问题
SVM
本身就是一个二值分类器,最初是为二分类问题设计的,就是回答Yes/No
,但是实际解决的问题,可能是多分类情况,比如:文本进行分类、图像进行识别。
多分类情况,可以将多个二分类器组合起来形成一个多分类器,常见方法有一对多法、一对一法两种。
一对多法
我们将物体分为A、B、C、D四种分类,先把其中的一类作为分类1,其他类归为分类2,我们来构造4种SVM
,分为以下情况:
- 样本A作为正集,B、C、D作为负集
- 样本B作为正集,A、C、D作为负集
- 样本C作为正集,A、B、D作为负集
- 样本D作为正集,A、B、C作为负集
优点: 针对K个分类,需要训练K个分类器,分类速度较快
缺点: 训练速度慢,每个分类器需要对全部样本进行训练,而且负样本数量远大于正样本数量,会造成样本不对称情况,而且增加新的非累,需要重新对分类器进行构造。
一对一法
任意两类样本之间构造一个SVM
,这样针对K
类的样本,就会有
C
(
k
,
2
)
C(k,2)
C(k,2)类分类器,训练的时候更加灵活。
我们划分A、B、C三个类,可以构造3个分类器:
- 分类器:A、B
- 分类器:A、C
- 分类器:B、C
当对一个未知样本进行分类,每一个分类器有一个分类器结果,为1票,最终得票最多的类就是整个未知样本的类别。
优点: 新增一类,不需要重新训练所有的SVM
,只需要训练和新增这一类样本的分类器,在训练单个SVM
模型的时候,训练速度很快。
缺点: 分类器的个数与K
的平方成正比,当K
较大时,训练和测试的时间会比较慢。