查看原文
其他

人人都能看懂的机器学习!3个案例详解聚类、回归、分类算法

高扬 卫峥 万娟 超图集团 2020-09-15


编者按』近年来,人工智能(AI)正在不断释放科技革命和产业变革积蓄的巨大能量,深刻改变着人类生产生活方式和思维方式,推动社会生产力整体跃升。什么是AI?它将为我们带来哪些价值?我们陆续为大家分享AI科普系列文章。后续更新敬请关注!


作者:高扬 卫峥 万娟

来源:大数据(ID:hzdashuju)

内容摘编自《白话深度学习与TensorFlow》


本文导读机器是怎样学习的?都学到了什么?人类又是怎样教会机器学习的?本文将通过案例为大家讲解各类算法的原理和应用。


机器学习,一言以蔽之就是人类定义一定的计算机算法,让计算机根据输入的样本和人类的一些干预来总结和归纳其特征和特点,并用这些特征和特点以及一定的学习目标形成映射关系,进而自动化地做出相应反应的过程。这个反应可能是做出相应的标记或判断,也可能是输出一段内容——图片、程序代码、文本、声音,而机器自己学到的内容我们可以描述为一个函数、一段程序、一组策略等相对复杂的关系描述。


算法最初是一种确定性的机器指令执行序列,也就是说,机器需要怎么做早就在程序一开始就设定好了。虽说在程序执行的过程中可以依靠有限的参数对程序执行过程所涉及的对象、执行次数、执行分支条件等进行设定,但其基本行为逻辑已大抵确定。


在这个过程中,机器——计算机非常被动,它严格执行程序员赋予它们的指令执行序列,没有任何的“学习”行为。因为最初的图灵机模型在设计时就期望计算机以这种方式来运行。


从学习的种类来说,机器学习可分为:“无监督学习”(Unsupervised Learning)和“有监督学习”(Supervised Learning) 。


所谓“无监督学习”,是指人们在获得训练的向量数据后,在没有标签的情况下尝试找出其内部蕴含关系的一种挖掘工作,这个过程中使用者除了可能要设置一些必要的“超参数”(Hyper-parameter)以外,不用对这些样本做任何的标记甚至是过程干预。“有监督学习”与此不同,每一个样本都有明确的标签,我们只需总结出这些训练样本向量与标签的映射关系即可。


所以,在这两种方式下,处理的逻辑有很大区别,对于初学的朋友们来说,需要格外注意。




01 聚类


聚类——英文为Clustering,它就是我们所说的典型的“无监督学习”的一种,就是把物理对象或抽象对象的集合分组为由彼此类似的对象组成的多个类的分析过程。


对于聚类的这种行为,大家莫要认为它很神秘,也不要认为它是机器学习所独有的,恰恰相反,聚类的行为本源还是人自身。我们学习的所有数据挖掘或者机器学习的算法,或者思想的来源都是人类自己的思考方式,只不过我们把它教给机器让其代劳,让他们成为我们肢体和能力的延伸,而不是让他们替我们做创造和思考。


聚类是一种什么现象?人类在认识客观世界的过程中其实一直遇到容量性的问题。我们遇到的每一棵树、每一朵花、每一只昆虫、每一头动物、每一个人、每一栋建筑……每个个体之间其实都不同,甚至有的差距相当大。因此,人类在认知和记忆这些客观事物的过程中就会异常痛苦,其量大到使我们无法承受。


所以,人类会在“自底向上”的认识世界的过程中“偷懒”性地选择了归纳归类的方式。


例如,幼年时,我们在被父母用看图说话的方式来教咿呀学语的时候就有过类似的体会了。图片上画了一只猴子,于是我们就认识了这是一只猴子;图片上画了一辆汽车,于是我们就了解了这是一辆汽车……


但是,等我们见到其实体时,此猴非彼猴,众多猴子长式各种各样,汽车同理。从汽车的大小、颜色、样式,到喇叭的声音均是形形色色、五花八门,它们在我们的眼里是一个个新的事物吗?不,它们还是猴子,还是汽车。


诸如上述事物之间确实有所不同,但它们对我们的认知并非带来了很大的困扰。无论如何我们都不会把猴子和汽车当成一类事物去认知。猴子彼此之间虽不尽相同,但其体格、毛发、行为举止、形态等让我们认为这些不同种类的猴子最终还是归类为“猴子”这一大类动物。当然猴子与犬、马匹、熊这些脊椎动物我们也能轻易地将其区分开来。



人类天生具备这种归纳和总结的能力,能够把认知的事物相似地放到一起来作为一类事物认知。虽然它们之间总有所区别,但只要在一定的限度内,事物特征稍有区别无关大碍,它们仍属于这类事物。


