SVM是一种二分类模型,是定义在特征空间上的间隔最大化(分离超平面)的线性分类器,(间隔最大使它有别于感知机)。
适合小样本(非线性、高维模式)学习。高维稀疏、样本少(参数只与sv有关,数量少,所以需要的样本少,由于参数跟维度没有关系,所以可以处理高维问题)。
模型 -----> 分离超平面;
策略 -----> 间隔最大化;(分类决策函数:
)
学习算法 -----> 凸二次优化;
(1)当训练样本线性可分时,通过硬间隔最大化,学习一个线性分类器(线性可分SVM)。
(2)当训练样本近似线性可分时,引入松弛变量,通过软间隔最大化,学习一个线性分类器(线性SVM)。
(3)当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性SVM。
因为一个点距离分离超平面的远近可以表示分类预测的确信程度,而
的符号与类标记y的符号是否一致能够表示分类是否正确,所以可用
来表示分类的正确性及确信度,即函数间隔
。
又因为成比例地改变w和b,函数间隔也将以相应比例变化,这时对w规范化,使,使得间隔是确定的,此时即几何间隔:
学习策略:间隔最大化,即求解能够正确划分训练数据集且几何间隔最大的分离超平面。
几何间隔--->函数间隔
原始问题(最优化)
在线性可分情况下,训练数据集的样本点中与分离超平面距离最近的样本点的实例称为支持向量,满足
在决定分离超平面时只有支持向量起作用,而其他实例点并不起作用。SV的个数一般很少,所以SVM由很少的“重要的”训练样本确定。
线性不可分意味着某些样本点outliers(),不能满足函数间隔>=1的约束条件,为此可对每个样本点引进一个松弛变量
,使函数间隔加上
。即
其中C(>0)为惩罚参数,C值大时对误差分数的惩罚增大。
最小目标函数即(1),使间隔尽量大(2),使误分类点个数尽量小。
当训练数据线性可分时,存在无穷个分离超平面可以将两类数据正确分开。
线性可分SVM利用间隔最大化求得最优分离超平面,这时解是唯一的;
另一方面,此时的分隔超平面所产生的分类结果是最鲁棒的,对未知实例的泛化能力最强。
并说明几何间隔、函数间隔及从函数间隔到求解
时的w,b(即最大间隔的由来)。
1. 对偶问题往往更容易求解;(结合拉格朗日和KKT条件)
2. 自然引入核函数,进而推广到非线性分类问题。(拉格朗日表达式中有内积,而核函数也是通过内积进行映射的。)
针对原始问题,应用拉格朗日对偶性,通过求解对偶问题得到原始问题的最优解。
优点:
1. 对偶问题往往更容易求解;
2. 自然引入核函数,进而推广到非线性分类问题。
为每一个不等式约束(2),引进拉格朗日乘子
定义拉格朗日函数:------(3)
根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题。
求
KKT条件
------------ (3)
------------ (4)
------------ (5)
由(3)得:
其中
由以上得:
将以上带入(3)得:
再求即是对偶问题:
由上得svm的对偶形式为:
SMO(启发式算法):
如果所有变量的解都满足此最优化问题的KKT条件,那么这个最优化问题的解就得到了。因为KKT条件是该最优化问题的充要条件。
当样本在原始空间线性不可分时,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。
在特征空间的内积=它们在原始样本空间中通过K计算的结果。
特征空间维数可能很高,甚至可能是无穷维,因此直接计算是比较困难的。
在学习预测中,只定义核函数K(x,y),而不显示定义。
1. 多项式核函数
2. 高斯核函数
又叫径向基核函数(RBF核)
Gauss径向基函数是局部性强的核函数,其外推为随着增大而减弱,这个核会将原始空间映射为无穷维。若
很大,高次特征上的权重实际上衰减的非常快,相当于一个低维的子空间;若
很小,此时泰勒展开式中有效的项将变得非常多,那么就相当于映射到了一个无穷维的空间,任意数据都将变得线性可分,但可能会带来严重的过拟合。
3. 字符串核函数
4. 线性核函数
5. 拉普拉斯核函数
6. sigmoid核函数
线性核的训练速度快,一般情况下效果还不错,在高维情况下,其他核需要调参(CV),速度慢。
高斯核必然映射到无穷维,因为核函数的泰勒展开有无穷多项。
径向基RBF核需要计算e的幂,比较耗时。
多项式核参数众多,难调,但其结果更加直观,可解释性强,所以如果对数据有一定的了解,可以考虑使用多项式核。
(1)特征数量很大,与样本数量差不多时(此时特征够用了,很大可能是线性问题,没必要映射到高维空间),选用LR或Linear核的SVM。
(2)特征数量比较小,样本数量一般(不算大也不算小),选用SVM+高斯核。
(3)特征数量比较小,而样本数量很多,需要手工添加一些特征,变为第一种情况。
此处的缺失数据指缺失某些特征的数据,即向量数据不完整。SVM没有处理缺失值的策略(决策树有),而SVM希望样本在特征空间中线性可分,所以缺失数据将影响训练结果的好坏。
解决方法:
1. 对多数类和少数类采用不同的惩罚因子;
2. 采用既能代表多数类样本分布的特征,又能对分类界面有一定影响的样本特征欠抽样方法。
对训练器进行组合,一对一,一对多,...
1. 一对多(one-vs-all)
针对每个类都训练出一个分类器(该类为正类,其余类为负类),这样针对k个类可以训练出K个分类器,当有一个新样本时,用着k个分类器来预测,哪个分类器的概率高,样本就属于哪一类。缺点是偏差高。
2. 一对一(one-vs-one)
针对任意两个类训练出一个分类器,若有k类,需训练出
(k(k-1)/2)个分类器,当有一个新样本时,用这
个分类器来预测,每当被判定为某一类时,该类就加一,最后票数最多的类别被认定为该样本的类。libsvm是这么做的,虽然分类器多,但训练速度要比一对多快,因为训练复杂度与样本数量有关。
使用RBF核,调整C和Y(使用交互验证),RBF参数少(样本数量>>特征数量),模型简单。
大值特征会掩盖小值特征(内积计算),对偶问题的优化目标函数中有向量的内积计算,RBF中也有向量的距离计算,小值特征会被忽略,影响算法的精度。
几何间隔与样本的误分类次数间存在关系:
误分类次数<=,其中
为样本分类间隔距离;R为所有样本中的最长向量值。
1. 可用于线性分类、非线性分类以及回归问题;
2. 低泛化误差;
3. 容易解释(思想简单,将样本与决策面的间隔最大化),分类效果好;
4. 计算复杂度较低。
1. 对参数和核函数比较敏感;
2. 原始的SVM只比较擅长处理二分类问题;
3. 对大规模数据训练比较困难。