机器学习与数据挖掘基本算法初步介绍

随着互联网技术的发展,特别是web2.0时代的到来,互联网为我们提供了丰富的数据来源,如何充分的利用这些数据,挖掘用户信息,是下一代互联网急需解决的问题。

机器学习和数据挖掘主要是解决以下几个方面的问题,分类与预测,优化,独立特征提取等。机器学习的很多算法都是基于以下图1中模型来进行设计。

机器学习与数据挖掘基本算法初步介绍_第1张图片

 图1 学习系统模型

我们应对外界环境的刺激输入,在实践的过程中不断学习,获取经验知识,并且运用我们所学到的经验知识指导我们日常生活实践,通过实践效果的反馈,也就是所获得的经验教训,从而不断更新积累我们的阅历知识,并且在以后的生活中,将自己的经验知识学以致用。机器学习的两个主要步骤就是获取经验和学以致用。在分类中获取经验,其实就是设计分类器,而学以致用正是实践和验证分类器。在预测中,获取经验就是获取事物发展的规律,从而预测事物发展的趋势,也就是学以致用。

现在机器学习的算法多是设计一些模型(即分类器),通过导师学习来训练出模型的参数,此处的模型参数就是我们所获取的经验知识,然后将测试数据或是待分类的数据输入到模型中,既可以得到分类或预测的结果(此过程就是一个学以致用实践的过程)。在神经网络中,我们是要训练各神经元之间的连接权值,而SVM,我们是要训练分类超平面的y=wx+b中的w,b通过带入一个样本代入既可以得到。x是数据的特征向量,y是分类标识。决策树中是通过训练出一颗决策树作为分类器,贝叶斯模型则是通过概率模型来进行预测。


监督学习_分类与预测

分类主要是根据事物的某些属性对其进行归类。而预测主要是根据已有的信息对未知的某一趋势进行预测。在第一期的讨论中,如何将已知的知识和未知的问题联系起来,利用已知的知识来解决未知的问题?分类和预测问题可能能给与你一些启发。以下我们采用黑盒的方法来分析分类与预测问题。

通过机器学习的方法进行分类预测的时候,主要包括输入和输出。

输入:训练数据,测试数据

输出:训练结果,分类结果

训练数据就是一些已知了正确答案的典型例题,而测试数据就是待分类数据,也可以理解为老师给我们的测试题,测试我们学习的结果。

训练结果就是老师循循善诱的分析例题,每一步骤所得到的结果(试想以前数学解题中的综合分析法),比较每一步骤的结果与正确答案还相差多远,我们每次逐步调整我们的思路,一步一步得到正确答案。而分类结果就是我们运用老师讲解例题时所传授的解题方法解答测试题所得的答案。

各输入输出一般的形式化表达如下:

训练数据:(特征向量,目标向量(即分类标识))

测试数据:特征向量

训练结果:输出向量

分类结果:输出向量

特征向量其实就是对数据的抽象,抽象就是抽取本质特征的过程。当然具体抽取什么样的特征,视具体应用而定。比如影像数据其是包含丰富信息的,我们一般是抽象其为一个二维的亮度值矩阵。此时每一个像素点为一个数据,而特征向量就是各个波段的灰度值序列。如:(B1,B2,B3,B4, B5, B6)

目标向量在此是表征每一个像素属于某一类地物的概率。比如将一副影像分为6类地物。则目标向量的维度则为6,每一分量表征的是属于某一类的概率。比如在训练数据属于第1类的目标向量为(1,0,0,0,0,0)。目标向量的维度一般为类别数n,而若属于第i类则,则目标向量第i分量为1,其余为0。其意义表征该像素完全属于第i类。

输出向量的格式和目标向量是一样的,其也是表征每一个像素属于某一类地物的概率。不同的是目标向量是用于训练数据中,而且一般是人为事先指定属于给类别的概率。而输出向量则是将测试数据输入到分类器,分类器分析得到的分类结果。输出向量的维度也是类别数n,每一分量的取值一般为[0,1]。假如输出向量第i分量最大,我们则视其属于第i类。

了解输入输出对我们使用一些分类器进行分类有很大的帮助。在决定输入输出,最关键的是样本数据(训练数据与测试数据)的选择以及特征提取,还有假设评估。这些直接关系到我们学习到的经验知识是否货真价实,是否真的解决问题,也就是说训练得到的分类器是否能有效正确的进行分类预测。对于样本数据的选择,我们要选择足够多的样本,并且是比较典型的样本数据,能够反映总体数据或是测试数据整体特性的数据;对于特征提取算法的选择也非常重要,因为这关系到特征向量的质量,常用的特征提取有主成分分析,以及非负矩阵因式分解等;对于假设评估就是验证分类器分类的效果。一般用分类正确率来衡量。