在这类事物的内部,一部分个体之间的特征较为相似,另一部分个体之间的特征比较相似,这两部分个体彼此之间,人类能够明显认知到两者的差别。因此我们会在大类别的内部重新划分成两个不同的部分进行认知。比如,直观上,汽车可从形态上分为小轿车、卡车、面包车等,就连虫类也被人类轻易地从外型上区别为飞虫、爬虫、毛毛虫……


在没有人特意教给我们不同小种群的称谓与特性之前,我们已自然具备的这种由人类主观认知的能力,以特征形态的相同或近似将它们划在一个概念下。根据事物特征形态的不同将其划分在不同的概念下,这本身就是聚类的思维方式。


比较常用的聚类算法有K-Means、DBSCAN等几种,基本思路都是利用每个向量之间的“距离”——这里指的是空间中的欧氏距离或者曼哈顿距离。从远近来进行判断,彼此是否更适于从属与同一类别来做分类。


假如有三个1维样本,分别为:180、179、150,这三个向量如果要分成两类,则180和179应分在一个类别,150单一一个类别。其原因为:180和179两个距离为1,而180和179距离150分别为30和29个单位,从肉眼感官上来看,相距较远。若用机器来做学习,它可以通过算法自动感知到这些向量之间的距离,并将这些向量按照彼此间距离相近的原则分在一起,以区别于其他类簇。



在用机器做聚类学习时,每种算法均有相应的计算原则,它可将彼此“相近”的向量分在一个群组。分类完毕后,人们通常会更有针对性地去研究每一组聚在一起对象所拥有的共性,以及那些远离各个群组的孤立点——这种孤立点研究在刑侦、特殊疾病排查等方面都有应用。


在这个过程中,从获得到具体的样本向量,到得出聚类结果,人们不用进行干预,这就是“非监督”一词的由来。



02 回归


回归是一种解题方法,或者说“学习”方法,也是机器学习中较为重要的概念。


回归的英文是Regression,其单词原型中的regress,大意为“回退,退化,倒退”。Regression——回归分析的意思是借用其“倒退,倒推”的含义。简单来说就是“由果索因”的过程,是一种归纳的思想——当看到大量的事实所呈现的样态,我们会推断出其原因或客观蕴含的关系是怎样的;当看到大量观测而来的向量(数字)是某种样态,我们会设计一种假说来描述它们之间蕴含的关系是怎样的。


在机器学习领域,最常用的回归是两大类——一类是线性回归,一类是非线性回归。


所谓线性回归,就是在观察和归纳样本的过程中,认为向量和最终的函数值呈现线性的关系,而后设计这种关系为:


y = f(x) = wx + b

这里的w和x分别是1×n和n×1的矩阵,wb则指的是这两个矩阵的内积。例如,如果你在一个实验中,观察到一名病患的几个指标呈现线性关系(注意这个是大前提,如果你观察到的不是线性关系而用线性模型来建模的话,是会得到欠拟合的结果)。


拿到的x是一个5维的向量,分别代表一名患者的年龄、身高、体重、血压、血脂这几个指标值,y标签是描述他们血糖程度的指标值,x和y都是观测到的值。在拿到大量样本(就是大量的x和y)后,我们会猜测向量 (年龄、身高、体重、血压、血脂) 和与其有关联关系的血糖程度y值有这样的关系:


y=w1×年龄+w2×身高+w3×体重+w4×血压+w5×血脂+b


把每一名患者的 (年龄、身高、体重、血压、血脂) 具体向量值带入,并把其血糖程度y值也带入。这样一来,在所有的患者数据输入后,会出现一系列的六元一次方程,未知数是w1~w5和b——也就是w矩阵的内容和偏置b的内容。而下面要做的事情就是要把w矩阵的内容和偏置b的内容求出一个最“合适”的解。这个“合适”的概念是要得到一个全局范围内由f(x)映射得到的y和我们真实观测到的y的差距的加和,写出方式为:



如何理解Loss的含义?表示加和,相当于做一个一个循环,i是循环变量,从1做到n,覆盖训练集当中的每一个样本向量。加和的内容是wxi+b和yi的差值,每一个训练向量xi在通过我们刚刚假设的关系f(x)=wx+b映射后与实际观测值yi的差距值。取绝对值的含义是指这个差距不论是比观测值大或者观测值小,都是一样的差距。将全局范围内的这n个差距值相加,暂且称之为总差距值,便是Loss的含义。


显而易见,在这个映射关系中,如果w和b较为理想,其差距值为0。因为每个x经过映射都“严丝合缝”地和观测值一致了。——这种状况太为理想,在实际应用中基本无法见到。但是,Loss越小则说明这个映射关系描述的越精确。我们可将Loss描述为:


