模式识别(pattern recognition,以下简称PR)源自工程,是一类问题(problem);机器学习源自计算机科学,是一类方法(methodology)。对于一个具体的模式识别问题,可以用handcrafted rule-based的方法去求解,但是更复杂的PR问题往往采用机器学习的方法。
本文主要就模式识别中的机器学习算法展开讨论。
机器学习是关于计算机基于数据构建模型并运用模型来模拟人类智能活动的一门学科。随着计算机与网络的飞速发展,机器学习在我们的生活与工作中起着越来越大的作用,正在改变着我们的生活和工作。
虽然分类对机器学习本身没有实际作用,但是对其进行分门别类有助于我们对于机器学习算法的理解和运用。以下按照不同的标准对常用的方法进行分类,帮助我们理清各个方法之间的联系和区别。按照不同的标准,分类的方式也不一样,下面从两个标准对机器学习方法进行分类。
还是按照传统的分类方法进行一个简单的分类吧。经过学者和工程师的改造,某些方法综合了几种思想,这种这里不单独分类了,暂且列为混血吧。再在后续的介绍中,介绍几种典型的机器学习方法。
按照学习方法的不同,机器学习一般可以分成4类:
训练数据中全部输入都带有目标值的方法称为supervised learning。即是根据所提供的特征和对应的期望目标值,发现输入变量和期望目标值之间的关系。
典型代表包括ME、SVM、LDA、LR。
训练数据中输入没有对应的目标值的方法称为unsupervised learning。这类学习的目标是发现输入变量的内部关系。按照具体的内部联系类型,unsupervised learning又可以分成多种问题,如,聚类、密度分析等。
典型代表包括Kmeans、PCA。
输入变量有的带目标值,有的不带的称为semi-supervised learning。这样的学习方法需要根据现有的目标值,然后分析数据的内在关系,逐步对未带目标值的变量打标签。这种方法一般用在标注数据较少的情况,或者标注成本较大的情况,这样可以利用机器学习的算法逐步扩大标注的样本。
半监督学习思想很接近人类的学习过程,即在不断的对新事物的认识过程中,不断地学习新的知识。但是,需要一定的措施来保证我们的学习方向是正确的,否则,与康庄大道渐行渐远。
目前,在半监督学习中有三个常用的基本假设来建立预测样例和学习目标之间的关系,即聚类假设(Cluster Assumption)、流形假设(Manifold Assumption)和局部与全局一致性假设(Local & Global Consistency Assumption)。
典型方法包括TSVM、co-training等。
所谓强化学习就是智能系统从环境到行为映射的学习,以使奖励信号(强化信号)函数值最大,强化学习不同于连接主义学习中的监督学习,主要表现在教师信号上,强化学习中由环境提供的强化信号是对产生动作的好坏作一种评价(通常为标量信号),而不是告诉强化学习系统RLS(reinforcement learning system)如何去产生正确的动作.由于外部环境提供的信息很少,RLS必须靠自身的经历进行学习。通过这种方式,RLS在行动-评价的环境中获得知识,改进行动方案以适应环境。
这类学习是在supervised learning的基础上,允许机器自行选择training data;同时,training在获取信息的同时也会带来cost或loss,从而引发一个tradeoff。
方法 |
监督学习 |
非监督学习 |
半监督学习 |
强化学习 |
优点 |
具有一定的指导信息,能够更好地学习 |
能够根据数据内在的性质进行分类 |
综合监督学习和非监督学习的优点 |
不需要人工设计具体的分类算法 |
缺点 |
缺少指导策略 |
对噪声较敏感 |
||
适用情况 |
明确需要对数据进行分类处理 |
样本选择、聚类、密度分析等 |
标注样本难以获取或者获取成本较高 |
|
典型方法 |
ME、SVM |
Kmeans、PCA |
TSVM |
蒙特卡罗算法 |
按照底层模型方法可以分为基于统计的机器学习、基于符号的机器学习。
机器学习是挖掘所给样本中的潜在模式,是对已有信息的一种认知,自然离不开对已有数据的统计和分析。那么统计机器学习就是通过运用数据以及统计方法提高结果预测效果。
基于统计的机器学习方法很多,比较经典的方法有:最大熵(ME)、SVM、LDA、贝叶斯分类、PLSA、SVD、等。
与统计(数字化)机器学习相对的,可以叫做符号(数学化、形式化)机器学习:统计学习的质料是数字,而它的质料是符号;统计学习学的是模型参数,它学的是模型结构;统计学习的搜索空间是连续的,它的搜索空间是离散的。常听说有基于统计与基于规则的区别,那么符号机器学习就是要自动学习那些规则。如果说统计机器学习是黑箱子,参数的意义难以解释,目的只是能够根据x输出合理的y,那么符号机器学习的目标就是能找出人能够理解的对象的规律,让人能够直接增加对事物的认识。
事实上唯一被保留下来的符号机器学习方法就是决策树。他学习的就是一个离散表示的树的结构,其分类过程可以写成命题逻辑的形式,即其结果是符号的。可以看到因为同为机器学习,所以也有过学习的现象,也有结构风险的概念,也受着奥坎姆剃刀的审视。决策树是自顶向下的,而符号学习中的AQ算法就是自低向上的,它期望用尽量少的规则覆盖所有正例而不包括负例(可见其对噪音更敏感)。
决策树中也衍生出很多的方法,根据评价函数的不同有以下几种方法,如ID3,C4。5,CART,GBDT,RandomForest等。
以下简单介绍几种方法的准则函数,并以此来区分各种方法的优缺点。
方法 |
评价准则 |
备注 |
ID3 |
信息增益 |
衡量特征对分类的贡献 |
C4。5 |
信息增益率 |
克服信息增益倾向于选择数值分布多的确定 |
CART |
GINI指数 |
和信息增益类似的指标 |
GBDT |
树的组合=森林(样本,特征重新采样) |
树可以选择任意决策树进行组合 |
RandomForest |
树的组合=森林(样本重新采样) |
树可以选择任意决策树进行组合 |
介绍几种实际中常用的经典方法,表现不俗,泛化能力很强。被广大学者和工程师广泛使用。
支持向量机(Support Vector Machine,简称SVM)。是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。
支持向量机方法是建立在统计学习理论的VC 维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力(或称泛化能力)。
对于文本分类这样的不适定问题(有一个以上解的问题称为不适定问题),需要有一个指标来衡量解决方案(即我们通过训练建立的分类模型)的好坏,而分类间隔是一个比较好的指标。
在进行文本分类的时候,我们可以让计算机这样来看待我们提供给它的训练样本,每一个样本由一个向量(就是那些文本特征所组成的向量)和一个标记(标示出这个样本属于哪个类别)组成。如下:
就是文本向量(维数很高),就是分类标记(label)。
在二元的线性分类中,这个表示分类的标记只有两个值,1和-1(用来表示属于还是不属于这个类)。有了这种表示法,我们就可以定义一个样本点到某个超平面的间隔:
下面这张图更加直观的展示出了几何间隔的现实含义:
H是分类面,而H1和H2是平行于H,且过离H最近的两类样本的直线,H1与H,H2与H之间的距离就是几何间隔。
如果某个样本属于该类别的话,那么>0,而也大于0;若不属于该类别的话,那么>0,而也小于0,这意味着yi(wxi+b)总是大于0的,而且它的值就等于|wxi+b|。
所以我们的求解过程就变成
对于待求解的参数w,当我们固定为1,可能有很多的解,但是最稳定的应该是具有最小范数的w。所以我们的问题变成,带N(样本个数)个约束条件的最优化问题
一个带约束的最小值的问题:
为什么前面有个呢,完全是为了方便求解,因为对求导数为2x,刚好抵消。
求解这个最优化问题可以采用拉格拉格日乘子法,对于拉格朗日乘子法我们知道,只有约束边界上的点才起实际的作用,这些边界上的点就叫做支持向量,这也是支持向量名称的来源。
之所以如此关心几何间隔这个东西,是因为几何间隔与样本的误分次数间存在关系:
其中的δ是样本集合到分类面的间隔,R=max ||xi|| i=1,。。。,n,即R是所有样本中(xi是以向量表示的第i个样本)向量长度最长的值(也就是说代表样本的分布有多么广)。先不必追究误分次数的具体定义和推导过程,只要记得这个误分次数一定程度上代表分类器的误差。而从上式可以看出,误分次数的上界由几何间隔决定!(当然,是样本已知的时候)。
至此我们就明白为何要选择几何间隔来作为评价一个解优劣的指标了,原来几何间隔越大的解,它的误差上界越小。因此最大化几何间隔成了我们训练阶段的目标,而且,与二把刀作者所写的不同,最大化分类间隔并不是SVM的专利,而是早在线性分类时期就已有的思想。
以上介绍的是SVM的基本原理,在实际应用中,还有SVM的各种变形,比如软间隔SVM,核SVM等,感兴趣的同学请查看我专门介绍SVM的文章。
主成份分析(Principal Component Analysis,简称PCA), PCA的问题其实是一个基的变换,使得变换后的坐标轴有着最大的方差.方差的大小描述的是变量分布状况。对于训练数据,方差大才有意义,不然输入的数据都是同一个点,那方差就为0了,这样输入的多个数据就等同于一个数据了.以下面这张图为例子:
这个假设是一个摄像机采集一个物体运动得到的图片,上面的点表示物体运动的位置,假如我们想要用一条直线去拟合这些点,那我们会选择什么方向的线呢?当然是图上标有signal的那条线.如果我们把这些点单纯的投影到x轴或者y轴上,最后在x轴与y轴上得到的方差是相似的(因为这些点的趋势是在45度左右的方向,所以投影到x轴或者y轴上都是类似的),如果我们使用原来的xy坐标系去看这些点,容易看不出来这些点真正的方向是什么.但是如果我们进行坐标系的变化,横轴变成了signal的方向,纵轴变成了noise的方向,则就很容易发现什么方向的方差大,什么方向的方差小了.
一般来说,方差大的方向是信号的方向,方差小的方向是噪声的方向,我们在数据挖掘中或者数字信号处理中,往往要提高信号与噪声的比例,也就是信噪比.对上图来说,如果我们只保留signal方向的数据,也可以对原数据进行不错的近似了.
对于特征值分解,解法倾向于顺序寻找具有最大方差的方向,第一个轴是使得方差最大的,第二个轴是在与第一个轴正交的平面中使得方差最大的,第三个轴是在与第1、2个轴正交的平面中方差最大的。假设在N维空间中,我们可以找到N个这样的坐标轴,我们取前r个去近似这个空间,这样就从一个N维的空间压缩到r维的空间了。
N维向量用R表示。人脸图像训练集为{Ri|i=1,…,M},其中M为训练集中图像总数,这M个向量的平均向量为:
step1:做中心化,每个向量Ri与平均向量ψ的差值向量是:
训练数据的协方差矩阵可表示为:
其中,A=[,…].
Step2:对矩阵C做特征值分解。
Step3:再取前N个特征值和特征向量,即实现特征值分解。
这样我们就得到了对行进行压缩的式子.可以看出,其实PCA几乎可以说是对SVD的一个包装,如果我们实现了SVD,那也就实现了PCA了,而且更好的地方是,有了SVD,我们就可以得到两个方向的PCA,如果我们对A’A进行特征值的分解,只能得到一个方向的PCA.
假设我们将特征值的范数看作是数据的能量,那么我们一般保留数据能量大90%,效果较好.
如果用于去噪,那么PCA对于白噪声的效果是比较好的,但是对于一般的噪声,效果不是很理想。
现在基于PCA衍生出的KPCA对于高纬数据进行处理,对核矩阵进行处理,可以有效减少特征分解的复杂度,而且将函数从线性空间变换到高维甚至无穷维,能更好滴发现数据潜在的模式。
最大熵(Max Entrophy,简称ME),转自52nlp。
i. 给定约束条件:p(x,0)+p(y, 0)=0.6,a∈{x, y}且b∈0, 1,估计概率分布p(a, b)(Estimate probability distribution p(a,b), given the constraint: p(x, 0) + p(y, 0) =0.6, where a∈{x, y}andb∈0, 1)):
P(a,b) |
0 |
1 |
|
x |
? |
? |
|
y |
? |
? |
|
total |
0.6 |
|
1.0 |
ii. 满足约束条件的一种分布(One Way To Satisfy Constraints):
P(a,b) |
0 |
1 |
|
x |
0.5 |
0.1 |
|
y |
0.1 |
0.3 |
|
total |
0.6 |
|
1.0 |
iii. 满足约束条件的另一种分布(Another Way To Satisfy Constraints):
P(a,b) |
0 |
1 |
|
x |
0.3 |
0.2 |
|
y |
0.3 |
0.2 |
|
Total |
0.6 |
|
1.0 |
i.给定一个训练样本集,我们希望寻找一个分布符合如下两个条件(Given a set of training examples, we wishto find a distribution which):
1. 满足已知的约束条件(satisfies the input constraints)
2. 最大化其不确定性(maximizes the uncertainty)
ii.最大熵原理是在1957 年由E.T.Jaynes 提出的,其主要思想是,在只掌握关于未知分布的部分知识时,应该选取符合这些知识但熵值最大的概率分布。因为在这种情况下,符合已知知识的概率分布可能不止一个。我们知道,熵定义的实际上是一个随机变量的不确定性,熵最大的时侯,说明随机变量最不确定,换句话说,也就是随机变量最随机,对其行为做准确预测最困难。从这个意义上讲,那么最大熵原理的实质就是,在已知部分知识的前提下,关于未知分布最合理的推断就是符合已知知识下最不确定或最随机的推断,这是我们可以作出的唯一不偏不倚的选择,任何其它的选择都意味着我们增加了其它的约束和假设,这些约束和假设根据我们掌握的信息无法做出。(这一段转自北大常宝宝老师的《自然语言处理的最大熵模型》)
iii.约束条件(Constraint):每个特征的观察样本期望值与特征模型期望值相一致:
(model’s expectation)
(observed expectation)
iv.最大熵原理(Principle of Maximum Entropy):
将已知事实作为制约条件,求得可使熵最大化的概率分布作为正确的概率分布。以下详细介绍里面的理论和求解过程。
(1)模型输入:从人工标注的训练数据中抽取的训练样本集T={(x1,y1),(x2,y2),...,(xn,yn)},(xi,yi)表示在语料库中出现yi时其上下文信息为xi。
(2)从训练样例中得到经验概率分布:其中Count(x,y)是语料中出现的次数,N为总词数。则
(3)特征f是指x与y之间存在的某种特定的关系,用特征函数表示:
在文本分类中,
(4)特征的经验概率期望值是所有满足特征要求的经验概率之和,即:
(5)特征的期望概率是特征在所学习的随机事件中的真实分布为:
其中,是指x出现的情况下,y的经验概率。是指x出现的情况下,y的真实概率。
(6)特征的经验概率与期望概率应该一致:
即:
上面的式子即成为约束等式。
(7)设存在k个特征fi(i=1,2,...,k),多个约束等式构成的集合叫做约束集,可表示为:
(8)最大熵模型,是满足约束条件的所有模型中熵最大的模型,即:
其中p为满足约束集C条件下的某一统计模型,寻找具有最大评分的参量。
(9)于是我们可以把这个最大熵模型表示为:在满足约束条件中选择熵最大的那个。这里介绍一下熵的度量,定义请百度一下。
所以在满足上述约束的情况下,最大化熵。
我们可以用拉格朗日乘数法来解决这个优化问题。具体步骤百度一下。
梯度提升决策树(Gradient Boosting Decision Tree,简称GBDT),主要由三个概念组成:Regression Decision Tree(即DT)、Gradient Boosting(即GB)、Shrinkage (算法的一个重要演进分枝,目前大部分源码都按该版本实现)。了解这三个概念后就能明白GBDT是如何工作的。
GBDT中的树都是回归树,不是分类树,这点对理解GBDT相当重要。回归树可以选择任意合适的树,常用的树包括CART,C4.5等。
先说分类树,我们知道C4.5分类树在每次分枝时,是穷举每一个feature的每一个阈值,找到使得按照feature<=阈值,和feature>阈值分成的两个分枝的熵最大的feature和阈值(熵最大的概念可理解成尽可能每个分枝的男女比例都远离1:1),按照该标准分枝得到两个新节点,用同样方法继续分枝直到所有人都被分入性别唯一的叶子节点,或达到预设的终止条件,若最终叶子节点中的性别不唯一,则以多数人的性别作为该叶子节点的性别。
回归树总体流程也是类似,不过在每个节点(不一定是叶子节点)都会得一个预测值,以年龄为例,该预测值等于属于这个节点的所有人年龄的平均值。分枝时穷举每一个feature的每个阈值找最好的分割点,但衡量最好的标准不再是最大熵,而是最小化均方差--即(每个人的年龄-预测年龄)^2 的总和 / N,或者说是每个人的预测误差平方和 除以 N。这很好理解,被预测出错的人数越多,错的越离谱,均方差就越大,通过最小化均方差能够找到最靠谱的分枝依据。分枝直到每个叶子节点上人的年龄都唯一(这太难了)或者达到预设的终止条件(如叶子个数上限),若最终叶子节点上人的年龄不唯一,则以该节点上所有人的平均年龄做为该叶子节点的预测年龄。若还不明白可以Google "Regression Tree",或阅读另一篇文章中Regression Tree部分。
Boosting,简单说即是用多个弱分类器进行组合,构造成一个强分类器。GBDT是把所有树的结论累加起来做最终结论的,所以可以想到每棵树的叶子节点的值并不是结果本身,而是一个累加量值形成结果。GBDT的核心就在于,每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。比如A的真实年龄是18岁,但第一棵树的预测年龄是12岁,差了6岁,即残差为6岁。那么在第二棵树里我们把A的年龄设为6岁去学习,如果第二棵树真的能把A分到6岁的叶子节点,那累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树里A的年龄就变成1岁,继续学。这就是Gradient Boosting在GBDT中的意义。
在实际应用中,GBDT具有很强的泛化能力,具有很好的效果。
在具体的训练过程中,需要设置数的最大深度,最大叶子数目,以及数的棵树等,这些共同决定了最终的效果。