神经网络与SVM

我们以下图介绍黑盒分类器(如神经网络,SVM等)涉及的思想。

机器学习与数据挖掘基本算法初步介绍_第2张图片
图2 机器学习过程

上图就是一个学习训练过程。当通过训练数据训练得到分类器之后,我们将测试数据或是待分类数据输入到分类器中,上图蓝色线所标注的过程就是一个学以致用的过程。而蓝色线和红色线标注的整个过程就是一个获取经验知识的过程,这个过程是在边学习边实践。

BP人工神经网络

神经网络主要由一组神经元构成,主要包括输入层,隐层和输出层单元。如下图所示:

机器学习与数据挖掘基本算法初步介绍_第3张图片

 图3 神经网络拓扑结构

BP人工神经网络基本原理是模拟人的大脑对外界环境接收的信息(初始输入),进行不断的实践改进(激励和传递函数,误差和阈值改正函数),达到或接近预期目标(目标向量),从而获取学习经验方法(网络连接权阵和结点阈值),并学以致用(网络仿真)的过程。

如下图所示:

机器学习与数据挖掘基本算法初步介绍_第4张图片

 图4 神经网络模型

BP神经网络的主要步骤如下:

•       创建网络——构建平台

–      输入:神经网络初始化信息,权值和阈值的初值

–      输出:初始化后的神经网络

–      处理:newff(minmax(X),[5,3],{'logsig','purelin'},'traingdx');

•       学习训练——学习改进,获取经验

–      输入:输入向量X,目标向量Y,神经网络

–      输出:带有训练后权连接矩阵以及各神经元的阈值的神经网络

–      处理:train(net,X,Y)

•       网络仿真——学以致用

–      输入:具有“方法经验”的net,输入数据test_input

–      输出:学以致用的实践结果

–      处理:sim(net,test_input)

SVM算法

SVM算法主要是训练出一个分类超平面。其最初是进行二分类,多分类是建立在二分类的基础上。SVM算法和神经网络不同的在于其采用不同的模型,但是输入输出机制是一样的。SVM算法涉及为找到分类超平面本是一种线性分类,为了解决非线性分类问题,其引入了核函数的方法。因为本人对这块不是很了解,具体大家可以参见资料

http://www.cnblogs.com/jerrylead/archive/2011/03/13/1982639.html

机器学习与数据挖掘基本算法初步介绍_第5张图片

图5 SVM线性分类

图中,H直线即我们要得到的分类超平面,而彩色的数据点即为支持向量。


贝叶斯算法——疾病诊断

我们常常可以通过病例库统计出患某种病的概率,以及患这种病并显现某种症状的概率。而我们却难以通过症状确诊某种疾病。我们常常是通过医生经验,如果患A病,显现B种症状的概率比较高,我们则认为,当某人显现B种症状的时候,则判其患有A病。这个过程其实就涉及到贝叶斯定理。

P(Disease| Symptom)= P(Disease)* P(Symptom | Disease)/ P(Symptom)

上式就是求解患者显现某种症状Symptom,表明其患有疾病Disease的概率P(Disease|Symptom)计算方法。通过统计病例库,了解患Disease的概率P(Disease),以及在确诊Disease情况下,显现症状的概率P(Symptom| Disease)。同时我们统计各种疾病显现该种症状Symptom的概率P (Symptom)。我们以下面的图表为例子来进行计算。

机器学习与数据挖掘基本算法初步介绍_第6张图片
图6 病例表

我们就一计算显现SymptomA 症状,为患Disease2的概率P(Disease2 | SymptomA)

P(Disease2)= 43/100 = 0.43;  P(SymptomA | Disease2)= 25/43=0.581; 

P(SymptomA)= 39/100=0.39;  P(Disease2 | SymptomA)=0.43*0.581/0.39=0.64;

同理可得:

P(Disease1| SymptomA) = 0.01/0.39

P(Disease3| SymptomA) =0.05 /0.39

P(Health| SymptomA) = 0.08/0.39

从以上概率比较我们可以清楚判断显现症状SymptomA的患者患有疾病Disease2。

