一、SVM算法理解
首先SVM(支持向量机)是一个用于分类、回归、异常值检测的监督学习方法,给定训练数据,通过找到一个分离超平面,对数据进行划分,超平面两侧即为两类不同类型。对于线性可分的训练数据集来说,能将数据分类的超平面有很多个,找到既可将训练数据分类,可信度又高的超平面,依赖于位于分割超平面上的训练数据,或距离超平面较近的数据,因此我们要找到的超平面是训练数据距离超平面的距离最远,最具有确信度的超平面。
为了度量训练数据距离超平面的距离,定义了函数间隔,几何间隔。函数间隔可以衡量当超平面确定时,每个训练数据距离该超平面的距离的情况,当超平面系数成倍增加时,函数间隔会成倍增加(ps:但是系数成倍增加的超平面表示的还是一个超平面),因此对于比较训练数据距离不同超平面的最小距离是无效的,而几何间隔可以衡量任一训练数据到任一超平面的距离。
由于超平面系数的不确定性,要在所有分离超平面中找到分类正确且确信度高的超平面,转化成求得所有训练数据集满足函数间隔大于等于1,求最小的几何间距的优化问题。对于为什么固定函数间隔为1,我的理解是因为我们是要从一系列不相同的分离超平面中找到几何间隔最小,分离效果最好的那个超平面,为了使得求得的分离超平面是互不相同的,因此固定训练数据集距离超平面的函数间隔最小为1,求得最大的几何间距。又显而易见的将求最大转换为求最小的问题。
确定了要优化的函数及条件,求解超平面,将其通过求对偶问题解决,首先构建拉格朗日函数,将原函数转化为拉格朗日函数的极小极大问题,通过证明又可以转化为求极大极小问题,又见满足KKN条件,可以求解出满足定理条件的各参数值,从而确定超平面。
对于线性不可分的数据,可以引入松弛系数来解决,在条件中用松弛变量来控制距离超平面的距离,在要优化的极值中加入损失控制,求解同线性可分的办法
对于非线性可分问题,引入核函数,正常思维是将现有的输入空间及要映射到高维的空间构造出来,并将映射的函数,以及映射得到的高维空间的内积定义出来,而核函数只是给出了映射后的内积形式,而对于核函数的构建需满足一定的条件(有定理证明了满足什么半正定的函数即为核函数),常见的核函数有多项式核函数,高斯径向基核函数,字符串核函数。。。。
关于SMO算法求解,基本思想是选择两个变量是变的,固定其他变量,用得到的解不断优化其他变量,需要的迭代的次数增多,但是减少了每次的迭代计算量。
掌握以上推倒公式。
二、SVM解决多分类问题
SVM也应用于多分类问题,两种方法解决,直接法,间接法。
直接法通过改造直接得出一个超平面可以分割出多个区域,表示不同类别,(ps我没见过哪里应用过);
间接法通过组合多个二分类问题解决多分类问题,组合方式有很多种,常用的有两种。
一种为 (one-versus-rest,简称1-v-r SVMs, OVR SVMs),即选取出一类,讲其余的所有类看成是一类,进行分类,这 样假设有n类,就需要构造n个分类器,最后在各个分类其中选择评分最高的结果,ps(但是明显存在着正负样本不均衡 的问题)。
一种方法为one versus one,即将所有样本进行排列组合,构造的分类器个数为n*(n-1)/2,最后判断测试样本 在每个分类器中的表现,根据投票原则,选择投票数结果最多的为最后结果,ps这种方法需要构造超级多的分类模型。
还有层次支持向量机,有向无环图等。
三、SVM代码实现
支持向量机的优缺点及在sklearn中的使用,详见链接sklean中文文档,原版链接sklearn英文文档,个人使用总结如下:
解决线性分类问题可用svc,linearsvc
非线性分类可用 nusvc,svc
class sklearn.svm.
SVC
(C=1.0, kernel=’rbf’, degree=3, gamma=’auto’, coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_si ze=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=’ovr’, random_state=None)
poly(多项式):(gamma*u'*v + coef0)^degree
RBF(高斯径向基):exp(-gamma|u-v|^2)
sigmoid:tanh(gamma*u'*v + coef0)
c表示误差项的罚值参数(float)
kernel核函数,默认是rbf,可选参数(‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed(格拉姆矩阵)’,或自定义核函数,自定义的核函数的形式是输出一个特定形式的矩阵)
degree:在核函数为多项式核时可调,默认值为3
gamma:当kernel = ‘poly’, ‘rbf’, ‘sigmoid’ 时,可调,默认值 = ‘aoto’ ,具体取值为1/特征数
coef0:只在kernel = ‘poly’, ‘sigmoid’ 时调节有意义,表示对应的常数项值
shrinking:boolean,是否使用shrinking heuristic?默认为true
probability:boolean, 是否启用概率估计,并在fit之前使用,为true时,会减慢算法的处理
tol:float,停止训练的误差值
cache_size :核函数缓存大小,默认值为200
class_weight :类别的权重,字典形式传递
verbose :允许冗余输出
max_iter :最大的迭代次数,默认是-1
decision_function_shape :多分类时的分类方法,ovo,ovr
random_state :随机
fit方法中传入类的权重值解决类的不平衡问题
四、SVM现实中应用场景及优缺点
http://www.xzbu.com/9/view-4741432.htm
优点:在高维空间,维度数量大于样本数量时分类效果较好,提供了不同的内核,亦可以自定义内核,可解决线性可分,线性不可分问题。
缺点:如果特征数量远大于数据的数量,该方法会导致较差的性能,使用五折交叉验证。
适合样本数量级为。。。。。。。。。。。的分类,使用内存的消耗。。。。。。。。。。。。。