Loss=f(w, b)


再使用相应的方法,找出保证Loss尽可能小的w和b的取值,便大功告成了。在得到误差足够小的w和b,并能够在验证用的数据集上有满足当前需求的精度表现后即可。例如,预测病患的血糖误差时,误差平均值小于等于0.3为上限,训练后在验证集上的表现为误差平均值为0.2,即算作合格。



请注意,在传统的机器学习中,回归、分类这些算法里都有一个要把获取到的数据集分成训练集合验证集的过程。用训练集数据来做训练,归纳关系用;用验证集数据来做验证,避免过拟合现象。数据集划分为三七开、二八开均可,目前生产环境中大致均是这种比例。


由于这种假设中输入的x向量与标签值y是一种线性关系y=f(x)=wx+b,所以称之为线性回归。最常见的形式是y=f(x)=ax+b,也就是x是一个一维向量,w也是一个一维向量的情况。如果是呈现其他关系,比如指数关系、对数关系,这时用线性回归去做拟合则会发现它的损失函数非常大,在验证集上表现出来的误差也非常大,这是一种欠拟合现象。


非线性回归之中在机器学习领域应用最多的当属逻辑回归。它和线性回归均称之为回归,但是逻辑回归看上去更像分类。与前面我们所提到的线性回归有所不同,在这种模型中观察者假设的前提是y只有两种值,一种是1,一种是0,或者说“是”或“否”的这种判断。



这里面的wx+b和前面线性回归中所说的wx+b是一个概念,都是指一个w矩阵和x做了内积再和偏置b做了一个加和。如果设z=wx+b,那么这个回归的分类模型表达式就可以改写为:



函数图像为:



横轴是z,纵轴是y,一个多维的x经过这样两次映射后,最后投射在y上是一个取值只有1和0的二项分布。也就是我们前面所说的产生了一个“是”或“否”的分类。


训练过程跟普通线性回归一样,只不过损失函数的形式不同。但它的损失函数的含义仍旧是表示这种拟合残差与待定系数的关系,并通过相应的手段进行迭代式的优化,最后通过逐步调整待定系数减小残差。



03 分类


分类是我们在利用机器学习中使用最多的一个大类算法,我们通常将分类算法称之为“分类器”。


该算法类似于一个黑盒子,分别有入口与出口,因此较为形象。我们在入口丢进去一个“样本”,在出口期望得到一个分类的“标签”。


比如,一个分类器可以进行图片内容的分类标签,我们在“入口”放入一张老虎的照片,在“出口”则会得到“老虎”这样一个描述标签;而当我们在“入口”放入一张飞机的照片,在“出口”则会得到“飞机”这样一个描述标签,这就是一个分类器最为基本的分类工作过程。



一个分类器模型在它诞生(初始化)时并不具备这种功能。如果需让它具备这种功能,只有通过给予它大量的图片以及图片所对应的标签分类,使其进行充分地总结和归纳,才能具备这种能力。


在刚刚提到的逻辑回归方式中,我们已然看到了一些端倪。逻辑回归和普通的线性回归不同,它的拟合是一种非线性方式。而最终输出“标签值”虽然是一种实数变量,而最终分类的结果却期望是一种确定的值“是”(1)或“不是”(0)。其他各种分类器的输出通常也是离散的变量,体现出来也多是非线性的分类特点。


在编写代码教会分类器怎么做学习时,我们其实是在教它如何建立一种输入到输出的映射逻辑,以及使其自我调整,进而使逻辑更为合理。


而合理与否的判断也非常明确,那就是召回率和精确率两个指标——召回率指的是检索出的相关样本和样本库(待测对象库)中所有的相关样本的比率,衡量的是分类器的查全率。精确率是检索出的相关样本数与检索出的样本总数的比率,衡量的是分类器的查准率。


具体来说,譬如有一个1000个样本的训练集,是1000张照片,其中200张是猫,200张是狗,600张是兔子,共分成三类。我们将每个照片向量化后,加上它的标签:


  • “猫”——“0”

  • “狗”——“1”

  • “兔子”——“2”


这便相当于一个x和y的对应关系,把它们输入到训练集去训练(此处的标签0、1、2并非实数定义,而是离散化的标签定义,通常习惯用one-hot独热编码的方式来表示)。经过多轮训练之后,分类器将逻辑关系调整到了相对稳定的程度,然后用这个分类器再对200张猫、200张狗、600张兔子进行分类时,则会发现:


200张猫的图片中,有180张可以正确识别为猫,而有20张误判为狗。


200张狗的图片可以全部判断正确为狗。


600张兔子的图片中,有550张可以正确识别为兔子,还有30张被误判为猫,20张误判为狗。


