2.2
机器学习常用算法
在神经网络的带动下,越来越多的研究人员和开发人员都开始重新审视机器学习,并尝试用某些机器学习的方法解决一些实际问题。
下面介绍几种经典的机器学习算法,包括K-最近邻算法、决策树、线性回归、支持向量机、K-means算法。
2.2.1
线性回归
线性回归也属于监督学习算法。线性回归是一类尝试学得一个线性模型以尽可能准确地预测实值输出标记的算法。回归分析中,如果只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,则这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。回归方程如下。
上述回归方程中的w和bi的值通常可以通过最小二乘法进行估计。在线性回归中,最小二乘法就是试图找到一条直线,使得所有样本到直线的欧氏距离之和最小。
举个例子,昆虫学者收集了蟋蟀鸣叫声和温度等数据,用于预测蟋蟀鸣叫声与温度的关系。首先将数据绘制成图,如图2-7所示,可以看出数据分布近似一条直线,因此可以绘制一条直线,来模拟每分钟的蟋蟀鸣叫声与温度(摄氏度)的关系。
图2-7 每分钟的蟋蟀鸣叫声与温度(摄氏度)的关系
构建每分钟的蟋蟀鸣叫声与温度(摄氏度)的关系式如下。
这里的y指的是温度(摄氏度),即预测值;b是y轴截距,或称为偏置项;x1是每分钟的蟋蟀鸣叫声次数,即特征值;斜率w1称为回归系数,回归系数的绝对值越大,则代表对应的特征对y值的影响越大。另外,本例中下标(如w1和x1)表示有单个输入特征x1和相应的单个权重w1。如果有多个输入特征则表示更复杂的模型。例如,具有两个特征的模型,可以采用如下方程式。
2.2.2
K-最近邻算法
K-最近邻算法(K-Nearest Neighbor, KNN)是最简单的机器学习分类算法之一,属于监督学习,适用于多分类问题。K-最近邻算法的工作原理是,给定一个训练数据集,输入一个新的实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于哪个类,就把输入的新实例分类到这个类中。
下面通过一个简单的例子来说明。如图2-8所示,图中有两类样本,一类是正方形,一类是三角形,圆形表示待分类的数据。那么,如何判断圆形的待分类点是属于正方形类还是属于三角形类呢?
图2-8 待分类数据
如果基于K-最近邻算法的工作原理,可以有如下判定结果。
K=3时(图中实线),范围内三角形多,这个待分类点属于三角形。
K=5时(图中虚线),范围内正方形多,这个待分类点属于正方形。
如何选择一个最佳的K值取决于数据情况。一般情况下,在分类时较大的K值能够减小噪声的影响,但会使类别之间的界限变得模糊。因此,K的取值一般比较小(K<20)。
K-最近邻算法的优点是简单,易于理解,无须建模与训练,适用于多分类问题。K-最近邻算法的缺点也较为明显:对参数的选择非常敏感,如上例所示,选取不同的K值,可以得到完全不同的结果。除此之外,K-最近邻算法的计算量大,性能较低,内存开销大,也是其缺点。
2.2.3
决策树
决策树是一种常见的监督学习算法,是基于树结构进行决策的一类算法。一棵决策树一般包含一个根节点,以及若干内部节点和若干叶节点,其中每个内部节点表示一个属性上的测试,每个叶节点代表一种类别。
举个简单的例子,面对一个申请贷款的客户,银行要对“是否可以为该客户办理贷款”这个问题进行决策。通过构建如图2-9所示的决策树,利用不同的非叶节点对应的“年收入”和“房产”等属性,我们可以得到最终的叶节点,从而判断是否可以为当前客户办理贷款。
图2-9 货款审批决策树
同其他分类器相比,决策树具有易于理解和易于实现的优点,同时,该算法的计算量相对较小,在相对短的时间内能够对大量数据给出可行且效果良好的判断结果。但是,决策树也存在较容易造成过拟合的问题,往往需要采用剪枝操作。
决策树模型的关键在于如何选择最优属性。一般而言,随着划分的推进,我们希望决策树的分支节点所包含的样本尽可能属于同一类别,即使节点的“纯度”越来越高。最早提出决策树思想的是昆兰,他在1986年提出的lD3算法就是以信息增益为准则来选择划分属性。1993年,昆兰提出的C4.5算法不直接使用信息增益,而是使用“增益率”来选择划分属性。布莱曼等人在1984年提出的CART算法则使用“基尼系数”来选择划分属性。
2.2.4
支持向量机
在深度学习盛行之前,支持向量机(Support Vector Machine, SVM)是最常用并且最常被谈到的机器学习算法。支持向量机作为监督学习算法,可以进行分类,也可以进行回归分析。
SVM于1995年正式发表,由于其严格的理论基础和在诸多分类任务中的卓越表现,很快成为机器学习的主流技术。20世纪90年代后期SVM快速发展,衍生出了一系列改进和扩展算法,在人像识别、文本分类等模式识别问题中得到应用。SVM使用铰链损失函数计算经验风险,并在求解系统中加入了正则化项,以优化结构风险,是一个具有稀疏性和稳健性的分类器。
支持向量机原理如图2-10所示,图中的直线A和直线B为决策边界,实线两边的相应虚线为间隔边界,间隔边界上的带圈点为支持向量。在图2-10(a)中,我们可以看到有两个类别的数据,图2-10(b)和图2-10(c)中的直线A和直线B都可以把这两类数据点分开。那么,到底选用直线A还是直线B来作为分类边界呢?支持向量机采用间隔最大化原则,即选用到间隔边界的距离最大的决策直线。由于直线A到它两边虚线的距离更大,也就是间隔更大,所以直线A将比直线B有更多的机会成为决策函数(超平面)。
图2-10 支持向量机原理示意图
需要指出的是,以上问题是支持向量机问题的基本模型,即线性可分的情况。但在很多现实问题中,原始的样本空间中并不存在一个划分超平面能将训练样本正确分类,也就是非线性可分。为了解决这类问题,相关学者提出了诸多解决办法,其中一个重要的方法叫作核方法。这种方法借助核函数,将数据映射到更高维的空间,使得在高维属性空间中有可能训练出一个分割超平面,以解决数据在原始空间中不可分的问题。
2.2.5
K-means算法
聚类是无监督学习算法中最重要的一类算法。在聚类算法中,训练样本都是没有标记信息的,给定一个样本点的数据集,数据聚类的目标是通过对未知标签的样本的学习来揭示数据的内在性质和规律。将样本数据划分成若干类,使得属于同一类的样本点之间的相似度尽量高,不同类的样本点之间尽量不相似。
K-均值聚类(也称K-means算法)是最典型也最常用的聚类算法之一。这是一种迭代求解的聚类分析算法,其步骤如图2-11所示:随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个初始聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心及分配给它的对象就代表一个聚类(又称为簇)。每分配一个样本,聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件一般可以是没有对象被重新分配给不同的聚类,也可以是没有聚类中心再发生变化。
图2-11 K-means算法步骤
K-means算法的优点是原理易懂,易于实现,且算法的时间复杂度近似于线性,适合挖掘大规模数据集。K-means算法的缺点也非常明显,算法对参数的选择比较敏感,也就是说,不同的初始位置或者类别数量K的选择,往往会产生完全不同的聚类结果。很多时候,我们无法预知样本的分布情况,参数的选择就变得非常困难,这给模型的学习带来了很大的不确定性。