支持向量机,英文全称“Support Vector Machines”(简称 SVM),它是机器学习中最常用的一种“分类算法”。SVM 是一种非常优雅的算法,有着非常完善的数学理论基础,其预测效果,在众多机器学习模型中可谓“出类拔萃”。在深度学习没有普及之前,“支持向量机”可以称的上是传统机器学习中的“霸主”,下面我们将介绍本节的主人公——支持向量机(SVM)。
支持向量机是有监督学习中最有影响力的机器学习算法之一,该算法的诞生可追溯至上世纪 60 年代, 前苏联学者 Vapnik 在解决模式识别问题时提出这种算法模型,此后经过几十年的发展直至 1995 年, SVM 算法才真正的完善起来,其典型应用是解决手写字符识别问题。
当我们第一次见到“支持向量机”这个名词时,一定会感到“懵圈”,单从这个名字来看,它就散发这非常神秘的气息,仿佛游戏中的必杀技一样,但真的像我们感觉到的一样吗?其实名字就是“拦路虎”,就像我们前面学习的“朴素贝叶斯”一样。支持向量机并非源于“人名”,但以我们现有的知识,我们只知道“向量”是什么,至于“支持向量机”是什么,您一定做不出任何有说服力的解释。
注意:支持向量机是一个比较“难”讲解的算法,需要理解大量的数学知识,否则只能雾里看花。在写作本文的过程中,我尽量本着通俗易懂的角度来讲解,但由于个人能力有限,以及读者群体不同,难免会众口难调,还请多多包含。同时,如果文章中有任何不妥之处,也请不吝赐教。
首先对支持向量机做一个直观的描述:支持向量机是一个分类器算法,主要用于解决二分类的问题,最终告诉我们一个样本属于 A 集合还是属于 B 集合,这和之前学习过的分类算法别无二致。
一个算法模型就好比一台精巧的机器,有许多零部件组成,支持向量机也是如此。对于支持向量机而言有三个重要构件,分别是:
上述三者是 SVM 支持向量机的核心,三者之间彼此独立,又互相依存,如果缺少了其中任何一个部件,都不能驱动支持向量机这台“机器”,这三个部件也是后续介绍的核心知识,只有充分理解了它们,才能将得心应手的使用 SVM 算法。如果用一句话来总结这三个部件的作用,那就是“最大间隔是标尺,高维映射是关键,最终结论看核函数”。
支持向量机本质上是从在线性分类算法的基础上发展而来的,就如同已经学习过的 Logistic 逻辑回归算法一样,只需给线性函数“套”上一层 Logistic “马甲”,就可以用线性模型来解决离散数据的分类问题。对于支持向量机来说,要解决分类问题,其过程则更为复杂。下面剖析一下支持向量机的本质,从而帮助您更好的理解它的算法思想。
支持像向量机算法中有一个非常重要的角色,那就是“支持向量”,支持向量机这个算法名字也由它而来(机,指的是“一种算法”),要想理解什么是“支持向量”就首先要理解“间隔”这一个词。
支持向量机中有一个非常重要的概念就是“间隔最大化”,它是衡量 SVM 分类结果是否最优的标准之一。下面通过“象棋”的例子来理解什么是“间隔”:
中国象棋是我国独有的一类娱乐活动,棋子分为黑子和红子,并用“楚河汉界”将其分开。如果用一条直线将不同颜色的棋子进行分类,这显然信手拈来,只需要在楚河汉界的空白附带画一条“中轴线”就能以最佳的方式将它们分开,这样就能保证两边距离最近的棋子保有充分的“间隔”。
上述示例中产生的“间隔”实际上是依据两侧不同颜色的棋子划分而成的,我们把这些棋子统称为“样本点”。虽然这些样本点都参与了分类,但对于分类效果影响最大的是处于间隔“边缘”的样本,只要将处于边缘的样本正确分类,那么这两个类别也就分开了,因此我们把处于边缘样本点称为“支持向量”。
间隔,又分为软间隔和硬间隔,其实这很好理解,当我们使用直线分类时会本着尽可能将类别全都区分开来的原则,但总存在一些另类的“样本点”不能被正确的分类,如果您允许这样的“样本点存在”,那么画出的间隔就成为“软间隔”,反之态度强硬必须要求“你是你,我是我”,这种间隔就被称为“硬间隔”,在处理实际业务中,硬间隔只是一种理想状态。
上述所说的保有充分的“间隔”,其实就是“最大间隔”,你可能会问,为什么是最大间隔呢,两个类别只要能区分开不就行了吗?其实这涉及到算法模型最优问题,就像常时所说的一样,做事要给自己留有余地,不能将自己至于危险的边缘。
如果将数据样本分割的不留余地,就会对随机扰动的噪点特别敏感,这样就很容易破坏掉之前的分类结果,学术称为“鲁棒性差”,因此我们在分类时要尽可能使正负两类分割距离达到最大间隔。
支持向量机是一种使得样本点达到最佳分类效果的算法,但上述示例并非支持向量机的应用场景,通过上述示例我们只是知道了“什么是间隔”以及什么是“支持向量”,那支持向量应用场景到底是怎么的呢?通过下面形象化的描述,您也许能体会到 SVM 的强大之处:
当对弈双方在下棋之前,需要将散落在棋盘上的棋子放在各自的位置上,此时这些棋子并非按照颜色排列在“楚河汉界”两边,而是“杂乱无章”的放在棋盘上,那么如何快速地将这些棋子分呢?你应该如何做呢?当然你也许会想到用手一个个的挑出来,但是这里的棋子只是类比数据样本点,在实际的业务中你可能面对的是成千上亿的数据样本,要想解决这个问题,支持向量机就派上了用场。
如果用画“直线”的方法,一定不能解决上述问题,因此简单粗暴的线性函数“貌似”派不上用场,那么到低如果解决呢?
我们不妨回忆一下 Logistic 回归分类算法,通过给线性函数“套”上一层 Logistic 函数就解决了离散数据的分类问题,SVM 能否按照同样的思维方式来解决呢,答案是肯定的。
支持向量机类似于逻辑回归,这个模型也是基于线性函数 wTx + b 的,不同于逻辑回归的是,支持向量机不输出概率,只是输出类别。
当 wTx + b 为正时,支持向量机预测属于正类;而当 wTx + b 为负时,支持向量机预测属于负类。当然,在判断类别的过程中还要用到 SVM 的另外两个重要部件,也就是“高维映射”和“核函数”,否则无法实现利用线性函数解决分类问题,至于是如何解决的,后续知识会做详细讲解。
注意:上述示例中“棋子”只是形象化的比喻,在具体的业务中,我们处理的是“数据样本点”
本节初步认识了“支持向量机(SVM)算法”,了解了组成支持向量机的三个重要部件。通过对支持向量机本质的讲解,我们知道支持向量机是从线性函数的基础上发展而来的,因此我们可以得出,支持向量机(SVM)是一种利用线性函数解决线性不可分(分类)问题的算法。