在面对这种情况时,大家莫要奇怪,在所有的机器学习或者深度学习训练的工程中,误判率几乎没有办法消灭,只能用尽可能科学的手段将误判率降低。不要太难为机器,因为人类都无法保证所有信息100%均可正确判断,尤其是在图片大小、清晰程度、光线明暗悬殊的情况下。


针对于召回率和精确率,就上述例子而言:1000张图片中,200张是猫,但只能正确识别出180张,所以猫的召回率是180÷200=90%;600张兔子中正确识别550张,所以兔子的召回率是550÷600≈91.7%。


而在1000张图片中,当我们在检索狗的时候会检索出240张狗的图片,其中有200张的确是狗,有20张被误判的猫,还有20张被误判为兔子。因此,240张狗的图片中正确的仅有200张,狗的精确率为200÷240≈83.3%。


分类的训练过程和回归的训练过程一样,都是极为套路化的程序。


  • 第一,输入样本和分类标签。

  • 第二,建立映射假说的某个y=f(x)的模型。

  • 第三,求解出全局的损失函数Loss和待定系数w的映射关系,Loss=g(w)。

  • 第四,通过迭代优化逐步降低Loss,最终找到一个w能满足召回率和精确率满足当前场景需要。注意:这里指的是在验证数据集上的表现。


大家请注意这4个步骤,我们从前面最简单的机器学习的例子中已经总结出来一个最为有概括性的科学性流程。这种流程被广泛使用,并且在其它机器学习的场景中也可以顺利落地。


看起来分类器的工作过程非常简单,但人的智能行为其实是一种非常精妙或者称为完美的分类器。它能够处理极为复杂、抽象的输入内容——不管是文字、声音、图像,甚至是冷、热、刺痛感、瘙痒感这种难以名状的刺激,并且能够在相当短的时间内进行合理的输出——例如对答、附和、评论,亦或是尖叫、大笑等各种喜怒哀乐的反应与表现。从定义的角度上来说,人其实是一种极为复杂且智能的分类器。而我们在工业上使用的分类器则通常是非常片面的——只研究一种或几个事物“专业性”的分类器,这和人类的分类能力区别非常大。




04 综合应用


到目前为止,我们看到绝大多数机器学习的应用环境都非常单纯——向量清洗到位,边界划定清晰。


例如,垃圾邮件的分拣,它能够通过邮件内容的输入来判断该邮件是否为垃圾邮件;新闻的自动分类,通过新闻内容的分类来判断新闻的类别或描述内容的属性;摄像头对车牌号的OCR电子识别手写识别,这些应用可以通过输入一个图像来得到其中蕴含的文字信息向量,诸如此类等等。这些都是早些年应用比较成熟的领域,在这种应用场景中机器通过学习能够取代一些纯粹的体力劳动。



近些年来,随着计算机能力的提升,尤其是GPU并行计算的普及化,使得很多原来高密度计算的场景变得门槛越来越低,人们在商用领域已经开始寻找用深度学习的网络来做一些原来不可想象的事情。



例如这种使用卷积神经网络对照片进行风格处理,拿一张输入的普通照片,再拿一张有着较强艺术风格的绘画作品,然后通过卷积网络进行处理,最后由计算机“创作”出一幅内容基于照片但是风格基于绘画作品的新作出来。而这在几年前是难以想象的,因为它们看上去太“智能”了,太有“创造力”了。


此外,还有类似于这种方式:我们输入一张照片,让计算机根据这张照片的风格和内容,凭空创造一张很像但不一样的照片。当然,这与photoshop的功能完全不同,它是全自动的。在这些图片中,右侧的图都是源图,左侧的图则是计算机生成的图,有水波纹、云朵、花丛、还有随意的艺术涂鸦。根据图片来看,会有不少图片足以以假乱真假。这些都是使用深度神经网络处理出来的结果。



除此之外,像语音识别以及视频中存在物体的检出,这些内容也是属于近几年研究比较热门并逐渐趋于成熟的应用领域。实际上,在实现层面有很多种实现方式可以完成像这样的应用。


而在学术领域,也有一类新兴的,基于深度学习神经网络的研究领域——“对抗学习”可以实现类似的方式。在深度学习领域我们会使用“生成对抗网络”(Generative Adversial Network),这种网络的特点就是可以进行复杂内容的生成,而非生成一个标签这么简单。


【相关阅读】


【近期回顾】


 01 共谋自然资源领域新机遇:超图与特力惠达成战略合作

 02 思密达!SuperMap连接韩国地信

 03 华为超图高层会谈,部署未来更深合作

 04 大数据GIS赋能公安“超脑”

 05 《空间三维模型数据格式》团体标准发布


欢迎转载~


爱看你就点在看!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存