最近学习数学建模,其中有一种分类(Classification)算法,叫做
Support Vector Machine 支持向量机
首先我们要明确一组概念:Classification Algorithms
分类算法在机器学习中只是属于监督学习的一部分,因此我们需要了解整个ML中算法的大体框架。
在Machine Learning 中,根据目标的不同,算法可分成几个种类,主要的有:
1. 监督学习Supervised Learning(构建预测模型,使用「标签化」数据)
分类算法:逻辑回归、决策树、KNN、随机森林、支持向量机、朴素贝叶斯等等;
数字预测算法:线性回归、KNN、Gradient Boosting & AdaBoost等等;
2. 无监督学习Unsupervised Learning(构建描述模型,使用「无标签」数据)
聚类算法:K-Means
模式挖掘算法
3. 半监督学习Semi-Supervised Learning(使用「标签化」和「无标签」的混合数据)
结合监督学习和无监督学习的算法而生的混合型机器学习算法。
4. 增强学习
这种算法的目标是训练机器来做出各种特定行为。算法是这样工作的:机器被放置在一个特定环境中,在这个环境里机器可以持续性地进行自我训练,而环境会给出或正或负的反馈。机器会从以往的行动经验中得到提升并最终找到最好的知识内容来帮助它做出最有效的行为决策。马尔可夫决策过程就是一个增强学习的典型例子。
对于一个特定问题而言,我们往往可以使用多种机器学习算法,也就是说,对于一个相同的问题,可以有很多不同的机器学习模型来解决它。所以挑选出最适合某个问题的机器学习模型就成为了一种艺术,一种需要具备深厚耐心并能够坚持长时间调试错误的艺术。下面的这张图就简单介绍了所有这些学习方法所适用的场景。
下面我们来具体说明,这几类算法的重点
监督学习算法(Supervised learning algorithms)是机器学习算法家族的一个超集,这种方法被广泛地应用在预测模型之中。所谓预测模型,就是指使用机器学习算法以及训练数据的特征和属性所构建出来的一个模型,而对于新的输入数据,这个模型可以被用来预测新的结果。监督学习算法会尝试建立起输入特征与目标结果之间的联系和依赖关系,因而通过使用一个已有数据集的训练过程,我们就可以预测出一个新的数据集所对应的输出结果。监督学习算法的主要分类包括:
分类算法(Classification algorithms):这种算法使用训练数据(训练数据中包含特征以及分类标签)来构建预测模型。这些预测模型可以使用它从训练数据中所挖掘出来的特征来对新的、未曾见过的数据集进行分类标签预测,而这种最终的分类结果是相互分离的。常用的分类算法有决策树、随机森林、支持向量机等等。
回归算法(Regression algorithms):这种算法使用从输入数据中获得的特征参数来预测一些额外的特征,为了完成这一工作,算法会建立一个基于数据特征的模型,这个模型可以针对训练数据给出一些未知的特征,也可以用来预测新数据集的特征属性。这里输出的特征属性是连续的且互不分离的。常见的回归算法包括线性回归、多元回归、回归树和套索回归等等。
监督学习的具体例子有语音识别、信用评估、医学成像以及搜索引擎等。
无监督学习算法(Unsupervised learning algorithms)是机器学习算法家族中常用来完成模式检测和描述性建模的一种算法。尽管在无监督学习过程中算法无法通过建模过程直接给出数据的分类和标签信息,但算法会试图采用各种手段来挖掘规则、检测模式并进行归纳总结,来将输入数据转化为有明确意义并能更好地向用户进行展现的形式。无监督学习算法的主要分类包括:
聚类算法(Clustering algorithms):这类算法的主要目标是对输入数据进行归类,并将其划分为若干个不同的层级或是类别。算法中这一过程仅仅使用了输入数据中挖掘出来的特征而没有使用任何其他信息。与分类不同的是,聚类中输出数据的各个类别标签我们是无法获知的。我们有很多种构建聚类模型的方法,比如说使用means、medoids、层级结构等等。常见的聚类算法包括k-means、k-medoids和层次聚类。
关联规则学习算法(Association rule learning algorithms):这类算法主要用来从数据集中挖掘和抽取规则和模式。这里的规则阐述了数据中不同参数和属性之间的联系,同时也描画了数据中会经常出现的元素集和模式规律。这些规则和规律可以反过来帮助我们从企业机构的海量数据仓库中发现有意义的内容。常见的这类算法包括Apriori和FP Growth。
无监督学习的具体例子有市场营销、社交网络分析、图像分割以及气候学方面的应用等等。
半监督学习在前两种类型中,要么数据集中完全不具备可以直接获得的标签,要么所有数据元素都具备可见的分类信息。而半监督学习正好介于这两者之间。在很多现实场景中,为数据添加标签是很耗时费力的工作,同时还需要技术过硬的人类专家来完成。因此,当只有少部分数据提供了分类标签的时候,半监督学习就成为了构建模型最好的选择。
半监督学习采用了这样的一种思路:虽然无标签数据的归属类别是未知的,但它们同样携带了关于群组参数的重要信息。
增强学习这种方法致力于从与环境的交互行为中获取信息去进行一些尽可能趋利避害的动作。增强学习算法(通常算法会表现为一个机器人)会以迭代的方式在环境中持续不断地进行学习,而在学习过程中,机器人会从与环境不断接触的活动经验中逐渐成长直到所有可能的状态都被它发现。
为了创建一个智能程序(也可以叫做机器人),增强学习一般可分为以下几步:
提供一个输入状态给机器人
机器人使用决策生成函数来施放动作
当动作完成之后,机器人获得环境给予的反馈或是奖励
针对于这种反馈的状态-动作数据对被记录下来
增强学习的具体案例包括计算机桌面游戏(象棋、围棋等)、机械手臂、自动驾驶汽车等等。
以后的文章中,将会写到各种机器学习方法的不同点以及模型。
大致了解完机器学习几大算法的分类之后,我们又回到了文章开始的问题了
到底什么是SVM呢?
下面就来一起探索。
这就要从一个小故事说起(来自reddit&知乎)
在很久以前的情人节,大侠要去救他的爱人,但魔鬼和他玩了一个游戏。
魔鬼在桌子上似乎有规律放了两种颜色的球,说:“你用一根棍分开它们。要求:尽量在放更多球之后,仍然适用。”
于是大侠这样放,看起来干的不错?
然后魔鬼,又在桌上放了更多的球,似乎有一个球站错了阵营。
SVM就是试图把棍放在最佳位置,好让在棍的两边有尽可能大的间隙。
现在即使魔鬼放了更多的球,棍仍然是一个好的分界线。
然后,在SVM 工具箱中有另一个更加重要的 trick。 魔鬼看到大侠已经学会了一个trick,于是魔鬼给了大侠一个新的挑战。如下图:
现在,大侠没有棍可以很好帮他分开两种球了,现在怎么办呢?当然像所有武侠片中一样大侠桌子一拍,球飞到空中。然后,凭借大侠的轻功,大侠抓起一张纸,插到了两种球的中间。
现在,从魔鬼的角度看这些球,这些球看起来像是被一条曲线分开了。
再之后,无聊的大人们,把这些球叫做 「data」,把棍子 叫做 「classifier」, 最大间隙trick 叫做「optimization」, 拍桌子叫做「kernelling」, 那张纸叫做「hyperplane」。
经过了以上描述,我们大致能了解SVM是什么,有什么作用了,总结如下:
SVM主要用于解决模式识别领域中的数据分类问题,属于监督学习算法的一种。SVM要解决的问题可以用一个经典的二分类问题加以描述。如下图所示,红色和蓝色的二维数据点显然是可以被一条直线分开的,在模式识别领域称为线性可分问题。然而将两类数据点分开的直线显然不止一条。图中(b)和(c)分别给出了A、B两种不同的分类方案,其中黑色实线为分界线,术语称为“决策面”。每个决策面对应了一个线性分类器。虽然在目前的数据上看,这两个分类器的分类结果是一样的,但如果考虑潜在的其他数据,则两者的分类性能是有差别的。
SVM算法认为图中的分类器A在性能上优于分类器B,其依据是A的分类间隔比B要大。这里涉及到第一个SVM独有的概念“分类间隔”。在保证决策面方向不变且不会出现错分样本的情况下移动决策面,会在原来的决策面两侧找到两个极限位置(越过该位置就会产生错分现象),如虚线所示。虚线的位置由决策面的方向和距离原决策面最近的几个样本的位置决定。而这两条平行虚线正中间的分界线就是在保持当前决策面方向不变的前提下的最优决策面。两条虚线之间的垂直距离就是这个最优决策面对应的分类间隔。显然每一个可能把数据集正确分开的方向都有一个最优决策面(有些方向无论如何移动决策面的位置也不可能将两类样本完全分开),而不同方向的最优决策面的分类间隔通常是不同的,那个具有“最大间隔”的决策面就是SVM要寻找的最优解。而这个真正的最优解对应的两侧虚线所穿过的样本点,就是SVM中的支持样本点,称为“支持向量”。对于图1中的数据,A决策面就是SVM寻找的最优解,而相应的三个位于虚线上的样本点在坐标系中对应的向量就叫做支持向量。
从表面上看,我们优化的对象似乎是这个决策面的方向和位置。但实际上最优决策面的方向和位置完全取决于选择哪些样本作为支持向量。而在经过漫长的公式推导后,你最终会发现,其实与线性决策面的方向和位置直接相关的参数都会被约减掉,最终结果只取决于样本点的选择结果。
到这里,我们明确了SVM算法要解决的是一个最优分类器的设计问题。既然叫作最优分类器,其本质必然是个最优化问题。所以,接下来我们要讨论的就是如何把SVM变成用数学语言描述的最优化问题模型,这就是我们在第二部分要讲的“线性SVM算法的数学建模”。
PS:关于“决策面”,为什么叫决策面,而不是决策线?好吧,在图里,样本是二维空间中的点,也就是数据的维度是2,因此1维的直线可以分开它们。但是在更加一般的情况下,样本点的维度是n,则将它们分开的决策面的维度就是n-1维的超平面(可以想象一下3维空间中的点集被平面分开),所以叫“决策面”更加具有普适性,或者你可以认为直线是决策面的一个特例。
至于如何求解这条线,则涉及到了更难的知识,下次再分享。