一、简单的支持向量分类(完全线性可分的数据)
1、线性分类SVM:用线或者面完全分割,用硬间隔就行。
2、有异常点的不能用简单的线性分割,用软间隔进行处理:容忍部分错误分类。如下图
二、复杂SVM分类(处理完全线性不可分的数据)
1、将低维数据映射到高维(核函数)
K(x,z)=ϕ(xi)∙ϕ(xj)
为了避免维数爆炸,核函数采用在低维运算,然后投射到高维而不是直接在高维运算。
2、核函数分类
2.1、线性核函数(Linear Kernel)
其实就是我们前两篇的线性可分SVM,表达式为:
也就是说,线性可分SVM我们可以和线性不可分SVM归为一类,区别仅仅在于线性可分SVM用的是线性核函数。
2.2、多项式核函数(Polynomial Kernel)
是线性不可分SVM常用的核函数之一,表达式为:
其中,γ,r,dγ,r,d都需要自己调参定义。
2.3、高斯核函数(Gaussian Kernel)
在SVM中也称为径向基核函数(Radial Basis Function,RBF),它是非线性分类SVM最主流的核函数。libsvm默认的核函数就是它。表达式为:
其中,γγ大于0,需要自己调参定义。
2.4、Sigmoid核函数(Sigmoid Kernel)
也是线性不可分SVM常用的核函数之一,表达式为:
其中,γ,rγ,r都需要自己调参定义。
3、svm流程
输入是m个样本(x1,y1),(x2,y2),...,(xm,ym),(x1,y1),(x2,y2),...,(xm,ym),,其中x为n维特征向量。y为二元输出,值为1,或者-1.
输出是分离超平面的参数w∗和b∗w∗和b∗和分类决策函数。
1)选择适当的核函数K(x,z)K(x,z)和一个惩罚系数C>0C>0, 构造约束优化问题
2)用SMO算法求出上式最小时对应的αα向量的值α∗α∗向量.
3) 得到w∗,此处可以不直接显式的计算w∗w∗。
4) 找出所有的S个支持向量,即满足0<αs<C0<αs<C对应的样本(xs,ys)(xs,ys)------(SMO算法是一种启发式的方法。它每次只优化两个变量,将其他的变量都视为常数)
三、svm回归
回归模型目标函数与分类模型保持一致为约束条件不是让各个训练集中的点尽量远离自己类别一边的的支持向量,因为我们是回归模型,没有类别。
对于回归模型,我们的目标是让训练集中的每个点(xi,yi)(xi,yi),尽量拟合到一个线性模型yi =w∙ϕ(xi)+byi =w∙ϕ(xi)+b。对于一般的回归模型,我们是用均方差作为损失函数,但是SVM不是这样定义损失函数的。
四、总结
SVM算法是一个很优秀的算法,在集成学习和神经网络之类的算法没有表现出优越性能前,SVM基本占据了分类模型的统治地位。目前则是在大数据时代的大样本背景下,SVM由于其在大样本时超级大的计算量,热度有所下降,
但是仍然是一个常用的机器学习算法。
SVM算法的主要优点有:
1) 解决高维特征的分类问题和回归问题很有效,在特征维度大于样本数时依然有很好的效果。
2) 仅仅使用一部分支持向量来做超平面的决策,无需依赖全部数据。
3) 有大量的核函数可以使用,从而可以很灵活的来解决各种非线性的分类回归问题。
4)样本量不是海量数据的时候,分类准确率高,泛化能力强。
SVM算法的主要缺点有:
1) 如果特征维度远远大于样本数,则SVM表现一般。
2) SVM在样本量非常大,核函数映射维度非常高时,计算量过大,不太适合使用。
3)非线性问题的核函数的选择没有通用标准,难以选择一个合适的核函数。
4)SVM对缺失数据敏感。