第一部分 第1章 机器学习

1.1  机器学习定义

与人们普遍认为的不同,机器学习技术其实存在已久,并直接或间接地广泛运用于我们使用的多种服务和商品。比如,保护我们不受垃圾邮件侵扰的垃圾邮件过滤技术、电商网站上推荐合适商品的服务、苹果的 Siri 等识别人声的服务等,许多应用正在融入我们的生活。

维基百科将机器学习定义如下:

“机器学习是从人工智能的范式识别和计算学习理论中发展而成的计算机科学领域之一。机器学习先训练数据,然后研究可预测的算法。这些算法并不使用静态编程,而是通过输入的数据创建模型,从而进行预测或给出决策。”

由此可知,机器学习定义中最重要的部分是,使用给定数据独立训练并创建合适的模型。一般来说,想要使用计算机做某件事情,需要在计算机上详细定义什么是数据(输入)、这些数据进入之后应该怎样处理(程序)、应该怎样表示结果(输出)等。

程序员开发程序的过程是使计算机理解定义,通过指令编码,指示应当如何处理输入、程序、输出。计算机没有智能,只有将输入、程序、输出相关的详细内容编写为没有逻辑矛盾的程序,才能获得想要的结果。

但是机器学习使用的处理方法完全不同。人们只进行输入和输出,机器学习会自行创建程序。准备好合适的数据后,用现有的处理方法编写程序则需要投入很多的时间和精力,但是机器学习的处理方法却不用这么麻烦。在机器学习中,将想要的结果指定为输出,余下的工作则依靠机器学习独立编写程序。 因此,我们只需要提供足量的、已经整理好的数据,以及使用机器学习时所需的计算能力即可。

图 1-1 明确展示了机器学习处理方法和现有处理方法的不同。

图像说明文字

机器学习以数据为基础,所以与计算统计有诸多关联。从机器学习的观点看,“从数据中学习”是指,使用既有数据算出概率并给出特定数据时,借助过去的数据计算得出结果值的概率。

这种特征充分体现了数据在机器学习中的重要性。如果提供的数据量不合适或质量低下,那么即使使用优质的机器算法,也不可能得出好的结果。著名的“无用输入,无用输出”(GIGO,garbage in,garbage out)原则自然也适用于机器学习。

① 此处“编写程序”是指独自创建模型并设定合适的参数。

数据对机器学习的结果影响巨大,因此在机器学习中,挖掘并整理数据的数据挖掘十分重要。 通过数据挖掘选择将要用作输入数据的合适的输入变量,补充该输入变量缺失的数据或清除离群值,然后选择适量数据,这其实是机器学习中最重要的过程,而且是重中之重。

1.2  机器学习的优缺点

如果你第一次接触机器学习相关的概念或各种成功案例,可能会觉得它像尚方宝剑,能够解决任何问题。再试着运行示例代码,会更吃惊地发现,几行简短的代码竟然可以轻松地从图像中识别文字、分辨 Iris 花的种类等,这些都是用现有编程方法很难做到的事情。

但是,你不久之后就会意识到,机器学习并非挥舞一次便能压制所有敌人,也会明白示例只是示例。那些所谓的“成功案例”可能是使用的数据有误、算法不相符,或问题与机器学习不适合才“意外实现”的。

想要正确使用机器学习,需要把握机器学习的优缺点,要考虑待解决的问题是否适合机器学习,如果不适合应该怎样重新定义问题,应该使用哪些数据等。换言之,只有理解机器学习的优缺点,才能用它取得好的结果。

① 机器学习和数据挖掘有很多相似之处,经常混用,本书将数据挖掘的重点放在探索性数据分

析上。

1.2.1 机器学习的优点

● 不需要训练所需的知识表达。计算机理解知识时,所需的表达是很难的。

● 如果数据充分,算法合适,呈现的结果将优于人工构建的模型。

● 不要求专业的数学知识或编程能力。仅靠基本概念即可充分使用机器学习。

● 支持自动化。可以用程序自动进行机器学习、寻找最优参数、对结果进行评估。

● 成本低廉且灵活。除数据之外的其他过程均可自动化。

● 可以通过程序随心使用。

1.2.2 机器学习的缺点

● 准备数据时需要付出大量努力。如果是监督学习,需要给出所有单一数据的结果值。

● 容易报错。通常很难创建准确度高的模型。

● 生成的模型是黑箱,所以很难对其进行解释。想要提高准确度,应当修改或者改善模型,但是大部分机器学习算法很难用训练结果理解生成的模型,而且不能对模型本身进行改善。

● 经常发生过拟合问题。虽然优化了既有数据,使得训练中使用的数据拥有较高的预测能力,但是其他数据的预测能力并不突出。

1.3 机器学习的种类

