9幅图快速理解支持向量机(SVM)的工作原理
作者:博观厚积
简书专栏:
https://www.jianshu.com/u/2f376f777ef1
支持向量机(Support Vector Machine,常简称为SVM)是一种监督式学习的方法,可广泛地应用于统计分类以及回归分析。它是将向量映射到一个更高维的空间里,在这个空间里建立有一个最大间隔超平面。在分开数据的超平面的两边建有两个互相平行的超平面,分隔超平面使两个平行超平面的距离最大化。假定平行超平面间的距离或差距越大,分类器的总误差越小。
从分类或回归的角度来看,SVM的分类只考虑分类面附近的局部的点,即支持向量,而诸如Logistic回归的算法要考虑全部样本的点,基于所有数据点的分布情况来构建分类边界。那么如何理解SVM这种依靠超平面与支持向量进行分类或回归的问题?在这里我们基于二维平面的9个简单场景来深入理解其工作原理。
图1:何谓正确的超平面?
如上图,A、B、C三个超平面,对星形与圆形标志进行划分,很明显,超平面B是正确的超平面。
图2-3:何谓最优的超平面?
如下图,A、B、C三个超平面均能对星形与圆形标志进行划分,哪个是最优的?
如下图,最优分类平面的条件是使间隔最大化。我们通过任一类(星形或圆形标志)与超平面距离最近的点,基于其与超平面距离的最大化来判定最优超平面,这个距离称为边距(Margin)。相比较于A、B,超平面C的边距最大,且具有鲁棒性,也就是说与任一类别的边距都最大,而不像A、B泛化性较差。
注意:这里不考虑所有的点都必须远离超平面,我们关心求得的超平面能够让所有点中离它最近的点具有最大间距。
图4:SVM得到的有时候并不是最优分类超平面
如上图,根据我们前边的边距最大原则,B是SVM算法得到的最优超平面,但是从实际来看,A才是能够将两类完全区分开的超平面,所以,SVM得到的有时候并不是最优分类超平面,那么我们就要怀疑SVM算法的可行性吗?我们可以从下一幅图找到答案。
图5-6:线性不可分下的最优超平面
如上图,这两类无法用一条直线去划分,基于SVM的边距最大化原则,我们得到的最优超平面只能是这样的:
结合图4以及图5-6的内容,可以看到有时候SVM不能完全将两类很好地分开,但是我们仍然觉得它是比较好的分类器,这是因为我们训练的样本中有些数据本来就是噪声,存在异常值,如果我们在训练(学习)的时候把这些错误的点学习到了,那么模型在下次碰到这些错误情况的时候就难免出错了。这种学习的时候学到了“噪声”的过程就是一个过拟合(over-fitting),这在机器学习中是一个大忌,而SVM在拟合时会保证一定的容错性,忽略异常值而考虑全局性的类别分布,就像图4、5、6所示的那样。
图7-9:非线性分类下的SVM
如上图,两个类之间不能有线性超平面,那么SVM如何对这两个类进行分类?之前我们构建分类函数为f(x) = w.x + b(w.x表示w与x的内积),这里就需要我们可以让空间从原本的线性空间变成一个更高维的空间,在这个高维的线性空间下,再用一个超平面进行划分。
我们构建新特征z = x^2 + y^2,然后在x、z轴上绘制样本点,可以看到如何去有效分类这两种类别。这就是增加了一个新的维度,在高维空间划分两类。SVM有一种称为核函数的技术。这些函数采用低维输入空间并将其转换为更高维空间,即将不可分离问题转换为可分离问题,这些函数称为内核。它主要用于非线性分离问题。
总结:
从上面9幅图可以知道SVM的工作原理:边距最大化;忽略异常值;采用核函数来处理非线性的情况。需要注意的是,上面是对SVM简单场景的分析,实际的SVM工作原理相对复杂。
赞赏作者
Python爱好者社区历史文章大合集:
Python爱好者社区历史文章列表(每周append更新一次)
关注后在公众号内回复“课程”即可获取:
小编的Python入门视频课程!!!
崔老师爬虫实战案例免费学习视频。
丘老师数据科学入门指导免费学习视频。
陈老师数据分析报告制作免费学习视频。
玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。
丘老师Python网络爬虫实战免费学习视频。