不论是在科研中还是在工业领域,机器学习都是个热门话题,新的机器学习方法也层出不穷。机器学习发展迅速又很复杂。对初学者而言,紧跟其发展无疑十分困难,即便是对专家们来说也非易事。
为揭开机器学习的神秘面纱,帮助新手学习该领域的核心概念,本文会介绍十种不同的机器学习方法,包括简单描述和可视化等,并一一举例说明。
机器学习算法(模型)是个表示某一问题(常为商业问题)所包含数据信息的数学表达式。设计算法是为了分析数据从而获取有用信息。比如,在线零售商想要预测下一季度的销售额时,就可能会用到机器学习算法,根据之前的销售额和其他相关数据来进行预测。同样,风车制造商可以监管重要的设备,他们给算法提供视频数据使其在训练之后能够识别设备上的裂缝。
本文介绍的十种机器学习方法可以让你对机器学习有一个整体的了解,帮助你打下相关的知识和技能基础:
1. 回归
2. 分类
3. 聚类
4. 降维
5. 集成方法
6. 神经网络与深度学习
7. 迁移学习
8. 强化学习
9. 自然语言处理
10. 词嵌入
最后,在介绍这些方法之前,还是先来区分一下监督学习和无监督学习这两种机器学习类别吧。
监督学习用于在已有数据的情况下进行预测或解释,即通过先前输入和输出的数据来预测基于新数据的输出。比如,监督机器学习技术可用来帮助某服务企业预测未来一个月订购该服务的新用户量。
相比之下,无监督机器学习是在不使用目标变量进行预测的情况下,对数据点进行关联和分组。换言之,它根据特征评估数据,并根据这些特征,将相似的数据聚集在一起。例如,无监督学习技术可用来帮助零售商对具有相似特征的产品进行分类,而且无需事先指定具体特征是什么。
1. 回归
回归是一种监督机器学习方法,在先前数据的基础上预测或解释特定数值。例如要想知道某房产的价值,可根据与之相似房产的定价来预测。
线性回归是最简单的回归方法,用直线方程(y = m * x b)来模拟数据集。通过计算直线的位置和斜率得到具有许多数据对(x,y)的线性回归模型,在该直线上,所有数据点到它的距离之和最小。换言之,计算的是最接近数据中观测值的那条线的斜率(m)和y截距(b)。
接着再来看一些具体的线性回归例子。将建筑物的年龄、楼层数、面积(平方英尺)和墙上插入式设备的数量这些数据汇总在一起,用线性回归方法来预测该建筑物的耗能情况(以千瓦时为单位)。由于有多种输入值(年龄,面积等),可以选择多变量线性回归方法,原理和简单的一元线性回归一样,但在这种情况下,由于有多个变量,最终创建出来的“线”是多维的。
下图显示了线性回归模型与建筑物实际能耗的吻合程度。如果已知某建筑物的各项特征(年龄、面积等),但耗能情况未知,就可以用拟合线来对其进行估算。
注意,线性回归还可以用来估计各个因素对于最终耗能情况的影响程度。例如,有了公式,就可以确定建筑物的年龄、面积或高度是否为最重要的影响因素。
用来估算建筑物能耗(以千瓦时为单位)的线性回归模型
回归技术有简单的(线性回归),也有复杂的(正则化线性回归、多项式回归、决策树和随机森林回归、神经网络等),你大可不必感到迷惑,可以先从简单的线性回归着手,掌握其中的技术,然后继续学习较复杂的类型。
2. 分类
分类是另一种监督机器学习方法,这一方法对某个类别值进行预测或解释。比如可以用分类的方法来预测线上顾客是否会购买某一产品。输出可分为是或否,即购买者或非购买者。但分类并不限于两个选择。例如,可通过分类来看某一图像中是否有汽车或卡车。在这种情况下,输出就有3个不同值,分别为1)图像包含汽车、2)图像包含卡车或3)图像既不包含汽车也不包含卡车。
逻辑回归是分类算法中最简单的一类,这听起来很像一个回归方法,其实不然。逻辑回归是基于一个或多个输入来估计某一事件发生概率的一种算法。
例如,逻辑回归可基于学生的两次考试分数来估计该生被某一大学录取的概率。由于估计值是概率,输出只能是介于0和1之间的数字,其中1表示完全确定。对该生而言,如果估计概率大于0.5,预测结果就是:他(她)能被录取,如果估计概率小于0.5,预测结果则为:他(她)不会被录取。
下图显示了先前学生的分数以及他们最终的录取结果。用逻辑回归可绘制出一条代表决策边界的线。
逻辑回归决策边界线:他们能否被大学录取?
逻辑回归是一个线性模型,因此是新手学习分类方法入门的不错选择。随着不断的进步,就可以深入研究像决策树、随机森林、支持向量机和神经网络这些非线性分类了。
3. 聚类
聚类方法的目标是对具有相似特征的观察值进行分组或聚类,是一种无监督机器学习方法。聚类方法不借助输出信息进行训练,而是让算法定义输出。在这一方法中,只能使用可视化来检验解决方案的质量。
最流行的聚类方法是K均值聚类,其中“K”表示用户选择创建的簇的数量。(注意,选取K值时有多种技术可供选择,比如肘部法则。)
大体上,K均值聚类法对数据点的处理步骤包括:
1. 随机选择数据中的K个中心。
2. 将每个数据点分配给最接近的随机创建的中心。
3. 重新计算每个簇的中心。
4. 如果中心没有变化(或变化很小),就结束此过程。否则,返回至第2步。(如果中心持续更改,为防止最终形成无限循环,要提前设置最大迭代次数。)
下图将K均值聚类法应用于建筑物的数据集。图中的每一列都表明了每栋建筑的效率。这四项测量的量涉及空调、插入式设备(微波炉,冰箱等)、家用燃气和可燃气体。选择K值为2进行聚类,这样就很容易地将其中一个聚类解释为高效建筑群,另一个则为低效建筑群。左图中可以看到建筑物的位置,右图可以看到两个输入值:插入式设备和可燃气体。
将建筑聚类成高效建筑群(绿色)和低效建筑群(红色)
聚类方法中会涉及到一些非常有用的算法,比如具有噪声的基于密度的聚类方法(DBSCAN)、均值漂移聚类、聚合层次聚类、基于高斯混合模型的期望最大化聚类等。
4. 降维
顾名思义,降维可用来删除数据集中最不重要的数据。实践中常会遇到包含数百甚至数千列(也称为特征)的数据集,因此减少总量至关重要。例如,图像中数千个像素中并不是所有的都要分析;或是在制造过程中要测试微芯片时,如果对每个芯片都进行测试也许需要数千次测试,但其实其中很多芯片提供的信息是多余的。在这些情况下,就需要运用降维算法以便对数据集进行管理。
主成分分析(PCA)是最常用的降维方法,通过找出最大化数据线性变化的新向量来减小特征空间的维数。在数据的线性相关性很强时,主成分分析法可以显著减小数据的维度,且不会丢失太多信息。(其实,还可以衡量信息丢失的实际程度并进行相应调整。)
t-分布邻域嵌入(t-SNE)是另一种常用的方法,可用来减少非线性维数。t-分布邻域嵌入通常用于数据可视化,但也可以用于减少特征空间和聚类等机器学习任务。
下图显示了手写数字的MNIST数据库分析。MNIST包含数千个从0到9的数字图像,研究人员以此来测试聚类和分类算法。数据集的每一行是原始图像的矢量化版本(大小为28×28 = 784)和每个图像的标签(0,1,2,3,......,9)。注意,因此将维度从784(像素)减至2(可视化维度)。投影到二维使得能够对高维原始数据集进行可视化。
手写数字MNIST数据库的t-分布邻域嵌入迭代
5. 集成方法
假设你对市面上的自行车都不满意,打算自己制作一辆,也许会从寻找各个最好的零件开始,然后最终会组装出一辆最好的自行车。
集成方法也是利用这一原理,将几个预测模型(监督式机器学习方法)组合起来从而得到比单个模型能提供的更高质量的预测结果。随机森林算法就是一种集合方法,结合了许多用不同数据集样本训练的决策树。因此,随机森林的预测质量会高于单个决策树的预测质量。
集成方法可理解为一种减小单个机器学习模型的方差和偏差的方法。任何给定的模型在某些条件下可能是准确的,但在其他条件下有可能不准确,因此这种方法十分重要。如果换用另一个模型,相对精度可能会更低。而组合这两个模型,就可以平衡预测的质量。
绝大多数Kaggle竞赛的获胜者都会使用集成方法。最为流行的集成算法有随机森林、XGBoost和LightGBM。
6. 神经网络与深度学习
与线性模型的线性回归和逻辑回归相比,神经网络的目标是通过向模型添加参数层来捕获数据中的非线性模式。下图中,简单神经网络有四个输入,一个带有五个参数的隐藏层和一个输出层。
具有一个隐藏层的神经网络
其实,神经网络的结构十分灵活,可以构建出我们所熟知的的线性回归和逻辑回归。深度学习一词来自具有多个隐藏层的神经网络(见下图),是对各种体系结构的一个概括。
跟上深度学习发展的步伐尤为困难,部分原因在于研究和工业方面投入了大量精力来研究深度学习,使得不断有新方法涌现出来。
深度学习:具有多个隐藏层的神经网络
为达到最佳效果,深度学习技术需要大量的数据,同时也需要强大的计算能力作为支撑,因为该方法是在大型体系架构中对许多参数进行自我调整。鉴于此,就不难理解为什么深度学习从业者要用配备强大图形处理单元(GPU)功能的计算机了。
深度学习技术在视觉(图像分类)、文本、音频和视频领域的应用最为成功。最常见的深度学习软件包有Tensorflow和PyTorch。
7. 迁移学习
假设你是个零售业的数据科学家,已经花了几个月的时间训练高质量模型,用来将图像分为衬衫、T恤和Polo衫这三类。新任务是建一个类似的模型,把服装图像分为牛仔裤、工装裤、休闲裤和正装裤这几类。那么能不能把第一个模型中已建立的知识转移到第二个模型中呢?当然可以,迁移学习可以做到。
迁移学习是指重复使用先前训练的神经网络的一部分,并使其适应类似的新任务。具体来说就是,使用先前任务中训练过的神经网络,可以传输一小部分训练过的图层,并将它们与用于新任务数据训练的几个图层组合在一起。通过添加图层,新的神经网络就能快速学习并适应新的任务。
迁移学习的主要优点是训练神经网络所需的数据较少,这点尤为重要,因为深度学习算法的训练既耗时,(计算资源上)花费又高。而且,通常也很难找到足够的标记数据来供培训使用。
还是回到上文的例子,假设衬衫模型中,你用了一个有20个隐藏层的神经网络,几次尝试后,发现可以迁移其中的18个衬衫模型层,并能把它们与用来训练裤子图像的某个新的参数层相结合。此时,裤子模型将有19个隐藏层。这两个任务的输入和输出不同,但一些概括与两者都有关的信息如布料、衣服上扣件和形状等方面的参数层可重复使用。
迁移学习正变得越来越流行,现在已经有很多固定的预训练的模型,可以用来完成一些常见的像图像和文本分类的深度学习任务。
8. 强化学习
试想,迷宫中有只老鼠,在试图寻找藏在某处的奶酪。老鼠进迷宫的次数越多,它就越有可能找到奶酪。一开始,老鼠可能会随机走动,但一段时间后,它就能意识到怎样走可以找到奶酪。
老鼠找奶酪的过程反映了使用强化学习来训练系统或游戏的方法。一般来说,强化学习是一种帮助代理从经验中学习的机器学习方法。通过在设定环境中记录操作并使用试错法,强化学习可以最大化累积奖励。在上述示例中,代理是老鼠,环境是迷宫。老鼠的可能操作是:前移、后移、左移或右移,奶酪则是奖励。
如果一个问题几乎没有任何历史数据,就可以选择强化学习方法,因为它不需要事先提供信息(这一点不同于传统的机器学习方法)。在强化学习框架中,你可以随时了解数据。因此强化学习的应用在游戏方面的成功也就不足为奇了,特别是在国际象棋和围棋这类“完美信息”型游戏上的应用。在游戏中,可以迅速根据代理和环境的反馈做出调整,从而使模型能够快速学习。强化学习的缺点则是如果问题很复杂,训练时间也许会很长。
IBM的Deep Blue曾在1997年击败了人类最佳国际象棋选手,同样,基于深度学习的算法AlphaGo也于2016年击败了人类最佳围棋选手。目前英国的DeepMind科技公司是深度学习研究的翘楚。
2019年4月,OpenAI Five团队击败了电子竞技Dota 2世界冠军队伍,成为了首个取得此项成就的人工智能团队。Dota 2是一个非常复杂的视频游戏,OpenAI Five团队之所以选择它,是因为当时没有一种强化学习算法能够在游戏中获胜。 这个击败Dota 2人类冠军队伍的AI团队还开发出了一个可重新定位一个块(可以抓东西)的机器手。
强化学习可以说是一非常强大的人工智能,今后一定会取得更多更大的进步,但同时也应记住这些方法也有局限性。
9. 自然语言处理
世界上很大一部分数据和知识都以人类语言的形式存在着。你能想象在几秒内阅读、理解成千上万的书、文章和博客吗?显然,计算机还不能完全理解人类语言,但经训练可以完成某些任务。比如可以训练手机自动回复短信或纠正拼写错的单词,甚至可以教一台机器与人进行简单交谈。
自然语言处理(NLP)本身不是一种机器学习方法,而是一种用于为机器学习准备文本的技术,其应用十分广泛。想像一下:有大量各种格式的文本文档(词语、在线博客…等),充满了拼写错误、缺少字符和字词多余的问题。目前,由斯坦福大学的研究人员创建的NLTK(自然语言工具包)是使用最为广泛的一种文本处理包。
将文本映射到数字表示,最简单的方法是计算每个文本文档中各个单词的频率。在一个整数矩阵中,每行代表一个文本文档,每列代表一个单词。这种单词频率矩阵通常称为术语频率矩阵(TFM)。在这个基础上,可以用矩阵上的每个条目除以每个词在整个文档集中重要程度的权重,从而得到文本文档的另一种流行矩阵表示。这种方法称为术语频率反向文档频率(TFIDF),通常更适用于机器学习任务。
10. 词嵌入
TFM和TFIDF是文本文档的数字表示,只根据频率和加权频率来表示文本文档。相比之下,词嵌入可以捕获文档中某个词的上下文。根据语境,嵌入可以量化单词之间的相似性,反过来这又方便了对词的算术运算。
Word2Vec是一种基于神经网络的方法,将语料库中的单词映射到了数字向量。然后,这些向量可用来查找同义词、使用单词执行算术运算,或用来表示文本文档(通过获取文档中所有词向量的均值)。比如,假设用一个很大的文本文档来估计单词嵌入,并且“king”、“queen”、“man”和“woman”这四个词也是语料库的一部分,向量(‘word’)是表示单词“word”的数字向量。为了估计向量(‘woman’),可以用向量执行算术运算:
向量(‘king’) 向量(‘woman’)-向量(‘man’)~向量(‘queen’)
词(向量)嵌入的数字运算
有了单词表示,可以计算两个单词的向量表示之间的余弦相似性,以此发现单词之间的相似性。余弦相似性测量的是两个矢量的夹角。
机器学习方法可用来计算单词嵌入,但这往往是在顶部应用机器学习算法的前提步骤。例如,假设我们能访问数千名推特用户的推文,并知道这些用户中哪些人买了房子。为预测新用户买房的概率,可以将Word2Vec与逻辑回归结合起来。
你可以训练单词嵌入或使用预训练(迁移学习)单词向量集。若需下载157种不同语言的预训练单词向量,可查看FastText。