如图 1-2 所示,根据学习方法的不同,机器学习可以分为三大类:人工提供输入和输出的监督学习、只提供输入的无监督学习、在某个环境内为了达成特定目标而进行独立学习的强化学习。从当前的使用频率看,监督学习最多,其次是无监督学习,最后是强化学习。

图像说明文字

1.3.1 监督学习

监督学习是最常用的机器学习类型,包括垃圾邮件过滤、OCR 字符识别等。监督学习通过提供输入和输出进行学习,可以视为一种优化问题,因为它会对监督学习算法现有的输入值进行分析,然后创建得出输出值时所需的最优模型。以开发能够区分小猫图像的机器学习程序为例。因为监督学习需要提供输入和输出,所以要提供小猫的图片和“小猫”这个词。也就是说,提供小猫照片的同时,也要提供“小猫”这一输出,如图1-3 所示。

图像说明文字

因此,在监督学习中,数据以输入和输出捆绑在一起的“元组”形态构成。

1.3.2 无监督学习

监督学习是分析输入以得出输出的优化问题,无监督学习则是把握输入数据的结构或者分析关系的方法。无监督学习也称“知识发现”(knowledge discovery),因为它能够用训练结果发现意想不到的知识,或者发现输入数据之间的组合和特征等。

无监督学习的另一个特征是,它很难对训练结果进行评价。因为训练结果没有明确的目的,即没有输出,所以无法制定评价标准。监督学习提供数据的时候,每个数据的输入和输出都是元组形式;但是无监督学习中没有输出,只提供输入。

前文监督学习示例提供了小猫的照片和名字,但无监督学习中没有名字,只用小猫的照片完成学习,如图 1-4 所示。

图像说明文字

1.4  机器学习能做的事情

最近,机器学习通过无人汽车、小猫照片识别、图像描述(image captioning)等呈现出优越的成果,我们有理由相信,用专业的数学背景和精巧的算法武装机器学习后,能够解决很多问题。但是目前,使用机器学习这一“魔法”解决的问题并不多,甚至连这一点点成就都耗费了诸多辛劳和奉献。

通过机器学习达成某件事情耗费的时间比想象中要长。想要获得一个完整的结果,需要经过数十次、数百次的重复,逐步改善,还要根据情况重新构建模型,或者从完全不同的角度推进。尤其是想要使用机器学习解决特定问题时,只有将这个特定问题转化为适合机器学习的形态,才能获得想要的结果。因此,正确使用机器学习前,必须知道机器学习能做什么、不能做什么。

看到机器学习能够过滤垃圾邮件、识别文字和语音,你可能会觉得它可以处理各种事务,但其实它只能处理三类事情:回归(把握变量间关系)、分类(分类数据)、聚类(将有关的数据联结在一起)。

机器学习通过这三种方式解决各类问题。回归和分类是所有机器学习算法的根本,是非常重要的概念,大家必须理解。

1.4.1 回归

回归的主要目的在于把握连续数字变量间的相互关系,特别是分析因变量和自变量之间的联系。为了帮助大家理解回归,下面以房价为例进行说明。假设我们打算卖掉正在居住的房子,想知道到底能够得到多少钱。但是因为没有和这所房子大小相同的房屋作为参考,所以很难决定房价。此时可以通过其他房屋面积的房价数据和回归分析,计算合理的房价。

开始回归分析时,首先要画出因变量和自变量的散点图,这样能够直观把握数据的关联程度,如图 1-5 所示。

由图 1-5 可知,房价和面积之间存在线性关系。想要解决的问题是根据面积计算房价,那么从散点图中可看出,房屋面积越大,价格越高。因此,可以想到如下模型(公式)成立:

Y = aX + b

图像说明文字

Y 是房价,为“因变量”;X 是面积,为“自变量”。假设的模型是一次函数,所以a 指斜率,b 指截距。如果利用既有数据得出 a 和 b 的值,那么就能完成决定房价时所需的模型。在该模型中,X 处输入要卖的房子面积,就能算出房价。利用程序,a 值为0.65、b 值为 0.89 时,最能够表现图 1-5,这就可以说“房价 = 0.65×面积 + 0.89”的关系成立,如图 1-6 所示。

我们现在已经知道了房价和面积之间的关系,那么只要得知面积,将其代入前面的公式,就能计算出正确的房价。

像这样,把握既有变量之间的关系就是回归。回归问题的应用如下所示:

● 用过去的温度数据预测明天的温度

● 用股票行情信息预测未来的股票价格

● 用流动人口、天气、价格信息等预测饭店的生意

● 用买家的年纪和年收入预测特定商品的销量

图像说明文字

1.4.2 分类

顾名思义,分类就是对数据进行分别归类。为了帮助大家理解分类,下面以Iris数据为例。

