本章内容主要有:
1.线性SVM算法描述;
2.非线性SVM算法描述;
3.SVM回归算法描述;
4.SVM的数学原理;
支持向量机(support vector machine SVM):可以完成分类,回归,异常检测等任务。擅长中小型复杂数据集的分类问题,大型的非线性数据需要神经网络。
- 线性SVM算法描述:
在普通的线性可分的线性数据集中我们可以轻易的找出一条甚至多条“边界”完美的对数据进行类别划分,如左图所示:但这样的划分存在一个严重的问题:由于边界相对于实例过于接近当有新实例加入时,模型泛化能力可能会比较弱。
为了解决这个问题,我们可以使用SVM支持向量机,右图中绿色的线为决策边界,好处在于完美分类的同时离实例足够远,解决了上面的问题。
我们可以将SVM分类器看成是在不同类别中找出最宽的“街道”,让决策边界距离实例“足够远” ,这种找街道的方法也称为大间隔分类(large margin classification),值得注意的是,当我们在街道以外的地方训练实例时,不会对决策边界产生影响,换句话说我们的决策边界是由街道的边缘决定的,而街道的边缘是由实例所支持决定的,所以这种算法被很形象的称为支持向量机。 - 硬间隔分类:让所有实例都在正确的一边的分类。
硬间隔分类的问题:要求数据必须为线性可分;对数据异常值十分敏感,异常值可能导致硬间隔分类失败;
软间隔分类:在“街道”的宽度和间隔违例(错误分类)之间找到良好的平衡的分类。 - 非线性SVM算法描述
1.方法一:添加特征
当数据集为非线性分布时数据会表现的线性不可分,传统的直线型“街道”就无法满足分类需求。针对这个问题,可以通过向数据集中添加特征来使数据集变的线性可分离:如下图一所示,原始的数据由于其分布特点无法用传统的线性模型划分,那么在此基础上我们将原始数据集平方后作为新的特征加入其中,重新绘制散点图得到图二数据,添加特征后的数据变得线性可分离,使用普通线性模型即可以轻易分离。 - 这种方法容易理解和实现,并且对几乎所有的机器学习算法都十分有效。不过当多项式特征比较低阶,处理不了非常复杂的数据,而高阶的特征则会使特征数量爆炸导致模型十分缓慢。
方法一的简便版本:核技巧
在SVM使用中可以使用核技巧(一个神奇的数学技巧),他可以实现跟添加特征相同的效果,但并没有真的添加特征,所以巧妙的避免了特征数量的爆炸。(使用SVC类,指定kernel=“ploy”实现)
2.方法二:添加相似特征(关于书中高斯RBF的计算看的不是很懂,这部分等之后看懂了再补上具体操作流程吧)
相似特征是经由相似函数计算得出,相似函数计算每个实例与一个特定地标之间的相似度。原始数据经过计算后,就会变得线性可分离。
方法二的简便版本:高斯RBF核函数
在SVM使用中可以使用核技巧(一个神奇的数学技巧),他可以实现跟添加特征相同的效果,但并没有真的添加特征,所以巧妙的避免了特征数量的爆炸。(使用SVC类,指定kernel=“rbf”实现)
用于SVM分类的sklearn类的比较
类 | 时间复杂度 | 是否支持核外 | 是否需要缩放 | 核技巧 |
LinearSVC | o(m*n) | 否 | 是 | 否 |
SGDClassifier | o(m*n) | 是 | 是 | 否 |
SVC | o(mmn)- o(mmm*n) | 否 | 是 | 是 |
- SVM回归算法描述 SVM也可以处理线性和非线性两种类型的回归。实现的原理与分类刚好相反,分类在于找一条没有实例的尽可能宽的街道,而回归的原理则在于找一条尽可能覆盖所有实例的街道。 图一间隔较大,图二间隔较小,在间隔内添加实例并不会影响街道的宽度,所以这个模型被称为间隔不敏感。
可以使用核化的SVM模型来解决非线性回归任务(不同的核效果不同,数据集为随机二次训练集):- SVM的数学原理 1.线性SVM分类器数学原理:
上图(图片来源于阅读书籍)为SVM决策函数的模型,数据集有两个特征,所以是一个二维平面,决策边界(两平面相交处的实线)为决策函数等于0的点的集合。虚线表示决策函数等于1或-1的点的集合,相互平行且与决策边界等距,从而形成一个间隔。
训练SVM的过程也就是寻找最宽街道的过程,即找到W和b的值使得间隔最大,同时避免硬间隔和减少间隔违例。
2.硬间隔SVM分类目标数学原理:
由上述分类原理可得,当决策函数的斜率“W”越小(两个平面间夹角越小),间隔会越大街道就越宽,所以为了追求街道尽可能的宽我们可以通过约束斜率“W”来实现。
2.软间隔SVM分类目标数学原理:
软间隔追求在街道尽可能宽的同时使得间隔违例最少。这里通过给硬间隔公式引入松弛变量实现:
3.对偶问题:
针对一个给定的约束优化问题称之为原始问题,通常也可以用两一个不同但与原始问题密切相关的问题来表达,这个与之不同但关系密切的问题称为对偶问题。大部分情况下可以通过对偶问题算的原始问题的下限,但是好巧不巧SVM的对偶问题刚好与原始问题有相同的解,所以在SVM中我们既可以使用原始问题也可以使用对偶问题解决,接下来给出SVM的对偶形式:
当得到该等式最小化的向量阿尔法,就可以使用如下公式计算原始问题最小化的W和b:
4.核化SVM:
原始问题解决数据转换方法如下,为原始数据添加特征:
使用对偶问题最棒的地方在于它实现了核技巧!
在对数据集进行转换时会经常遇到特征数量爆炸的问题,核技巧通过巧妙的数学运算,直接跳过了这一过程而实现完全相同的效果:接下来我们看看麻烦的数据转换如何经过数学的魔法(二阶多项式核为例):
常用的核函数如下:
5.如何使用核化SVM所得结果做出预测:
6.如何使用核化SVM所得结果计算偏置项: