上篇博客讲到感知机是支持向量机(SVM)的基础。支持向量机同样采用分离超平面(或超曲面)来分离正负样本,故支持向量机是二分类分类器。支持向量机是一个非常广泛的领域,不是一两篇博客就能说清楚的,本文简单说下支持向量机的分类原理。支持向量机按简单到复杂分为线性可分支持向量机、线性支持向量机以及非线性支持向量机。
核心思想
找到分离超平面(超曲面),使得距离超平面最近的点到超平面距离最大。
与感知机的区别
两者同样是采用训练数据集训练模型,获取分离超平面。但感知机仅仅是分离而已,至于分离效果好不好无法保证,因此存在多个分离超平面来分离正负实例,而当样本无法线性分离时,该分离超平面不存在。
支持向量机不仅仅能分离,而且能使分离效果最好,那么分离效果最好如何衡量呢?即距离分离超平面最近的点到分离超平面距离最大。
线性可分支持向量机
同感知机模型,线性可分支持向量机只能处理线性可分的数据集,是最基础的支持向量机。
模型
基本概念
函数间隔:
几何间隔:
支持向量:与分离超平面距离最近的两个样本点(一正一负)
间隔边界:两个支持向量所在的平行的两个超平面
分离超平面:平行且位于两个间隔边界*的超平面
线性可分支持向量机的模型就是基于分离超平面的决策函数。
策略
找到分离超平面是一个含有不等式约束的最优化问题:
学习
求解上面的拉格朗日对偶问题的方法有很多,最常用的是序列最小最优化(SMO)算法,后面的博客会讲到。
线性支持向量机
线性支持向量机是考虑到数据集是线性不可分的,也就是说找不到分离超平面将正负实例完全分离开。这反映到上面的最优化问题上就是某些样本点不满足条件 。解决方法就是引入软间隔,即允许样本点跨越间隔边界。反映到约束条件上就是:
线性支持向量机的支持向量没有线性可分情况下好理解,可以将支持向量分为间隔边界上的支持向量、间隔边界与分离超平面间的支持向量、分离超平面上的支持向量和误分一侧的支持向量。KKT条件中有如下两个条件
1.当时,不等于0,那么一定等于0,即该支持向量位于间隔边界上。
2.当时,是分离比较糟糕的样本,支持向量不在正确一侧的间隔边界上。此时当,支持向量位于间隔边界与分离超平面间;当,支持向量位于分离超平面上;当支持向量位于误分一侧。
非线性支持向量机
由于实际生活中绝大多数数据是不能简单地用超平面分离的,这时考虑建立超曲面。即首先将数据从当前空间非线性映射到另一个高维空间,在映射后的空间中,数据是能用超平面分离的,那么在这个空间中建立超平面方程后,再非线性变换回去即可(类似于拉普拉斯变换解决问题的思路)。但是这种方法,存在明显的缺点,首先映射函数的选择很困难,无法保证映射后是能用超平面分离的,其次计算量巨大。这就需要用到核技巧。
核技巧说白了就是偷个懒,无论在当前空间还是映射空间,我们都仅需要求解两个样本的内积,那么直接将变换来变换去的两个非线性变换的过程省略即可,即隐式地变换。具体实现就要引入核函数。例如核函数,在映射后空间的内积就是,至于隐藏在其中的非线性变换有很多种,具体是啥?权当是黑箱。
问题简单了,只需要将线性支持向量机优化问题中的内积改成就可以了!
-支持向量机
上文讲到的支持向量机分类中涉及惩罚因子C,因此称为C-支持向量机,-支持向量机是在C-支持向量机基础上添加了另外一个参数来调节模型。的含义就是训练错误样本占比上限,也即支持向量个数占比下限。由于有明确的含义,调节起来比较方便。优化问题如下:可以看出,-支持向量机是在C-支持向量机的基础上添加了一个参数来调节支持向量的个数而已。默认的惩罚因子是,是可以另外设置的。(由于支持向量机是尺度可变的,故C的尺度依赖于输入数据的尺度,一般情况下可以将输入X的每个维度都归一化处理,sklearn和LIBSVM等支持向量包中C默认是1.0
我的GitHub
注:如有不当之处,请指正。