贝叶斯定理其实是基于条件概率变换得到的(这句话大家可以通过深入学习贝叶斯有更加深入的了解),如下所示:

P(Symptom | Disease)= P(Disease | Symptom)*P(Symptom)/ P(Disease);

在贝叶斯定理中牵涉到两个概念,先验概率和后验概率(参见百度百科):

先验概率:是指根据以往的经验和分析得到的概率,如全概率公式,它往往是作为“由因求果”问题中的“因”出现。

客观先验概率,利用过去历史资料计算得到的先验概率,称为客观先验概率;主观先验概率,当历史资料无从取得或资料不完全时,凭人们的主观经验来判断而得到的先验概率。

后验概率:是指在得到“结果”的信息后重新修正的概率,如贝叶斯公式中的,是“执果寻因”问题中的“因”。后验概率的计算以先验概率为基础。

先验概率就是指其一般统计历史资料以及全概率公式进行计算得来,事情可能还没有发生,我们“由因寻果”。而后验概率是在得到相关信息重新修正后得到的概率。即在先验概率的基础上,一般通过贝叶斯公式进行计算得来。后验概率是指事情已经发生了,其是由某个原因引起的概率。也就是“执果寻因”。

上述疾病诊断例子采用的是朴素贝叶斯方法。其前提假设是各特征之间应该是相互独立的。而不是具有依赖连带关系。比如疾病1显现症状A与显现症状B是没有关系的。如果疾病1显现症状A时,很大可能显现症状B,这时候症状A、B之间就不是相互依赖的关系了。虽然特征之间完全的相互独立基本是不可能的,但是事实证明,假设他们之间是相互独立的,采用贝叶斯方法也是非常实用的。


决策树算法

决策树方法,关键在于构建一颗决策树,但是如何构建一颗决策树,我们就需要确定各结点,这就涉及到一些概念,信息增益。决策树分类类似于层次迭代分类,对所有数据进行第一次分类分成若干类,得到第一层聚类,然后将第一层的所有类每一类内部再次分类,从而得到第二层……,以此直至分类结果每类非常的纯洁~~然而每次分类的都要保证其类间方差最大,类内方差最小,这就牵涉到信息增益的问题。具体大家可以参见集体智慧编程的第7章的决策树建模。

由于决策树具有解释的特点,因为它是商务分析、医疗决策和政策制定领域里应用最为广泛的数据挖掘方法之一。通常,决策树的构造是自动进行的,专家们可以利用形成的决策树来理解问题的某些关键因素,然后对其加以改进,以便更好地与他的观点相匹配。这一过程允许机器协助专家进行决策,并清晰地展示出推导的路径,从而我们可以据此来判断预测的质量。

如今,决策树以这样的形式广泛运用于众多应用系统之中,其中包括了顾客调查、金融风险分析、辅助诊断和交通预测。

 

各监督分类算法特点比较

图7 各监督分类算法特点总结

上表主要是根据自己材料的阅读,进行的总结,不保证权威,欢迎大家批评指正~~


非监督学习(聚类_发现群组)

非监督学习就是不需要对分类器用训练数据训练,也就是不需要老师讲解带有正确的答案的例题来获取解题方法。试想在一个面具舞会上,大家互不相识,也没有人引荐。但是很快就会成团结簇。你会发现那些很有魅力的人,会具有强大的磁场,将与自己有共同话题的人吸引到自己的周围。此时舞会上每个人是一个聚类点,而比较有魅力的人就会成为聚类中心,而具有共同话题就是聚类内部聚类点之间的相似性。这个过程就是所谓的“物以类聚,人以群分”。目前发现的非监督学习方法,主要是聚类方法。

聚类方法主要包括描述聚类点,相似性衡量以及聚类法则。描述聚类点其实是一个形式化表达的过程,比如将舞会上的人描述为聚类点,因为是基于喜好聚类,那么聚类点所描述的向量即为喜好向量;相似性度量方法一般有欧式距离法,皮尔逊相关系数法, Tanimoto系数等,在此例子中就是个喜好向量之间的欧式距离来描述两个人之间的相似性;聚类法则就是以什么策略来进行聚类,比如层次聚类,迭代聚类。具体大家可以回忆比较kmeans算法的聚类以及系统聚类方法的不同等。


优化

优化算法主要是寻找一种最优方案。通过尝试不同方案,寻找使得成本最低的方案。其数学描述如下:

 

优化的目标就是在解空间D中寻找使得成本函数f(x)最小的解x。当然也可以是取最大值,只需要在目标函数前加一个负号就ok了。优化过程的步骤主要包括描述题解,设置目标函数,按某一搜索策略搜索使得目标函数得到最优的题解。优化算法一般用于求解最优方案,如优化参数,提供最短路线,最小交叉网络,最大最小流网络等。

优化算法的主要步骤为:

(1)       描述题解

题解就是我们要获得的最优方案,比如同学会集体到武汉旅游,要给来自各地的同学安排车次。假如每天每个地方都有6趟到武汉的火车,每趟火车的价钱不同。大家要同一天集在武汉火车站集合,一起到武汉大学来赏樱花。由于本人较穷,无法安排住宿,所以很可惜大家要同一天离开。现在我要寻找一种最优的车次安排,使得大家的总花销最少(时间成本与金钱花销)此时的题解就是每个人的车次序列。如果是求解某一函数的最值,此时的题解就是解空间区域的任一值。简单说就是候选方案的计算机描述。

(2)       搜索题解

对于解空间D中x的搜索策略有两种,一种是穷尽搜索,一种是启发式搜索。穷尽搜索就是将解空间中的每一个x值都带入到f(x)中,看使得f(x)值最小或者最大的值时的解为多少。对灰度图像进行二值化的OSTU算法就是采用这种方法(因为其搜索最佳阈值只要在0到255的区间即可,区间小)。这种方法简单直观,并且保证能到最优解,不容易陷入局部极值的情况,但是它是一种暴力方法。

试想有些题解的可能性百万个,此时穷尽搜索方法效率低下。而启发式搜索是沿着成本较小的方向进行搜索题解。这让我想到一个故事,一个设计师为园林设计一条小路,他不知道哪一条路是最佳方案,于是让人们自己在草地上走,人们自然都会沿着自己认为最短最方便的一条路线来走。几个月之后,一跳最优的路线就出来,设计师只要在上面铺上石块即可。启发式搜索算法有很多,本文简要介绍其中的随机搜素,爬山法搜素,以及进化计算的进化策略。随机搜索往往可以最大限度“普及大众”,所以采用一定次数的随机搜索,往往可以找到较好的题解。还有一种是爬山算法,如果我们要以最短的时间爬到最高点,我们就会沿着最陡峭的方向爬(假如我们是采用恒定匀速爬山),这样爬山的路线最短。此时的成本函数就是花费时间,题解就是爬山路线。此种搜索方法其实是一种贪心算法。但这种搜索方法有一个缺点就是,其可能陷入局部极值的困境。在后面会进一步进行阐述。

另外一种比较出名的搜索策略,就是进化计算的搜索策略。“物竞天择,适者生存”。我们将题解转化为种群,我们只保留适应度比较高的种群进行繁衍后代。在遗传算法中,是选择对外界环境适应度高的种群通过交叉,变异进行繁衍后代。此时的适应度函数就是目标函数,或是成本函数,而题解就是各个种群,我们需要经过若干代繁衍之后,寻找最优种群。也就是适应度最高的种群,即目标函数取得最值的题解。如下图8流程图所示:

机器学习与数据挖掘基本算法初步介绍_第7张图片

 图8 遗传优化算法流程图

启发式搜索都容易陷入局部极值的结果。也就是无法达到全局最优的结果。如爬山法,若山峰如下图9所示,我们只在A处安排一个爬山者,按照沿最陡峭的方向往上爬,这样就可能爬不到最高处。

机器学习与数据挖掘基本算法初步介绍_第8张图片

 图9 局部极值困境

而进化计算中,仅仅选择表现优异的少数几个题解很快就会使种群变得极端同质化(近亲交配),尽管种群中的题解表现得非常不错,但是他们彼此间不会有太大的差异,因为在这些题解间进行的交叉操作最终会导致种群内的题解变得越来越相似,从而陷入局部最大化。

为防止陷入局部极值有以下几种解决办法:

针对爬山法容易陷入局部最优的情况,我们采用随机重复爬山法。我们设想,多安排几个人在山脚的不同地方,沿着该地方的最陡峭的方向往上爬。也就是多涉及几个随机的初始值,沿着使成本最低的方向搜索题解。如上图所示,除了设置在A点设置一个种子点,还在B点设置了一个种子点。如果只单单安排A点,就容易陷入局部最优,而不能达到全局最优。

针对进化计算,容易陷入近亲繁殖,物种多样性降低,遗传算法采用DNA变异某种程度上可以缓解近亲繁殖,使得种群具有多样性。同时我们采用“最适合者+最幸运者”的方式进行繁衍后代。我们选择那些最适应环境变化的强者繁衍后代,同时我们随机抽奖,抽出一些幸运者进行后代繁衍。事实证明,将表现极为优异的题解和大量尚可的题解组合在一起,往往能够得到更好的结果。

两种搜索策略比较:

机器学习与数据挖掘基本算法初步介绍_第9张图片

图10 优化算法搜索策略比较

(3)       目标函数

目标函数就是f(x),也就是有些资料中经常提到的成本函数。进化计算中的适应度函数也是“该君”。在上面所举的给同学提供最优乘车方案,集体来武大看樱花。在这个例子中所谓的成本主要包括时间成本与金钱成本,主要从以下几个方面来考虑:

Ø  价格

同学们所乘车次的总票价,或者有可能是考虑财务因素之后的加权平均。

Ø  旅行时间

每个人在火车上花费的总时间

Ø  等待时间

在火车站等待其他同学到达的时间

Ø  出发时间

早晨太早的车次也许会产生额外的成本,因为这要求可爱的同学们减少睡眠的时间。

以上四个指标,前三个指标都是值都越大,成本越高,而出发时间越早,成本越高,我们采用24小时制,在此减去12,我们简单认为越在靠近午夜凌晨出发,成本越高。

故我们设置的目标函数如下:

F(x)=a*价格+b*旅行时间+c*等待时间+d*(出发时间-12)

a+b+c+d=1

在上式中,a,b,c,d为对应的权重。成本函数其实质就是时间和金钱花费加权和。

在上个成本函数还涉及一个变量缩放的问题(不好意思,有点涉及细节,但是我认为这个应该不难理解,刚好这个我也知道,就跟大家show off一下~~),原因是时间与金钱成本的单位是不一样,他们两是不能相提并论,我们要么将时间转化为金钱,或是将金钱转化为时间;要么我们设置一个中间变量,一个时间单位是多少个成本单位,一个金钱单位是多少个成本单位,这样单位就统一了。一般多采用后面一种方法,该过程就是变量缩放(时间成本变量和金钱成本变量的缩放),大家会发现在实际应用中构造目标函数,经常是要考虑到变量缩放,但具体缩放多少倍,视具体情况而定~~~

优化算法一般包括描述题解,构造目标函数以及搜索题解三步骤。具体算法包括贪心算法,动态规划,进化计算(如遗传算法,免疫计算等),群体智能等(如蚁群算法,粒子群算法等)。有兴趣的同学可以参见具体的资料。这些算法静下心来看,没有大家想象中那么难。遗传算法和蚁群算法会在图像处理应用中会做简要的介绍,希望没把大家搅晕乎~~


总结

由于作者水平有限,本文只简略的介绍一些基本的机器学习与数据挖掘的算法,而且难免会有很多错误,希望大家不吝指正。本文和之前《机器学习_初次见面请多关照》以及后面的《这是一个神奇的网站》都只是引发大家对机器学习的兴趣,如果大家想深入学习可以参见本文后面推荐的两本书,其中《集体智慧编程》为入门书籍,《机器学习》则更为严谨,更加偏向理论。

文章写得仓促(因为本人还有老板的任务),有很多错误,请大家多加见谅,也真诚希望大家能够对错误进行指出,以便我改正,小女子万分感激!

 

参考资料

[1] 集体智慧编程Toby Segaran

[2] 空间信息智能处理秦昆

[3] 神经网络, matlab中文论坛

[4] SVM算法http://www.cnblogs.com/jerrylead/archive/2011/03/13/1982639.html

[6] 先验概率_百度百科http://baike.baidu.com/view/336751.htm

[7] 后验概率_百度百科

http://www.baidu.com/s?bs=%B1%B4%D2%B6%CB%B9&f=8&rsv_bp=1&wd=%BA%F3%D1%E9%B8%C5%C2%CA&inputT=2592

[8] 先验概率和后验概率的区别http://zhidao.baidu.com/question/74505693

[9] 机器学习(美)Tom Mitchell

介绍两本比较好的书籍

                  

机器学习与数据挖掘基本算法初步介绍_第10张图片
 

集体智慧编程Toby Segaran   

   

机器学习(美)Tom Mitchell

你可能感兴趣的:(算法,数据挖掘,互联网,机器学习,图像处理)