假设要利用花瓣的宽和高数据, 判断给定的Iris 花属于Setosa、Virginica 和Versicolor 中的哪个品种。这个问题与前面的回归问题不同,并不是要预测某个值,而是判断其属于哪个种类。但是与回归问题一样,分类也需要用散点图判断不同种类的花瓣的宽和高之间存在什么关系。

由图1-7 可知,Setosa 品种在图中为正方形,位于左下角;Virginica 是圆形,位于右上角;中间的三角形则是Versicolor。想要解决的问题是利用给定花瓣的宽和高来判断花的品种,因此需要区分这三个品种的方法。如果存在某个模型,该模型可以根据花瓣的宽和高区分品种,那么只需将新的宽和高作为数据输入,就能得到想要的结果。

图像说明文字

如图1-8 所示,利用两条线分出Setosa、Virginica 和Versicolor 区域之后,只要知道新给的数据在三个领域中的位置,就能顺利分类品种。因此,这里的“分类”就是利用给定数据,求出能够区分Iris 花的两个Y=aX+b。

图像说明文字

① 出处:http://blog.datacamp.com/machine-learning-in-r/

分类通过以上过程区分数据,广泛应用于机器学习。回归能够用于连续数据(continuous data),而分类则能用于分类数据(categorical data)。

分类问题的应用如下所示:

● 垃圾邮件分类

● 图像识别

● 语音识别

● 判断是否罹患疾病

1.4.3 聚类

聚类将数据集合成拥有相似特征的簇。聚类用于无监督学习,不需要输出数据,仅靠输入数据完成,主要用于把握或理解数据的特征。

例如,假设我们要展开营销活动,现在想知道会响应营销活动的人群拥有什么特征。如果是第一次进行营销活动,拥有相关的数据,但不知道应以什么样的标准选定对象,那么聚类可以有效解决这类问题。

聚类通过计算给定数据之间的相似程度,将拥有相似特征的数据分为一类,能够有效完成操作。收集响应营销活动的人群数据后进行聚类,就能知道拥有相似特征的人可以分为几类。如果掌握了每类人群的共同点,就能发现问题中响应营销活动的人群类型及其特征。进行聚类之后,如果得到图1-9 所示结果,就可以将响应营销活动的人群定为两类,然后对这两类人群拥有的特征进行分析即可。

聚类问题的应用如下所示:

● 聚集音乐喜好相似的用户

● 使用天文学数据寻找拥有相似特征的星体

● 推荐电商用户可能喜欢的商品

图像说明文字

1.5  机器学习算法

要想实际使用机器学习,需要选择机器学习算法。如前所述,机器学习能够解决回归、分类、聚类问题,它们各自拥有相应的算法。一种算法并不能解决所有类型的问题,每个算法的特征都不同,所以要明确了解自己需要的是什么。为了获得结果,需要判断问题类型,继而选择要应用于机器学习的算法。

选择合适的算法前,需要考虑数据大小、数据类型(字符、数字、图片等)、是否是线性数据等因素。如果没有数据的专业知识,那么选择能够呈现最优结果的算法需要投入很多时间和精力。

图 1-10 是 Python 有名的机器学习库 scikit-learn 中提供的算法 Cheat-sheet,包含了通过机器学习获得预想结果的常规程序。START 是起点,之后的过程依次呈现了每个问题的答案。从图中能够清楚地知道,初学者最初应该使用哪种机器学习算法,结果不好时下一步应该使用哪种算法。

图像说明文字

1.5.1 回归

● 线性回归

● SGD回归

● 支持向量回归

● 随机森林回归

● 贝叶斯回归

● 保序回归

① 出处:http://scikit-learn.org/stable/tutorial/machine_learning_map/

1.5.2 分类

● 逻辑斯蒂回归

● 支持向量机

● 随机森林

● 决策树

● 梯度提升树

● SGD分类器

● AdaBoost

1.5.3 聚类

● K均值(最优分配)

● 谱聚类

● 高斯混合

● 凝聚聚类

● 近邻传播

● 均值漂移

此外还有多种算法,只有选择的算法与自己处理的数据特征相符,才能尽快获得好的结果。

一般情况下,了解机器学习算法的数学理论及内容是充分条件,而非必要条件。因为预测所需的建模并非人工进行的,而是被设计为由机器学习算法独立进行。因此,使用机器学习算法的开发人员应该知道机器学习算法的概念、使用方法和特征。

如果没有算法能够利用机器学习有效解决问题,可以将能够适用的所有机器学习算法都尝试一遍。通过反复试错,选择性能最好的那一个。

1.6  机器学习的过程

使用机器学习的“过程”在机器学习中的重要性仅亚于数据。一般来说,使用机器学习获得想要的结果需要付出很多时间和精力,必须经过数十次甚至数百次的反复试错才能完成模型,所以进行机器学习的过程对结果的质量具有绝对影响。错误的机器学习过程会严重降低工作效率,甚至会向着错误的方向展开。实际开始使用机器学习并慢慢积累经验的话,就会发现算法和训练在整个过程中占据的比例并不大,真正重要的部分在它们之外。

图 1-11 为机器学习的过程。

图像说明文字

各过程归纳如下。

1.6.1 第一次预处理

● 准备机器学习过程中使用的数据——训练数据集。

● 选择训练中将要使用的数据,查看是否有遗漏数据,处理会给数据带来偏差的离群值数据。根据需要进行标准化等工作。

1.6.2 训练数据集

● 创建训练中要使用的数据,按照固定形态在监督学习中生成输入和输出数据,在无监督学习中生成输入数据。

1.6.3 第二次预处理

● 从训练数据集中选择用于训练的变量,这一过程称为特征选择,它对训练影响巨大。

● 根据数据特性或想要使用的算法,可在一定范围内对数据进行特征缩放等转换。

● 该过程的目的是通过创建数据,在想要使用的算法中进行简单优质的训练。

1.6.4 机器学习算法学习

● 使用已选择的机器学习算法和已经准备好的训练数据集进行学习,这一过程通过程序进行,基本不需要人工介入。

1.6.5 参数优化

● 在已选择的机器学习算法中,调整可以代入的参数值,提高结果质量。

● 根据人工调整的参数值,把握训练结果的质量,寻找最优参数或者使用网格搜索,在机器学习程序中独立寻找最优值。

1.6.6 后期处理

● 这一过程的主要目的是对训练结果进行质量评价。

● 大部分机器学习不会只适用一种算法或一种模型,所以该过程评价诸多模型和算法中哪一个能够带来最优的结果、各算法对给定问题会如何反应。

1.6.7 最终模型

● 将最后完成的模型应用于实际数据,而非用于训练数据集。

如图1-11 所示,得到想要的结果之前,参数优化和后期处理过程会不停地返回到第一次预处理或第二次预处理过程。

利用机器学习解决问题基本上与利用“黑箱”类似。在所有状态中,给定数据的因变量和自变量之间的关系都会交给机器学习算法,由它确定相互关系,所以开发者仅能知道结果,很难了解其中的过程。因此,开发者必须通过加工数据、调整参数或特征选择,查看训练结果的质量是否达到想要的标准。模型完成的过程是未知且无法干涉的,所以需要持续运行机器学习的过程,通过反复试错不断重复和改善。

1.7 “没有免费的午餐”定理

“没有免费的午餐”定理是David Wolpert 和William Macready 在1997 年发表的论文中提出的理论,为机器学习的使用带来了重要启示。

论文中写有如下内容:

“We have dubbed the associated results ‘No Free Lunch’ theorems because they demonstrate that if an algorithm performs well on a certain class of problems then it necessarily

pays for that with degraded performance on the set of all remaining problems.(简单来说,‘没有免费的午餐’定理从数学上证明了,一种算法只是针对某一问题来说是最好的,无法适用于其他问题。)”

① 出处:Wolpert, D.H., Macready, W.G (1997), No Free Lunch Theorems for Optimization, IEEE Transactions on Evolutionary Computation 1,67. http:// ti.arc.nasa.gov/m/profile/dhw/papers/78.pdf

图 1-12 直观展现了“没有免费的午餐”定理。

图像说明文字

就像“优化”本身的含义一样,如果它对特定问题来说是最优的,那么当然不能在其他问题中也呈现好的结果。但是使用机器学习时,我们希望经常发生的失误只集中于一个机器学习程序。

例如,为了对 Iris 花品种数据进行分类,而在优化的机器学习模型中放入 5 个品种的数据,就像“没有免费的午餐”定理中强调的一样,这只是做无用功。因为它是 3 个品种的优化模型,而非 5 个品种的优化模型。在这种情况下,重新定义问题,并将模型优化以分类 5 种 Iris 花数据,才是正确的选择。

机器学习在训练数据集中分析因变量和自变量的关系,并以此为基础构建模型,所以模型完全隶属于训练数据集。因此,不论何时都要好好定义想要解决的问题,仔细选择相关数据,利用机器学习实现优化。

① 出处:http://ecmedenhall.blogspot.kr/2006_02_01_archive.html

目录

  • 前言
  • 第一部分 第1章 机器学习
  • 第二部分 第2章 统计
  • 第3章 时间序列数据
  • 第三部分 第4章 算法交易
  • 第5章 实现算法交易系统
  • 第6章 性能评价与优化
  • 后记