文章发布于公号【数智物语】 (ID:decision_engine),关注公号不错过每一篇干货。
作者 | 塞巴斯蒂安·拉施卡、瓦希德·米尔贾利利
来源 | 出自《Python机器学习(原书第2版)》
转自 | 大数据(ID:hzdashuju)
导读:机器学习是使数据具有意义的算法的应用和科学,也是计算机科学中最令人兴奋的领域!在数据丰沛的时代,计算机可以通过自我学习获得算法把数据转化为知识。近年来涌现出了许多强大的机器学习开源软件库,现在是进入该领域的最佳时机,掌握强大的算法可以从数据中发现模式并预测未来。
本文将讨论机器学习的主要概念、不同类型及相关术语,为利用机器学习技术成功地解决实际问题奠定基础。
本文将主要涵盖下述几个方面:
1. 机器学习的基本概念
2. 三种类型的机器学习及基本术语
3. 成功设计机器学习系统的基石
4. 为数据分析和机器学习安装和配置Python
01
构建把数据转换为知识的智能机器
在当今的科技时代,大量结构化和非结构化数据是我们的丰富资源。机器学习在二十世纪下半叶演变为人工智能(AI)的一个分支,它涉及从数据中通过自我学习获得算法以进行预测。
机器学习并不需要先在大量的数据中进行人工分析,然后提取规则并建立模型,而是提供了一种更有效的方法来捕获数据中的知识,逐步提高预测模型的性能,以完成数据驱动的决策。
机器学习不仅在计算机科学研究中越来越重要,在日常生活中也发挥出越来越大的作用。归功于机器学习,今天才会有强大的垃圾邮件过滤、方便的文本和语音识别、可靠的网络搜索引擎、具有挑战性的下棋程序,并有希望在不久的将来可以享受安全和高效的自动驾驶。
02
三种不同类型的机器学习
本文将讨论有监督、无监督和强化三种不同类型的机器学习,分析它们之间的根本差别,并用概念性的例子开发一个可以解决实际问题的应用:
01
用有监督学习预测未来
有监督学习的主要目标是从有标签的训练数据中学习模型,以便对未知或未来的数据做出预测。“监督”一词指的是已经知道样本所需要的输出信号或标签。
以垃圾邮件过滤为例,可以采用有监督的机器学习算法,基于打过标签的电子邮件语料库来训练模型,然后用模型来预测新邮件是否属于垃圾邮件。带有离散分类标签的有监督学习也被称为分类任务,例如上述的垃圾邮件过滤。有监督学习的另一个子类被称为回归,其结果信号是连续的数值。
预测标签的分类
分类是有监督学习的一个分支,其目的是根据过去的观测结果来预测新样本的分类标签。这些分类标签是离散的无序值,可以理解为样本组成员的关系。前面提到的邮件垃圾检测就是典型的二元分类任务,机器学习算法学习规则以区分垃圾和非垃圾邮件。
但是,数据集的分类并非都是二元的。有监督学习算法经过学习得到的预测模型可以将训练集中出现过的标签分配给尚未标记的新样本。
多元分类任务的典型例子是识别手写字符。首先,收集包含字母表中所有字母的多个手写示例形成训练集。然后,当用户通过输入设备提供一个新的手写字符时,预测模型能够准确地将其识别为字母表中的正确字母。
然而,如果0~9之间的数字不是训练集的一部分,那么机器学习系统将无法正确地识别。
下图将通过30个训练样本阐述二元分类任务的概念,其中15个标签为阴性(-),另外15个标签为阳性(+)。该数据集为二元,意味着每个样本都与x1或x2的值相关。现在,可以通过机器学习算法来形成一组规则,用一条断线来代表决策边界以区分两类数据,并根据x1和x2的值为新数据分类。
预测连续结果的回归
上一节学习到分类任务是为样本分配无序的分类标签。第二类有监督学习是对连续结果的预测,也称为回归分析。回归分析包括一些预测(解释)变量和一个连续的响应变量(结果或目标),试图寻找那些能够预测结果的变量之间的关系。
以预测学生SAT数学成绩为例。假设学习时间与考试成绩相关,可以用该关系训练数据学习建模,用将来打算参加该项考试学生的学习时间来预测其考试成绩。
1886年,弗朗西斯·高尔顿在其论文《回归平均的遗传身高》中首次提到回归一词。高尔顿描述了一种生物学现象,即种群身高的变化不会随时间的推移而增加。他观察到父母的身高不会遗传给自己的孩子,相反,孩子的身高会回归种群的均值。
下图说明了线性回归的概念。给定预测变量x和响应变量y,对数据进行线性拟合,谋求样本点和拟合线之间的平均距离最小(距离方差)。现在可以用从该数据中学习到的截距和斜率来预测新数据的结果变量:
02
用强化学习解决交互问题
另一种机器学习是强化学习。强化学习的目标是开发系统或代理,通过它们与环境的交互来提高其预测性能。当前环境状态的信息通常包含所谓的奖励信号,可以把强化学习看作是与有监督学习相关的领域。
然而强化学习的反馈并非标定过的正确标签或数值,而是奖励函数对行动的度量。代理可以与环境交互完成强化学习,通过探索性的试错或深思熟虑的规划来最大化这种奖励。
强化学习的常见例子是国际象棋。代理根据棋盘的状态或环境来决定一系列的行动,奖励为比赛结果的输赢:
强化学习有许多不同的子类。然而,大逻辑是强化学习代理试图通过一系列与环境的交互来最大化奖励。每种状态都可以与正面或负面的奖励相关联,奖励可以定义为完成一个总目标,如赢棋或输棋。例如,国际象棋每步的结果都可以认为是一种不同的环境状态。
为进一步探索国际象棋的案例,观察一下棋盘上与正面事件相关联的某些位置,比如吃掉对手或威胁皇后的棋子。棋盘上的其他位置与负面事件相关联,例如在接下来的回合中输给对手一个棋子。
实际上并不是每个回合都会有棋子被吃掉,强化学习涉及根据即时或延迟反馈来最大化奖励,从而学习一系列的走法。
本文对强化学习做了基本概述,请注意强化学习应用已超出了本文的范围,我们主要关注分类、回归分析和聚类。
03
用无监督学习发现隐藏结构
在有监督学习中训练模型时,事先知道正确的答案;在强化学习过程中,定义了代理对特定动作的奖励。然而,无监督学习处理的是无标签或结构未知的数据。使用无监督学习技术,可以在没有已知结果变量或奖励函数的指导下,探索数据结构以提取有意义的信息。
3.1 寻找聚类的子集
聚类是探索性的数据分析技术,可以在事先不了解组员的情况下,将信息分成有意义的组群。为在分析过程中出现的每个群定义一组对象,它们之间都具有一定程度的相似性,但与其他群中对象的差异性更大,这就是为什么聚类有时也被称为无监督分类。
聚类是构造信息和从数据中导出有意义关系的一种有用的技术。例如,它允许营销人员根据自己的兴趣发现客户群,以便制订不同的市场营销计划。
下图解释了如何应用聚类把无标签数据根据x1和x2的相似性分成三组:
3.2 通过降维压缩数据
无监督学习的另一个子类是降维。高维数据的每个观察通常都伴随着大量测量数据,这对有限的存储空间和机器学习算法的计算性能提出了挑战。无监督降维是特征预处理中数据去噪的一种常用方法,它也降低了某些算法对预测性能的要求,并在保留大部分相关信息的同时将数据压缩到较小维数的子空间上。
降维有时有利于数据的可视化。例如,为了通过二维或三维散点图或直方图实现数据的可视化,可以把高维特征数据集投影到一、二或三维特征空间。下图展示了一个采用非线性降维将三维瑞士卷压缩成新的二维特征子空间的实例:
03
构建机器学习系统的路线图
前文讨论了机器学习的基本概念及其三种不同类型。本文将讨论伴随算法的机器学习系统的其他重要部分。下图展示了在预测建模中使用机器学习的典型工作流程,将在以下的几个小节中详细讨论:
01
预处理——整理数据
让我们从讨论构建机器学习系统的路线图开始。原始数据很少以能满足学习算法最佳性能所需要的理想形式出现。因此,数据的预处理是任何机器学习应用中最关键的步骤之一。
以鸢尾花数据集为例,可以把原始数据看成是一系列的花朵图像,要从中提取有意义的特征。有意义的特征可能是颜色、色调、强度、高度、长度和宽度。
▲描述鸢尾属植物数据集的摘要,这是机器学习领域的典型案例,该数据集包含了对Setosa, Versicolor and Virginica三种不同鸢尾属植物 150多朵鸢尾花的测量结果,数据集中每行代表一朵花的样本数据,每种花的数据以厘米为单位按列存储,被称之为特征数据集
许多机器学习算法也要求所选择特征的测量结果具有相同的单位,以获得最佳性能,通常通过把特征数据变换为[0, 1]的取值范围或者均值和单位方差为0的标准正态分布来实现。
某些选定的特征可能是高度相关的,因此在某种程度上是多余的。在这种情况下,降维技术对于将特征压缩到低维子空间非常有价值。降低特征空间维数的优点是减少存储空间,提高算法运行的速度。在某些情况下,如果数据集包含大量不相关的特征或噪声,即数据集具有较低的信噪比,那么降维也可以提高模型预测的性能。
为了确定机器学习算法不仅能在训练集上表现良好,对新数据也有很好的适应性,我们希望将数据集随机分成单独的训练集和测试集。用训练集来训练和优化机器学习模型,同时把测试集保留到最后用以评估最终的模型。
02
训练和选择预测模型
从戴维·沃尔珀特著名的“天下没有免费的午餐定理”,可以得出的重要结论是学习不是“免费”的(戴维·沃尔珀特1996年的论文《在学习算法之间没有先验差别》以及戴维·沃尔珀特和W. G.麦克里迪1997年的论文《算法优化没有免费的午餐定理》)。
直观地说,可以把这个概念与亚伯拉罕·马斯洛的说法联系起来:“我想这是一种诱惑,如果你拥有的唯一工具就是一把锤子,那会把所有的东西都当作钉子来对待。”
例如,每个分类算法都有其固有的偏差,如果不对任务做任何假设,没有哪个分类模型更优越。在实践中,至少要比较几种不同的算法,以便训练和选择性能最好的模型。
但在比较不同模型之前,首先必须确定性能度量的指标。一个常用的度量标准是分类准确度,其定义为正确分类样本占所有分类样本的百分比。
有人可能会问:如果不用测试集进行模型选择,而将其留做最终的模型评估,那么如何知道哪个模型在最终测试集和真实数据上表现良好?
为了解决嵌套在这个问题中的问题,可以采用不同的交叉检验技术,将训练集进一步分裂为训练集和验证集,以评估模型的泛化性能。最后,也不能期望软件库所提供的不同学习算法的参数默认值对特定问题是最优的。
直观地说,可以把那些超参数看作是从数据中学习不到的,更像模型的旋钮那样,可以来回旋转以改善模型的性能。
03
评估模型和预测新样本数据
在选择了适合训练集的模型之后,可以用测试集来评估它在新数据上的性能,以评估泛化误差。如果对模型的性能感到满意,那么就可以用它来预测未来的新数据。
需要注意的是前面提到的诸如特征尺度和降维这样的性能测量参数,仅是从训练集获得的,而相同的参数会被进一步转换成测试集,以及任何新的数据样本。否则,对测试数据的性能评估可能会过于乐观。
04
用Python进行机器学习
Python是数据科学中最常用的编程语言,其优秀的开发人员和开源社区为其提供了大量有价值的附加软件。
像Python这样的解释型语言,尽管对计算密集型任务而言,其性能不如低级的编程语言,但是已经在Fortran和C基础上研发出像NumPy和SciPy这样的扩展软件库,可以实现快速矢量化的多维阵列操作。
机器学习编程主要用scikit-learn,这是目前最为常用和可访问的开源机器学习库。
01
从Python包索引安装Python和其他包
Python可用于微软Windows、苹果MacOS和开源Linux所有三大操作系统,可以从Python官网下载安装程序及文档:
https://www.python.org
建议使用最新的Python 3,尽管大部分的代码示例也可以与Python 2.7.13或更新版兼容。如果决定使用Python 2.7来执行这些代码示例,那么请确保了解这两个版本之间的主要差异。从下述网站可以找到专门比较Python 3.5和Python 2.7之间差异的优秀总结文章。
https://wiki.python.org/moin/python2orpython3
附加软件包可以通过pip程序安装,该程序从Python 3.3起就一直是标准库的一部分。可以在这里发现更多关于pip的信息。
https://docs.python.org/3/installing/index.html
在成功地安装Python后,可以在终端上执行pip命令来安装Python的附加包:
pip install SomePackage
对已经安装的包可以通过- - upgrade选项完成升级:
pip install SomePackage --upgrade
02
采用Anaconda Python和软件包管理器
高度推荐由Continuum Analytics发行的Anaconda作为Python的科学计算软件包。免费的Anaconda既可用于商业,也可供企业使用。该软件包括数据科学、数学、工程在内的所有基本包,并把它们捆绑在用户友好的跨平台版本中。
下载Anaconda的安装程序:
http://continuum.io/downloads
下载Anaconda的快速启动指南:
https://conda.io/docs/test-drive.html
在成功地安装了Anaconda之后,可以执行下述命令安装Python包:
conda install SomePackage
已经安装过的包可以通过执行下述命令升级:
conda update SomePackage
关于作者:塞巴斯蒂安·拉施卡(Sebastian Raschka),密歇根州立大学博士,他在计算生物学领域提出了几种新的计算方法,还被科技博客Analytics Vidhya评为GitHub上最具影响力的数据科学家。
瓦希德·米尔贾利利(Vahid Mirjalili),密歇根州立大学计算机视觉与机器学习研究员,致力于把机器学习应用到各种计算机视觉研究项目。他在学术和研究生涯中积累了丰富的Python编程经验,其主要研究兴趣为深度学习和计算机视觉应用。
推荐阅读: