datongmuyile 2019-11-04
机器学习(Machine Learning,ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。其专门研究计算机是怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构,使之不断改善自身的性能。此外,数据挖掘和机器学习有很大的交集。本文将从架构和应用角度去解读这两个领域。
数据挖掘是从海量数据中获取有效的、新颖的、潜在有用的、最终可理解的模式的非平凡过程。数据挖掘中用到了大量的机器学习界提供的数据分析技术和数据库界提供的数据管理技术。从数据分析的角度来看,数据挖掘与机器学习有很多相似之处,但不同之处也十分明显,例如,数据挖掘并没有机器学习探索人的学习机制这一科学发现任务,数据挖掘中的数据分析是针对海量数据进行的,等等。从某种意义上说,机器学习的科学成分更重一些,而数据挖掘的技术成分更重一些。
学习能力是智能行为的一个非常重要的特征,不具有学习能力的系统很难称之为一个真正的智能系统,而机器学习则希望(计算机)系统能够利用经验来改善自身的性能,因此该领域一直是人工智能的核心研究领域之一。在计算机系统中,“经验”通常是以数据的形式存在的,因此,机器学习不仅涉及对人的认知学习过程的探索,还涉及对数据的分析处理。实际上,机器学习已经成为计算机数据分析技术的创新源头之一。由于几乎所有的学科都要面对数据分析任务,因此机器学习已经开始影响到计算机科学的众多领域,甚至影响到计算机科学之外的很多学科。机器学习是数据挖掘中的一种重要工具。然而数据挖掘不仅仅要研究、拓展、应用一些机器学习方法,还要通过许多非机器学习技术解决数据仓储、大规模数据、数据噪声等实践问题。机器学习的涉及面也很宽,常用在数据挖掘上的方法通常只是“从数据学习”。然而机器学习不仅仅可以用在数据挖掘上,一些机器学习的子领域甚至与数据挖掘关系不大,如增强学习与自动控制等。所以笔者认为,数据挖掘是从目的而言的,机器学习是从方法而言的,两个领域有相当大的交集,但不能等同。
图1是一个典型的推荐类应用,需要找到“符合条件的”潜在人员。要从用户数据中得出这张列表,首先需要挖掘出客户特征,然后选择一个合适的模型来进行预测,最后从用户数据中得出结果。
把上述例子中的用户列表获取过程进行细分,有如下几个部分(见图2)。
整个过程会不断反复,模型也会不断调整,直至达到理想效果。
机器学习的算法有很多,这里从两个方面进行介绍:一个是学习方式,另一个是算法类似性。
根据数据类型的不同,对一个问题的建模可以有不同的方式。在机器学习或人工智能领域,人们首先会考虑算法的学习方式。在机器学习领域有如下几种主要的学习方式。
监督式学习:在监督式学习下,输入数据被称为“训练数据”,每组训练数据都有一个明确的标识或结果,如对防垃圾邮件系统中的“垃圾邮件”、“非垃圾邮件”,对手写数字识别中的“1”、“2”、“3”、“4”等。在建立预测模型的时候,监督式学习建立一个学习过程,将预测结果与“训练数据”的实际结果进行比较,不断地调整预测模型,直到模型的预测结果达到一个预期的准确率。监督式学习的常见应用场景包括分类问题和回归问题。常见算法有逻辑回归和反向传递神经网络。
非监督式学习:在非监督式学习下,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。常见的应用场景包括关联规则的学习及聚类等。常见算法包括Apriori算法和K-Means算法。
半监督式学习:在半监督式学习下,输入数据部分被标识,部分没有被标识。这种学习模型可以用来进行预测,但是模型首先需要学习数据的内在结构,以便合理地组织数据进行预测。其应用场景包括分类和回归。常见算法包括一些对常用监督式学习算法的延伸。这些算法首先试图对未标识的数据进行建模,然后在此基础上对标识的数据进行预测,如图论推理算法或拉普拉斯支持向量机等。
强化学习:在强化学习下,输入数据作为对模型的反馈,不像监督模型那样,输入数据仅仅作为一种检查模型对错的方式。在强化学习下,输入数据直接反馈到模型,模型必须对此立刻做出调整。常见的应用场景包括动态系统及机器人控制等。常见算法包括Q-Learning及时间差学习(Temporal Difference Learning)等。
在企业数据应用的场景下,人们最常用的可能就是监督式学习和非监督式学习。在图像识别等领域,由于存在大量的非标识数据和少量的可标识数据,目前半监督式学习是一个很热门的话题。而强化学习更多地应用在机器人控制及其他需要进行系统控制的领域。
算法类似性
根据算法的功能和形式的类似性,可以对算法进行分类,如基于树的算法、基于神经网络的算法等。当然,机器学习的范围非常庞大,有些算法很难明确归到某一类。而对于有些分类来说,同一分类的算法可以针对不同类型的问题。这里,我们尽量把常用的算法按照最容易理解的方式进行分类。
回归算法:回归算法是试图采用对误差的衡量来探索变量之间的关系的一类算法。回归算法是统计机器学习的利器。常见的回归算法包括最小二乘法、逻辑回归、逐步式回归、多元自适应回归样条及本地散点平滑估计等。
基于实例的算法:基于实例的算法常常用来对决策问题建立模型,这样的模型常常先选取一批样本数据,然后根据某些近似性把新数据与样本数据进行比较,从而找到最佳的匹配。因此,基于实例的算法常常被称为“赢家通吃学习”或者“基于记忆的学习”。常见的算法包括k-Nearest Neighbor(kNN)、学习矢量量化(Learning Vector Quantization,LVQ)及自组织映射算法(Self-Organizing Map,SOM)等。
正则化算法:正则化算法是其他算法(通常是回归算法)的延伸,根据算法的复杂度对算法进行调整。正则化算法通常对简单模型予以奖励,而对复杂算法予以惩罚。常见的算法包括Ridge Regression、Least Absolute Shrinkage and Selection Operator(LASSO)及弹性网络(Elastic Net)等。
决策树算法:决策树算法根据数据的属性采用树状结构建立决策模型,常用来解决分类和回归问题。常见算法包括分类及回归树(Classification and Regression Tree,CART)、ID3(Iterative Dichotomiser 3)、C4.5、Chi-squared Automatic Interaction Detection(CHAID)、Decision Stump、随机森林(Random Forest)、多元自适应回归样条(MARS)及梯度推进机(GBM)等。
贝叶斯算法:贝叶斯算法是基于贝叶斯定理的一类算法,主要用来解决分类和回归问题。常见的算法包括朴素贝叶斯算法、平均单依赖估计(Averaged One-Dependence Estimators,AODE)及Bayesian Belief Network(BBN)等。
基于核的算法:基于核的算法中最著名的莫过于支持向量机(SVM)。基于核的算法是把输入数据映射到一个高阶的向量空间,在这些高阶向量空间里,有些分类或者回归问题能够更容易地解决。常见的基于核的算法包括支持向量机(Support Vector Machine,SVM)、径向基函数(Radial Basis Function,RBF)及线性判别分析(Linear Discriminate Analysis,LDA)等。
聚类算法:聚类算法通常按照中心点或者分层的方式对输入数据进行归并。所有的聚类算法都试图找到数据的内在结构,以便按照最大的共同点将数据进行归类。常见的聚类算法包括K-Means算法及期望最大化算法(EM)等。
关联规则学习:关联规则学习通过寻找最能够解释数据变量之间关系的规则,来找出大量多元数据集中有用的关联规则。常见的算法包括Apriori算法和Eclat算法等。
人工神经网络算法:人工神经网络算法模拟生物神经网络,是一类模式匹配算法,通常用于解决分类和回归问题。人工神经网络是机器学习的一个庞大的分支,有几百种不同的算法(深度学习就是其中的一类算法)。常见的人工神经网络算法包括感知器神经网络、反向传递、Hopfield网络、自组织映射及学习矢量量化等。
深度学习算法:深度学习算法是对人工神经网络的发展。在计算能力变得日益廉价的今天,深度学习算法试图建立大得多也复杂得多的神经网络。很多深度学习算法是半监督式学习算法,用来处理存在少量未标识数据的大数据集。常见的深度学习算法包括受限波尔兹曼机(RBN)、Deep Belief Networks(DBN)、卷积网络(Convolutional Network)及堆栈式自动编码器 (Stacked Auto-encoders)等。
降低维度算法:与聚类算法一样,降低维度算法试图分析数据的内在结构,不过降低维度算法通过非监督式学习,试图利用较少的信息来归纳或者解释数据。这类算法可以用于高维数据的可视化,或者用来简化数据以便监督式学习使用。常见的降低维度算法包括主成分分析(Principle Component Analysis,PCA)、偏最小二乘回归(Partial Least Square Regression,PLSR)、Sammon映射、多维尺度(Multi-Dimensional Scaling,MDS)及投影追踪(Projection Pursuit)等。
集成算法:集成算法用一些相对较弱的学习模型独立地就同样的样本进行训练,然后把结果整合起来进行整体预测。集成算法的主要难点在于究竟集成哪些独立的、较弱的学习模型,以及如何把学习结果整合起来。这是一类非常强大的算法,同时也非常流行。常见的集成算法包括Boosting、Bootstrapped Aggregation(Bagging)、AdaBoost、堆叠泛化(Stacked Generalization,Blending)、梯度推进机(Gradient Boosting Machine,GBM)及随机森林(Random Forest)等。
前面了解了机器学习和数据挖掘的基本概念,下面来看一下业界成熟的案例,对机器学习和数据挖掘有一个直观的理解。
尿布和啤酒的故事
先来看一则有关数据挖掘的故事——“尿布与啤酒”。
总部位于美国阿肯色州的世界著名商业零售连锁企业沃尔玛拥有世界上最大的数据仓库系统。为了能够准确了解顾客在其门店的购买习惯,沃尔玛对其顾客的购物行为进行购物篮分析,想知道顾客经常一起购买的商品有哪些。沃尔玛数据仓库里集中了其各门店的详细原始交易数据,在这些原始交易数据的基础上,沃尔玛利用NCR数据挖掘工具对这些数据进行分析和挖掘。一个意外的发现是:跟尿布一起购买最多的商品竟然是啤酒!这是数据挖掘技术对历史数据进行分析的结果,反映了数据的内在规律。那么,这个结果符合现实情况吗?是否有利用价值?
于是,沃尔玛派出市场调查人员和分析师对这一数据挖掘结果进行调查分析,从而揭示出隐藏在“尿布与啤酒”背后的美国人的一种行为模式:在美国,一些年轻的父亲下班后经常要到超市去买婴儿尿布,而他们中有30%~40%的人同时也为自己买一些啤酒。产生这一现象的原因是:美国的太太们常叮嘱她们的丈夫下班后为小孩买尿布,而丈夫们在买完尿布后又随手带回了他们喜欢的啤酒。
既然尿布与啤酒一起被购买的机会很多,于是沃尔玛就在其各家门店将尿布与啤酒摆放在一起,结果是尿布与啤酒的销售量双双增长。
决策树用于电信领域故障快速定位
电信领域比较常见的应用场景是决策树,利用决策树来进行故障定位。比如,用户投诉上网慢,其中就有很多种原因,有可能是网络的问题,也有可能是用户手机的问题,还有可能是用户自身感受的问题。怎样快速分析和定位出问题,给用户一个满意的答复?这就需要用到决策树。
图3就是一个典型的用户投诉上网慢的决策树的样例。
小米面孔相册
这项功能的名字叫“面孔相册”,可以利用图像分析技术,自动地对云相册照片内容按照面孔进行分类整理。开启“面孔相册”功能后,可以自动识别、整理和分类云相册中的不同面孔。
“面孔相册”还支持手动调整分组、移出错误面孔、通过系统推荐确认面孔等功能,从而弥补机器识别的不足。
这项功能的背后其实使用的是深度学习技术,自动识别图片中的人脸,然后进行自动识别和分类。
支付宝扫脸支付
马云在2015 CeBIT展会开幕式上首次展示了蚂蚁金服的最新支付技术“Smile to Pay”(扫脸支付),惊艳全场。支付宝宣称,Face++ Financial人脸识别技术在LFW国际公开测试集中达到99.5%的准确率,同时还能运用“交互式指令+连续性判定+3D判定”技术。人脸识别技术基于神经网络,让计算机学习人的大脑,并通过“深度学习算法”大量训练,让它变得极为“聪明”,能够“认人”。实现人脸识别不需要用户自行提交照片,有资质的机构在需要进行人脸识别时,可以向全国公民身份证号码查询服务中心提出申请,将采集到的照片与该部门的权威照片库进行比对。
也就是说,用户在进行人脸识别时,只需打开手机或电脑的摄像头,对着自己的正脸进行拍摄即可。在智能手机全面普及的今天,这个参与门槛低到可以忽略不计。
用户容易担心的隐私问题在人脸识别领域也能有效避免,因为照片来源权威,同时,一种特有的“脱敏”技术可以将照片模糊处理成肉眼无法识别而只有计算机才能识别的图像。
图片内容识别
前面两个案例介绍的都是图片识别,比图片识别更难的是图片语义的理解和提取,百度和Google都在进行这方面的研究。
百度的百度识图能够有效地处理特定物体的检测识别(如人脸、文字或商品)、通用图像的分类标注,如图4所示。
来自Google研究院的科学家发表了一篇博文,展示了Google在图形识别领域的最新研究进展。或许未来Google的图形识别引擎不仅能够识别出图片中的对象,还能够对整个场景进行简短而准确的描述,如图5所示。这种突破性的概念来自机器语言翻译方面的研究成果:通过一种递归神经网络(RNN)将一种语言的语句转换成向量表达,并采用第二种RNN将向量表达转换成目标语言的语句。
而Google将以上过程中的第一种RNN用深度卷积神经网络CNN替代,这种网络可以用来识别图像中的物体。通过这种方法可以实现将图像中的对象转换成语句,对图像场景进行描述。概念虽然简单,但实现起来十分复杂,科学家表示目前实验产生的语句合理性不错,但距离完美仍有差距,这项研究目前仅处于早期阶段。图6展示了通过此方法识别图像对象并产生描述的过程。
自然语言识别
自然语言识别一直是一个非常热门的领域,最有名的是苹果的Siri,支持资源输入,调用手机自带的天气预报、日常安排、搜索资料等应用,还能够不断学习新的声音和语调,提供对话式的应答。微软的Skype Translator可以实现中英文之间的实时语音翻译功能,将使得英文和中文普通话之间的实时语音对话成为现实。
Skype Translator的运作机制如图7所示。
在准备好的数据被录入机器学习系统后,机器学习软件会在这些对话和环境涉及的单词中搭建一个统计模型。当用户说话时,软件会在该统计模型中寻找相似的内容,然后应用到预先“学到”的转换程序中,将音频转换为文本,再将文本转换成另一种语言。
虽然语音识别一直是近几十年来的重要研究课题,但是该技术的发展普遍受到错误率高、麦克风敏感度差异、噪声环境等因素的阻碍。将深层神经网络(DNNs)技术引入语音识别,极大地降低了错误率、提高了可靠性,最终使这项语音翻译技术得以广泛应用。
深度学习
Artificial Intelligence(人工智能)是人类美好的愿望之一。虽然计算机技术已经取得了长足的进步,但截至目前,还没有一台计算机能够产生“自我”的意识。的确,在人类和大量现有数据的帮助下,计算机可以表现得十分强大,但是离开了这两者,它甚至都不能分辨两只小动物。
深度学习算法自动提取分类所需的低层次或者高层次特征。高层次特征是指该特征可以分级(层次)地依赖其他特征。例如,对于机器视觉,深度学习算法从原始图像去学习得到它的一个低层次表达,如边缘检测器、小波滤波器等,然后在这些低层次表达的基础上再建立表达,如这些低层次表达的线性或者非线性组合,然后重复这个过程,最后得到一个高层次的表达。
深度学习能够得到更好地表示数据的特征,同时由于模型的层次、参数很多,容量足够,因此,模型有能力表示大规模数据。所以对于图像、语音这种特征不明显(需要手工设计且很多没有直观的物理含义)的问题,能够在大规模训练数据上取得更好的效果。此外,从模式识别特征和分类器的角度来看,深度学习框架将特征和分类器结合到一个框架中,用数据去学习特征,在使用中减少了手工设计特征的巨大工作量,因此,不仅效果更好,而且使用起来也有很多方便之处。