转载本文需注明出处:微信公众号EAWorld,违者必究。
目录:
一、机器学习:一种实现人工智能的方法
二、机器学习算法:是使计算机具有智能的关键
三、Anaconda:初学Python、入门机器学习的首选
四、总结
背景:
自“阿尔法狗”(AlphaGo)完胜人类围棋顶尖高手后,有关人工智能(AI)的讨论就从未停歇。工业4.0方兴未艾,人工智能引领的工业5.0时代却已悄然苏醒。人工智能的火爆离不开互联网、云计算、大数据、芯片和软件等技术的发展,而深度学习的进步却是当今人工智能大爆炸的核心驱动。
作为一个跨学科产物,人工智能的内容浩如烟海,各种复杂的模型和算法更让人望而生畏。那么作为一个普通程序员,在已有语言技能的前提下,该如何拥抱变化,向人工智能靠拢?如何在自己的工作中应用人工智能?学习人工智能应该从哪里开始?
人工智能并非遥不可及,人人都可以做人工智能!人工智能是让机器像人一样思考,而机器学习则是人工智能的核心,是使计算机具有智能的根本途径。学习人工智能,首先要了解机器学习的相关算法。
本文我们将与大家一起探讨机器学习的相关算法,共同揭开人工智能的神秘面纱。
一、机器学习:一种实现人工智能的方法
智能是现代生活中一个很常见的词,例如智能手机、智能家居产品、智能机器人等,但是不同的场合智能的含义也不一样。我们所说的“人工智能”(Artificial Intelligence, AI)则是指让机器像人一样思考,具备人类的智能。
从诞生至今,人工智能这个领域经历了一次又一次的繁荣与低谷,其发展上大体上可以分为“推理期”,“知识期”和“学习期”。推理期主要注重逻辑推理但是感知器过于简单;知识期虽然建立了各种各样的专家系统,但是自主学习能力和神经网络资源能力都不足。学习期机器能够自己学习知识,而直到1980年后,机器学习因其在很多领域的出色表现,才逐渐成为热门学科。近代,随着互联网、云计算、大数据的发展,以及GPU、芯片和软件技术的提升,深度学习开始兴起,拓展了人工智能的领域范围,也推动着社会从数字化向智能化的变革。
人工智能的主要包含几个部分:首先是感知,包括视觉、语音、语言;然后是决策,例如做出预测和判断;最后是反馈,如果想做一套完整的系统,就像机器人或是自动驾驶,则需要一个反馈。
人工智能众多的能力中,很重要的一个能力是其学习能力-机器学习,它是人工智能的核心,是使计算机具有智能的关键。不能自我学习,人工智能也只是徒有其表。
认识人工智能,还需要理清几个概念之间的关系:人工智能是一个大的概念,是让机器像人一样思考甚至超越人类;而机器学习是实现人工智能的一种方法,是使用算法来解析数据、从中学习,然后对真实世界中的事件做出决策和预测;深度学习是机器学习的一种实现方式,通过模拟人神经网络的方式来训练网络;而统计学是机器学习和神经网络的一种基础知识。
机器学习最大的特点是利用数据而不是指令来进行各种工作,其学习过程主要包括:数据的特征提取、数据预处理、训练模型、测试模型、模型评估改进等几部分。接下来我们重点介绍机器学习过程中的常见算法。
二、机器学习算法:是使计算机具有智能的关键
算法是通过使用已知的输入和输出以某种方式“训练”以对特定输入进行响应。代表着用系统的方法描述解决问题的策略机制。人工智能的发展离不开机器学习算法的不断进步。
机器学习算法可以分为传统的机器学习算法和深度学习。传统机器学习算法主要包括以下五类:
-
回归:建立一个回归方程来预测目标值,用于连续型分布预测
-
分类:给定大量带标签的数据,计算出未知标签样本的标签取值
-
聚类:将不带标签的数据根据距离聚集成不同的簇,每一簇数据有共同的特征
-
关联分析:计算出数据之间的频繁项集合
-
降维:原高维空间中的数据点映射到低维度的空间中
下面我们将选取几种常见的算法,一一介绍。
1. 线性回归:找到一条直线来预测目标值
一个简单的场景:已知房屋价格与尺寸的历史数据,问面积为2000时,售价为多少?
此类问题可以用回归算法来解决。回归是指确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,通过建立一个回归方程(函数)来估计特征值对应的目标变量的可能取值。最常见的是线性回归(Y= a X + b),即找到一条直线来预测目标值。回归的求解就是求解回归方程的回归系数(a,b)的过程,并且使误差最小。房价场景中,根据房屋面积和售价的关系,求出回归方程,则可以预测给定房屋面积时的售价。
线性回归的应用非常广泛,例如:
-
预测客户终生价值:基于老客户历史数据与客户生命周期的关联关系,建立线性回归模型,预测新客户的终生价值,进而开展针对性的活动。
-
机场客流量分布预测:以海量机场WiFi数据及安检登机值机数据,通过数据算法实现机场航站楼客流分析与预测。
-
货币基金资金流入流出预测:通过用户基本信息数据、用户申购赎回数据、收益率表和银行间拆借利率等信息,对用户的申购赎回数据的把握,精准预测未来每日的资金流入流出情况。
-
电影票房预测:依据历史票房数据、影评数据、舆情数据等互联网公众数据,对电影票房进行预测。
2. 逻辑回归:找到一条直线来分类数据
逻辑回归虽然名字叫回归,却是属于分类算法,是通过Sigmoid函数将线性函数的结果映射到Sigmoid函数中,预估事件出现的概率并分类。Sigmoid是归一化的函数,可以把连续数值转化为0到1的范围,提供了一种将连续型的数据离散化为离散型数据的方法。
因此,逻辑回归从直观上来说是画出了一条分类线。位于分类线一侧的数据,概率>0.5,属于分类A;位于分类线另一侧的数据,概率<0.5,属于分类B。例如图中通过计算患肿瘤的概率,将结果分类两类,分别位于逻辑分类线的两侧。
逻辑回归的应用也非常广泛,例如:
-
医学界:探索某个疾病的危险因素,根据危险因素预测疾病是否发生,与发生的概率。
-
金融界:预测贷款是否会违约,或放贷之前去估计贷款者未来是否会违约或违约的概率。
-
消费行业:预测某个消费者是否会购买某个商品,是否会购买会员卡,从而针对性得对购买概率大的用户发放广告,或代金券等等。
3. K-近邻:用距离度量最相邻的分类标签
一个简单的场景:已知一个电影中的打斗和接吻镜头数,判断它是属于爱情片还是动作片。当接吻镜头数较多时,根据经验我们判断它为爱情片。那么计算机如何进行判别呢?
可以使用K近邻算法,其工作原理如下:
(1)计算样本数据中的点与当前点之间的距离
(2)算法提取样本最相似数据(最近邻)的分类标签
(3)确定前k个点所在类别的出现频率. 一般只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数
(4)返回前k个点所出现频率最高的类别作为当前点的预测分类
电影分类场景中,k取值为3,按距离依次排序的三个点分别是动作片(108,5)、动作片(115,8)、爱情片(5,89)。在这三个点中,动作片出现的频率为三分之二,爱情片出现的频率为三分之一,所以该红色圆点标记的电影为动作片。
K近邻算法的一个常见应用是手写数字识别。手写字体对于人脑来说,看到的数字是一幅图像,而在电脑看来这是一个二维或三维数组,那怎么对数字进行识别?
使用K近邻算法的进行识别的具体步骤为:
(1)首先将每个图片处理为具有相同的色彩和大小:宽高是32像素x32像素。
(2)将32*32的二进制图像矩阵转换成1*1024的测试向量。
(3)将训练样本储存在训练矩阵中,创建一个m行1024列的训练矩阵,矩阵的每行数据存储一个图像。
(4)计算目标样本与训练样本的距离,选择前k个点所出现频率最高的数字作为当前手写字体的预测分类。
4. 朴素贝叶斯:选择后验概率最大的类为分类标签
一个简单的场景:一号碗(C1)有30颗水果糖和10颗巧克力糖,二号碗(C2)有水果糖和巧克力糖各20颗。现在随机选择一个碗,从中摸出一颗糖,发现是水果糖。问这颗水果糖(X)最有可能来自哪个碗?
这类问题可以借助贝叶斯公式来计算,不需要针对目标变量建立模型。在分类时,通过计算样本属于各个类别的概率,然后取概率值大的类别作为分类类别。
P(X|C) :条件概率, C中X出现的概率
P(C):先验概率, C出现的概率
P(C|X) :后验概率,X属于C类的概率
假设有 C1 和 C2 两个类,由于 P(X)都是一样的,所以不需要考虑 P(X)
只需考虑如下:
如果 P(X|C1) * P(C1) > P(X|C2) * P(C2),则 P(C1|X) > P(C2|X),得 X 属于 C1 ;
如果 P(X|C1) * P(C1) < P(X|C2) * P(C2),则 P(C2|X) < P(C2|X),得 X 属于 C2 。
例如上面的例子中:
P(X):水果糖的概率为5/8
P(X|C1):一号碗中水果糖的概率为3/4
P(X|C2):二号碗中水果糖的概率为2/4
P(C1)= P(C2):两个碗被选中的概率相同,为1/2
则水果糖来自一号碗的概率为:P(C1|X)=P(X|C1)P(C1)/P(X)=(3/4)(1/2)/(5/8)=3/5
水果糖来自二号碗的概率为:P(C2|X)=P(X|C2)P(C2)/P(X)=(2/4)(1/2)/(5/8)=2/5
P(C1|X)>P(C2|X) ,因此这颗糖最有可能来自一号碗。
朴素贝叶斯的主要应用有文本分类、垃圾文本过滤,情感判别,多分类实时预测等。
5. 决策树:构造一棵熵值下降最快的分类树
一个简单的场景:相亲时,可能首先检测相亲对方是否有房。如果有,则考虑进一步接触。如果没有房,则观察其是否有上进心,如果没有,直接Say Goodbye。如果有,则可以列入候选名单。
这就是一个简单的决策树模型。决策树是一种树型结构,其中每个内部结点表示在一个属性上的测试,每个分支代表一个测试输出,每个叶结点代表一种类别。采用的是自顶向下的递归方法,选择信息增益最大的特征作为当前的分裂特征。
决策树可以应于:用户分级评估、贷款风险评估、选股、投标决策等。
6. 支持向量机(SVM):构造超平面,分类非线性数据
一个简单的场景:要求用一根线将不同颜色的球分开,要求尽量在放更多球之后,仍然适用。
A、B两条线都可以满足条件。再继续增加球,线A仍可以将球很好的分开,而线B则不可以。
进一步增加难度,当球没有明确的分界线,用一条直线已经无法将球分开,该怎么解决?
这个场景中涉及支持向量机的的两个问题:
(1)当一个分类问题,数据是线性可分时,只要将线的位置放在让小球距离线的距离最大化的位置即可,寻找这个最大间隔的过程,就叫做最优化。
(2)一般的数据是线性不可分的,可以通过核函数,将数据从二维映射到高位,通过超平面将数据切分。
不同方向的最优决策面的分类间隔通常是不同的,那个具有“最大间隔”的决策面就是SVM要寻找的最优解。这个真正的最优解对应的两侧虚线所穿过的样本点,就是SVM中的支持样本点,称为支持向量。
SVM的应用非常广泛,可以应用于垃圾邮件识别、手写识别、文本分类、选股等。
7. K-means:计算质心,聚类无标签数据
在上面介绍的分类算法中,需要被分类的数据集已经有标记,例如数据集已经标记为○或者×,通过学习出假设函数对这两类数据进行划分。而对于没有标记的数据集,希望能有一种算法能够自动的将相同元素分为紧密关系的子集或簇,这就是聚类算法。
举个具体的例子,例如有一批人的年龄的数据,大致知道其中有一堆少年儿童,一堆青年人,一堆老年人。
聚类就是自动发现这三堆数据,并把相似的数据聚合到同一堆中。如果要聚成3堆的话,那么输入就是一堆年龄数据,注意,此时的年龄数据并不带有类标号,也就是说只知道里面大致有三堆人,至于谁是哪一堆,现在是不知道的,而输出就是每个数据所属的类标号,聚类完成之后,就知道谁和谁是一堆了。
而分类就是,事先告诉你,少年儿童、青年人及老年人的年龄是什么样的,现在新来了一个年龄,输入它的年龄,输出她属于的分类。一般分类器是需要训练的,它才能识别新的数据。
K-Means算法是一种常见的聚类算法,其基本步骤为:
(1)随机生成k个初始点作为质心;
(2)将数据集中的数据按照距离质心的远近分到各个簇中;
(3)将各个簇中的数据求平均值,作为新的质心,重复上一步,直到所有的簇不再改变。
两个分类间隔越远,则聚类效果越好。
K-means算法的一个案例是:客户价值细分,精准投资。以航空公司为例,因为业务竞争激烈,企业营销焦点从产品中心转为客户中心;建立合理的客户价值评估模型,进行客户分类,进行精准营销,是解决问题的关键。
识别客户价值,通过五个指标:最近消费时间间隔R,消费频率F,飞行里程 M和折扣系数的平均值C,客户关系长度L(LRFMC模型)。采用K-Means算法对客户数据进行客户分群,聚成五类(需结合业务的理解与分析来确定客户的类别数量)绘制客户群特征雷达图。
客户价值分析:
重要保持客户:C、F、M较高,R低。应将资源优先投放到这类客户身上,进行差异化管理,提高客户的忠诚度和满意度。
重要发展客户:C较高,R、F、M较低。这类客户入会时长(L)短、当前价值低、发展潜力大,应促使客户增加在本公司和合作伙伴处的消费。
重要挽留客户:C、F 或 M 较高,R较高 或 L变小,客户价值变化的不确定性高。应掌握客户最新信息、维持与客户的互动。
一般和低价值客户:C、F、M、L低、R较高。这类客户可能在打折促销时才会选择消费。
K-means算法的一个比较有趣的案例是进行图像压缩。在彩色图像中,每个像素的大小为3字节(RGB),可以表示的颜色总数为256 * 256 * 256。利用K-means算法把类似的颜色分别放在K个簇中,因此只需要保留每个像素的标签,以及每个簇的颜色编码即可完成图像的压缩。
8. 关联分析:挖掘啤酒与尿布(频繁项集)的关联规则
20世纪90年代美国沃尔玛超市中,超市管理人员分析销售数据时发现 “啤酒”与“尿布”两件看上去毫无关系的商品会经常出现在同一个购物篮中。经过调查发现,这种现象出现在年轻的父亲身上。在美国有婴儿的家庭中,一般是母亲在家中照看婴儿,年轻的父亲去超市买尿布时,往往会顺便为自己购买啤酒。如果在卖场只能买到两件商品之一,他很有可能会放弃购物而去另一家可以同时买到啤酒与尿布的商店。由此,沃尔玛发现了这一独特的现象,开始在卖场尝试将啤酒与尿布摆放在相同区域,让年轻的父亲可以同时找到这两件商品,从而获得了很好的商品销售收入。
“啤酒+尿布”故事中利用的就是关联算法,比较常见的一种关联算法是FP-growth算法。
算法中几个相关的概念:
-
频繁项集:在数据库中大量频繁出现的数据集合。例如购物单数据中{'啤酒'}、{'尿布'}、{'啤酒', '尿布'}出现的次数都比较多。
-
关联规则:由集合 A,可以在某置信度下推出集合 B。即如果 A 发生了,那么 B 也很有可能会发生。例如购买了{'尿布'}的人很可能会购买{'啤酒'}。
-
支持度:指某频繁项集在整个数据集中的比例。假设数据集有 10 条记录,包含{'啤酒', '尿布'}的有 5 条记录,那么{'啤酒', '尿布'}的支持度就是 5/10 = 0.5。
-
置信度:有关联规则如{'尿布'} -> {'啤酒'},它的置信度为 {'尿布'} -> {'啤酒'}
假设{'尿布', '啤酒'}的支持度为 0.45,{'尿布'}的支持度为 0.5,则{'尿布'} -> {'啤酒'}的置信度为 0.45 / 0.5 = 0.9。
应用比较广泛,例如:
-
用于制定营销策略。如同啤酒与尿布的例子,超市如果将啤酒和尿布放在相邻的位置,会增加两者的销量。
-
用于发现共现词。在浏览器中输入"普元"时,浏览器自动弹出如"普元平台","普元EOS"等备选记录。
FP-growth算法一个简单的案例:通过购物车数据,分析商品之间的关联关系。
分析步骤为:
(1)从购物车数据中挖掘出频繁项集
(2)从频繁项集中产生关联规则,计算支持度
(3)输出置信度
频繁项集 | 支持度 | 关联规则 | 置信度 |
{'gloves'} | 0.5 | {'socks' }-> {'shoes'} | 0.75 |
{'shoes', 'socks'} | 0.5 | {'shoes'} -> {'socks'} | 1.0 |
{'milk', 'eggs', 'bread'} | 0.5 | {'eggs', 'bread'} -> {'milk'} | 1.0 |
{'bread'} | 0.5 | {'bread'} -> {'milk', 'eggs'} | 1.0 |
{'milk', 'bread'} | 0.5 | {'eggs'} -> {'milk', 'bread'} | 1.0 |
{'gloves', 'socks'} | 0.5 | {'milk', 'bread'} -> {'eggs'} | 1.0 |
{'shoes'} | 0.5 | {'milk'} -> {'eggs', 'bread'} | 0.75 |
{'eggs', 'bread'} | 0.5 | {'milk', 'eggs'} -> {'bread'} | 1.0 |
{'eggs'} | 0.5 | {'bread'} -> {'milk'} | 1.0 |
{'milk'} | 0.67 | {'milk'} -> {'eggs', 'bread'} | 0.75 |
{'socks'} | 0.67 | {'milk', 'eggs'} -> {'bread'} | 1.0 |
{'milk', 'eggs'} | 0.5 | {'bread'} -> {'milk'} | 1.0 |
{'milk'} -> {'bread'} | 0.75 |
根据结果,可以分析出购买了鞋子,极有可能会同时购买袜子;购买了鸡蛋与面包,极有可能会购买牛奶。
9. PCA降维:减少数据维度,降低数据复杂度
降维是指将原高维空间中的数据点映射到低维度的空间中。因为高维特征的数目巨大,距离计算困难,分类器的性能会随着特征数的增加而下降;减少高维的冗余信息所造成的误差,可以提高识别的精度。
比较常用的是主成分分析算法(PCA)。它是通过某种线性投影,将高维的数据映射到低维的空间中表示,并期望在所投影的维度上数据的方差最大,以此使用较少的数据维度,同时保留住较多的原数据点的特性。
例如对数字进行降维,当使用1个特征向量的时候,3的基本轮廓已经保留下来了,特征向量使用的越多就越与原始数据接近。
10. 人工神经网络:逐层抽象,逼近任意函数
前面介绍了九种传统的机器学习算法,现在介绍一下深度学习的基础:人工神经网络。
它是模拟人脑神经网络而设计的模型,由多个节点(人工神经元)相互联结而成,可以用来对数据之间的复杂关系进行建模。不同节点之间的连接被赋予了不同的权重,每个权重代表了一个节点对另一个节点的影响大小。每个节点代表一种特定函数,来自其他节点的信息经过其相应的权重综合计算。是一个可学习的函数,接受不同数据的训练,不断通过调整权重而得到契合实际模型,一个三层的神经网络可以逼近任意的函数。
例如利用单层神经网络实现逻辑与门和同或门。
多层神经网络的每一层神经元学习到的是前一层神经元值的更抽象的表示,通过抽取更抽象的特征来对事物进行区分,从而获得更好的区分与分类能力。例如在图像识别中,第一个隐藏层学习到的是 “边缘”的特征,第二层学习由“边缘”组成的“形状”的特征,第三层学习到的是由“形状”组成的“图案”的特征,最后的隐藏层学习到的是由“图案”组成的“目标”的特征。
11. 深度学习:赋予人工智能以璀璨的未来
深度学习是机器学习的分支,是对人工神经网络的发展。深度学习是当今人工智能爆炸的核心驱动,赋予人工智能以璀璨的未来。
看一下深度学习与传统机器学习的区别。传统机器学习特征处理和预测分开,特征处理一般需要人工干预完成。这类模型称为浅层模型,或浅层学习,不涉及特征学习,其特征主要靠人工经验或特征转换方法来抽取。
要提高一种表示方法的表示能力,其关键是构建具有一定深度的多层次特征表示 。一个深层结构的优点是可以增加特征的重用性,从而指数级地增加表示能力。从底层特征开始,一般需要多步非线性转换才能得到较为抽象的高层语义特征。这种自动学习出有效特征的方式称为“表示学习”。
深度学习就是一种基于对数据进行表征学习的方法,使用多层网络,能够学习抽象概念,同时融入自我学习,逐步从大量的样本中逐层抽象出相关的概念,然后做出理解,最终做出判断和决策。通过构建具有一定“深度”的模型,可以让模型来自动学习好的特征表示(从底层特征,到中层特征,再到高层特征),从而最终提升预测或识别的准确性。
目前深度学习的应用十分广泛,例如图像识别、语音识别、机器翻译、自动驾驶、金融风控、智能机器人等。
三、Anaconda:初学Python、入门机器学习的首选
已经了解了机器学习过程中使用的算法,那么该如何动手实践呢?
Anaconda是初学Python、入门机器学习的首选。它是一个用于科学计算的Python发行版,提供了包管理与环境管理的功能,可以很方便地解决多版本python并存、切换以及各种第三方包安装问题。
集成包功能:
-
NumPy:提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用,Python创建的所有更高层工具的基础,不提供高级数据分析功能
-
Scipy:依赖于NumPy,它提供便捷和快速的N维向量数组操作。提供模块用于优化、线性代数、积分以及其它数据科学中的通用任务。
-
Pandas:基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的,包含高级数据结构,以及和让数据分析变得快速、简单的工具
-
Matplotlib:Python最著名的绘图库
其中, Scikit-Learn是Anaconda中集成的开源机器学习工具包,主要涵盖分类,回归和聚类算法,可以直接调用传统机器学习的算法进行使用。同时Anaconda也兼容Google开发的第二代人工智能系统TensorFlow,进行深度学习的开发。
最后通过一个基于Python的决策树案例,来直观了解一下机器学习的过程。
贷款申请的决策树,用以对未来的贷款申请进行分类。
具体实现过程:
(1)准备数据集:从贷款申请样本数据表中,选取对训练数据具有分类能力的特征
(2)构建树:选择信息增益最大的特征作为分裂特征构建决策树
(3)数据可视化:使用Matplotlib对数据进行可视化
(4)执行分类:用于实际数据的分类。例如输入测试数据[0,1],它代表没有房子,但是有工作,分类结果为“房贷”。
四、总结
希望通过本次介绍,大家能够对机器学习涉及的算法有初步的认识,为以后进行相关人工智能方面的研究所有帮助。机器学习其实没有那么复杂,只是将统计学、概率论等数学知识应用在人工智能领域。借助现有的软件平台,可以轻松的调用已经集成的算法,让工程师不再为复杂的算法理论而烦恼,可以有更多的时间去开发和创新!
关于作者:李广珍博士,普元博士后,专利指导人。主要负责微服务及DevOps关键技术和方法论研究以及相关的技术预研。
关于EAWorld:微服务,DevOps,数据治理,移动架构原创 技术分享