机器学习——Python实践(txt+pdf+epub+mobi电子书下载)


发布时间:2020-08-07 01:01:57

点击下载

作者:魏贞原

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

机器学习——Python实践

机器学习——Python实践试读:

前言

“这是最好的时代,也是最坏的时代”,这是英国文豪狄更斯的名著《双城记》开篇的第一句话,一百多年来不断被人引用。这里再次引用它来形容智能革命给我们带来的未来社会。从2016年AlphaGo在围棋比赛中战胜韩国选手李世石,到2017年Master战胜世界排名第一的围棋选手柯洁,人工智能再一次引起了世人的注意。在大数据出现之前,人工智能的概念虽然一直存在,但是计算机一直不擅长处理需要依赖人类的智慧解决的问题,现在换个思路就可以解决这些问题,其核心就是变智能问题为数据问题。由此,全世界开始了新一轮的技术革命——智能革命。

自从 1687 年艾萨克·牛顿发表了论文《自然定律》,对万有引力和三大运动定律进行了描述,人类社会进入了科学时代。在此之后,瓦特通过科学原理直接改进蒸汽机,开启了工业革命的篇章,由于机器的发明及运用成为这个时代的标志,因此历史学家称这个时代为“机器时代”。机器时代是利用机器代替人力,在原有的产业基础上加上蒸汽机形成新的产业,例如马车加上蒸汽机成为火车,改变了人的出行方式;帆船加上蒸汽机成为轮船,让货物的运输变得更加便捷。同时,原有的工匠被更加便宜的工人替代,社会的财富分配不均,社会进入动荡期,如英国大约花费了半个世纪的时间才完成了工业革命的变革。同样,第二次工业革命和信息革命,每一次变革都让财富更加集中,给社会带来动荡。第二次工业革命同样花费了半个世纪的时间,一代人才消除工业革命带来的影响,让大部分人受益。当前的智能革命也会带来财富的重新分配和社会的动荡,当然目前的政府对这次革命的过程都有了足够的了解,能够把社会的动荡控制在最小范围,但是在变革中的人依然需要经受这次变革带来的动荡。

每一次变革都是一次思维方式的改进,工业革命是机器思维替代了农耕时代的思想;信息革命是香农博士(1916—2001年)的信息论带来的思想方法替代机器思维,并成为社会主导思想;在这次智能革命中,以大数据为核心的思维方式将会主导这次变革。在历次的技术革命中,一个人、一家企业,甚至一个国家,可以选择的道路只有两条:要么加入变革的浪潮,成为前2%的弄潮儿;要么观望徘徊,被淘汰。

要成为2%的弄潮儿,需要积极拥抱这次智能变革,掌握在未来社会不会被淘汰的技能。在以大数据为基石的智能社会,利用机器学习算法对数据进行挖掘,是使机器更智能的关键,掌握数据挖掘是拥抱智能社会的举措之一。本书就将介绍如何利用机器学习算法来解决问题,对数据进行挖掘。作者第一部分初始

像一个优秀的工程师一样使用机器学习,而不要像一个机器学习专家一样使用机器学习方法。——Google1 初识机器学习

本书主要介绍机器学习在实践中的应用,介绍利用Python的生态环境,使用机器学习的算法来解决工程实践中的问题,而不是介绍算法本身。本书会通过例子一步一步地引导大家使用机器学习来处理和分类与回归模型相关的问题。1.1 学习机器学习的误区

下面三点是利用Python进行机器学习的误区,应该尽量避免:

· 必须非常熟悉Python的语法和擅长Python的编程。

· 非常深入地学习和理解在scikit-learn中使用的机器学习的理论和算法。

· 避免或者很少参与完成项目,除机器学习之外的部分。

我相信这些方式对一部分人可能会非常有效,但是这会降低掌握机器学习技能的速度和要达到通过机器学习来解决问题的目标。这也会浪费大量时间单独学习机器学习算法,但却不知如何利用机器学习来解决现实中遇到的问题。1.2 什么是机器学习

机器学习(Machine Learning,ML)是一门多领域的交叉学科,涉及概率论、统计学、线性代数、算法等多门学科。它专门研究计算机如何模拟和学习人的行为,以获取新的知识或技能,重新组织已有的知识结构使之不断完善自身的性能。

机器学习已经有了十分广泛的应用,例如:数据挖掘、计算机视觉、自然语言处理、生物特征识别、搜索引擎、医学诊断、检测信用卡欺诈、证券市场分析、DNA序列测序、语音和手写识别、战略游戏和机器人运用。

机器学习的算法分为两大类:监督学习和无监督学习。

监督学习即在机器学习过程中提供对错指示。一般是在数据组中包含最终结果(0,1),通过算法让机器自己减少误差。这一类学习主要应用于分类和预测(Regression&Classify)。监督学习从给定的训练数据集中学习出一个目标函数,当新的数据到来时,可以根据这个函数预测结果。监督学习的训练集要求包括输入和输出,也可以说包括特征和目标,训练集中的目标是由人标注的。常见的监督学习算法包括回归分析和统计分类。

非监督学习又称归纳性学习(Clustering),利用 K 方式(KMean)建立中心(Centriole),通过循环和递减运算(Iteration&Descent)来减小误差,达到分类的目的。1.3 Python中的机器学习

本书主要关注监督学习中的分类与回归问题处理的预测模型,这是在工业中应用非常广泛的分类,也是 scikit-learn擅长的一个领域。与统计学不同,机器学习的预测模型是用来理解数据、解决问题的;聚焦于如何创建一个更加精准的模型,而不是用来解释模型是如何设置的。与大部分机器学习的领域不同的是,预测模型是使用表格格式的数据作为模型的输入的,因此数据的采集和整理是很重要的工作。

本书会围绕以下三部分来引导大家学习机器学习。

· 课程:学习在项目中如何将机器学习的任务和Python有机地结合在一起,以便实现每一个机器学习问题的最佳实践。

· 项目:通过实例来理解学到的预测模型的知识。

· 方法:学到一系列方法,只是进行简单的复制粘贴操作就可以启动一个新的机器学习项目。

我们将通过项目来介绍基于 Python 的生态环境如何完成机器学习的相关工作。一旦明白了如何使用 Python 平台来完成机器学习的任务,就可以在不同的项目中重复使用这种方法解决问题。利用机器学习的预测模型来解决问题共有六个基本步骤,如图1-1所示。图1-1

· 定义问题:研究和提炼问题的特征,以帮助我们更好地理解项目的目标。

· 数据理解:通过描述性统计和可视化来分析现有的数据。

· 数据准备:对数据进行格式化,以便于构建一个预测模型。

· 评估算法:通过一定的方法分离一部分数据,用来评估算法模型,并选取一部分代表数据进行分析,以改善模型。

· 优化模型:通过调参和集成算法提升预测结果的准确度。

· 结果部署:完成模型,并执行模型来预测结果和展示。1.4 学习机器学习的原则

学习机器学习是一段旅程。需要知道自己具备的技能、目前所掌握的知识,以及明确要达到的目标。要实现自己的目标需要付出时间和辛勤的工作,但是在目标的实现过程中,有很多工具可以帮助你快速达成目标。

创建半正式的工作产品。以博客文章、技术报告和代码存储的形式记下学习和发现的内容,快速地为自己和他人提供一系列可以展示的技能、知识及反思。

实时学习。不能仅在需要的时候才学习复杂的主题,例如,应该实时学习足够的概率和线性代数的指示来帮助理解正在处理的算法。在开始进入机器学习领域之前,不需要花费太多的时间来专门学习统计和数学方面的知识,而是要在平时进行实时学习,积累知识。

利用现有的Skills。如果可以编码,那么通过实现算法来理解它们,而不是研究数学理论。使用自己熟悉的编程语言,让自己专注于正在学习的一件事情上,不要同时学习一种新的语言、工具或类库,这样会使学习过程复杂化。

掌握是理想。掌握机器学习需要持续不断的学习。也许你永远不可能实现掌握机器学习的目标,只能持续不断地学习和改进所掌握的知识。1.5 学习机器学习的技巧

下面三个技巧可以有效地帮助你快速提高学习机器学习的能力。

· 启动一个可以在一个小时内完成的小项目。

· 通过每周完成一个项目来保持你的学习势头,并建立积累自己的项目工作区。

· 在微博、微信、Github等社交工具上分享自己的成果,或者随时随地地展示自己的兴趣,增加技能、知识,并获得反馈。1.6 这本书不涵盖以下内容

这本书是写给对机器学习感兴趣和立志学习机器学习的Python程序员的,是一本关于机器学习实践的书籍。

这不是一本关于机器学习的教科书。本书只会简单介绍机器学习的基本原理和算法。在这里假设你已经掌握了机器学习的基础知识,或者有能力自己来完成机器学习的基础知识的学习。

这不是一本算法书。本书不会详细介绍机器学习的算法。在这里假设你已经掌握了机器学习的相关算法,或者能够独立完成相关算法知识的学习。

这不是一本关于Python的语法书。本书不会花费大量的篇幅来讲解Python的语法。在这里假设你是一个经验丰富的开发人员,能够快速掌握一种类似于C语言的开发语言。1.7 代码说明

本书中的所有代码都在Python3.6中调试过,可以下载这些代码来加快学习的进度。不过笔者还是强烈建议读者独立完成每一行代码,以加深理解。所有的源代码和数据集都保存在Github上,可以自行下载,地址为:https://github.com/weizy1981/MachineLearning。1.8 总结

本章已经对本书的内容做了一个概要的介绍。这本书与其他机器学习书籍的不同之处在于不会花费大量的篇幅来讲解算法,而是通过构建一个预测模型的机器学习项目,来引导学习机器学习在实践中的应用,并在项目实践中掌握机器学习知识。

下一章会介绍Python在机器学习方面的生态环境,并分析Python和SciPy在机器学习方面的优势,以及如何使用这些平台。2 Python机器学习的生态圈

随着Python生态圈的发展,在机器学习领域,Python已经发展成为机器学习方面最主要的语言。Python为什么能够成为机器学习的主流语言?这是因为Python不仅可以应用在R&D科研部门,也可以应用在实际的生产当中。本章主要介绍Python在机器学习方面的生态圈。完成本章后将会学到:

· Python和它在日益改进的机器学习中的应用。

· SciPy和它提供的基于NumPy、Matplotlib及Pandas的功能。

· scikit-learn提供的机器学习的算法。

· 如何设置基于Python的机器学习的环境。2.1 Python

Python是一门面向对象的动态解释语言,简单易学,并且具有很好的可读性。Python语法简洁清晰,特色之一是强制用空白符(White Space)作为语句缩进。Python具有丰富和强大的类库,它常被称为“胶水语言”,能够很轻松地把用其他语言制作的各种模块(尤其是 C/C++)联结在一起。常见的一种应用情形是,先使用 Python 快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分用更合适的语言改写,比如 3D 游戏对图形渲染模块的性能要求特别高,就可以用 C/C++重写,而后封装为Python可以调用的扩展类库。目前,在Python的生态圈中存在大量的第三方扩展类库,可以借助这些类库轻松实现项目需求。需要注意的是,在使用扩展类库时可能需要考虑平台问题,某些扩展类库可能不提供跨平台的实现。Python目前是一门非常流行的语言,在TIOBE 2017年6月编程语言排名中占据第四名的位置,如图2-1所示。图2-1

在PYPL各种编程语言的流行程度的统计中,2017年6月Python排在第二名,如图2-2所示。图2-2

Python 是一门动态语言,非常适合于交互性开发和大型项目的快速原型开发。由于Python 具有丰富的类库支持,因此被广泛应用于机器学习和数据科学方面。从这个方面来说,利用Python可以将研究项目和生产项目用统一的语言来实现,这就有效地降低了将研究项目转化成生产项目的成本。2.2 SciPy

SciPy是在数学运算、科学和工程学方面被广泛应用的 Python类库。它包括统计、优化、整合、线性代数模块、傅里叶变换、信号和图像处理、常微分方程求解器等,因此被广泛地应用在机器学习项目中。SciPy依赖以下几个与机器学习相关的类库。

NumPy:是 Python 的一种开源数值计算扩展。它可用来存储和处理大型矩阵,提供了许多高级的数值编程工具,如矩阵数据类型、矢量处理、精密的运算库。

Matplotlib:Python中最著名的2D绘图库,十分适合交互式地进行制图;也可以方便地将它作为绘图控件,嵌入GUI应用程序中。

Pandas:是基于NumPy的一种工具,是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具,也提供了大量能使我们快速、便捷地处理数据的函数和方法。

安装并熟悉SciPy是提高机器学习实践的有效手段,尤其是在以下几个方面:

· 可以利用NumPy数组来准备机器学习算法的数据。

· 可以使用Matplotlib来创建图表,展示数据。

· 通过Pandas导入、展示数据,以便增强对数据的理解和数据清洗、转换等工作。2.3 scikit-learn

scikit-learn是Python中开发和实践机器学习的著名类库之一,依赖于SciPy及其相关类库来运行。scikit-learn 的基本功能主要分为六大部分:分类、回归、聚类、数据降维、模型选择和数据预处理。需要指出的是,由于 scikit-learn 本身不支持深度学习,也不支持GPU加速,因此scikit-learn对于多层感知器(MLP)神经网络的实现并不适合处理大规模问题。(scikit-learn对MLP的支持在0.18版之后增加)

scikit-learn是一个开源项目,遵守BSD协议,可以将项目应用于商业开发。目前主要由社区成员自发进行维护。可能是由于维护成本的限制,scikit-learn 相比其他项目要显得更为保守,这主要体现在两个方面:

· scikit-learn从来不做除机器学习领域之外的其他扩展。

· scikit-learn从来不采用未经广泛验证的算法。2.4 环境安装

前面介绍了在本书中使用的相关机器学习的类库,接下来将介绍如何进行安装,有多种方法可以用来配置机器学习的相关环境。在安装之前先说明一下,笔者使用的 IDE是PyCharm,本书中相关示例的演示都基于PyCharm进行。PyCharm是JetBrains公司的产品,有收费的专业版和免费的社区版,在本书的学习过程中使用社区版就可以满足需求。可以自行到JetBrains的官网(http://www.jetbrains.com/pycharm/)进行下载。具体的PyCharm的说明见附录A.1。2.4.1 安装Python

可以在 python.org(https://www.python.org)下载合适的版本,并参照相应的安装说明进行安装,推荐安装Python3.6.1,本书中的所有示例都将基于Python3.6进行。当安装完成后,在命令终端执行以下命令来确认安装版本。

看到如下的实现后说明安装已经完成。2.4.2 安装SciPy

有多种方法可以用于安装SciPy,本书推荐使用Python的安装包管理工具pip进行安装。SciPy的文档非常完善,覆盖了多个平台和多种安装方式,请参考SciPy的安装指南(https://www.scipy.org/install.html)进行安装。在安装SciPy时,请确保至少安装了SciPy、Numpy、Matplotlib和Pandas。

安装完成后,可以在IDE里新建一个Python文件,输入以下代码并执行,确认安装结果。

在我的机器上的执行结果如下:2.4.3 安装scikit-learn

建议采用与安装SciPy相同的方法来安装scikit-learn,通过pip来管理安装包。安装完成后,可以通过相似的方法来确认安装结果。代码如下:

在我的机器上的执行结果如下:2.4.4 更加便捷的安装方式

如果觉得通过 pip 管理安装包比较复杂,还可以利用一个更加简单便捷的方式来安装这些安装包:通过 Anaconda 安装相关的安装包。Anaconda 提供了包管理与环境管理的功能,可以很方便地解决多版本 Python 并存、切换及各种第三方包的安装问题。Anaconda 是免费的,可以自由地进行下载(https://www.continuum.io/downloads)和安装,目前支持Windows、Mac OS和Linux系统,读者可以选择适合自己的操作系统下载安装。2.5 总结

本章主要介绍了Python及其在机器学习方面的生态圈和相关类库的安装,包括以下内容:

· Python及其在机器学习方面的类库和应用。

· SciPy的主要功能和它依赖的扩展类库。

· scikit-learn及它提供的机器学习算法。

接下来将介绍一个机器学习的实例,这个实例也被称为机器学习中的Hello World。通过这个实例可以使读者对机器学习的项目有一个初步的了解,了解机器学习项目的基本步骤和流程。3 第一个机器学习项目

前面介绍了在Python中进行机器学习实践需要的生态环境,接下来将会通过鸢尾花分类这个例子对机器学习做一个概要的介绍。本章通过一步一步地实现这个项目来介绍以下内容。

· 下载和安装在Python中机器学习的各个方面的类库。

· 导入数据,并通过描述性分析、可视化等对数据进行分析。

· 创建六个模型,并从中选择准确度最高的模型。

这一章介绍的项目是机器学习中的Hello World项目,是给初学者设计的一个指南项目。3.1 机器学习中的Hello World项目

这个项目是针对鸢尾花(Iris Flower)进行分类的一个项目,数据集是含鸢尾花的三个亚属的分类信息,通过机器学习算法生成一个模型,自动分类新数据到这三个亚属的某一个中。项目中使用的鸢尾花数据集是一个非常容易理解的数据集,这个数据集具有以下特点:

· 所有的特征数据都是数字,不需要考虑如何导入和处理数据。

· 这是一个分类问题,可以很方便地通过有监督学习算法来解决问题。

· 这是一个多分类问题,也许需要一些特殊的处理。

· 所有的特征的数值采用相同的单位,不需要进行尺度的转换。

接下来我们将通过这个例子一步步地来展示一个机器学习项目的所有步骤。我们将按照下面的步骤实现这个项目:(1)导入数据。(2)概述数据。(3)数据可视化。(4)评估算法。(5)实施预测。

我们需要认真完成每一步,尝试自己输入每一行代码,以加深对机器学习项目流程的理解。请启动你的Python环境或IDE,开始实现机器学习的第一个项目吧。3.2 导入数据

导入项目所需的类库和鸢尾花(Iris Flower)数据集。3.2.1 导入类库

导入在项目中将要使用的类库和方法。代码如下:

所有类库的导入都不应有错误提示。如果出现了错误提示,那么暂时停下来,先设置一个能够运行的SciPy环境。3.2.2 导入数据集

我们可以在UCI机器学习仓库下载鸢尾花(Iris Flower)数据集(http://archive.ics.uci.edu/ml/datasets/Iris),下载完成后保存在项目的统计目录中。在这里将使用Pandas来导入数据和对数据进行描述性统计分析,并利用Matplotlib实现数据可视化。需要注意的是,在导入数据时,为每个数据特征设定了名称,这有助于后面对数据的展示工作,尤其是通过图表展示数据。代码如下:3.3 概述数据

我们需要先看一下数据,增加对数据的理解,以便选择合适的算法。我们将从以下几个角度来审查数据:(1)数据的维度。(2)查看数据自身。(3)统计描述所有的数据特征。(4)数据分类的分布情况。

不要担心这会需要很多代码,每一种审查方法只有一行代码。这些代码非常有效,在以后的项目中也会用到。3.3.1 数据维度

通过查看数据的维度,可以对数据集有一个大概的了解,如数据集中有多少行数据、数据有几个属性等。代码如下:

将会得到一个具有150行数据,5个数据特征属性的结果,执行结果如下:3.3.2 查看数据自身

查看数据自身也是一个很好的理解数据的方法,通过查看数据可以直观地看到数据的特征、数据的类型,以及大概的数据分布范围等。代码如下:

在这里查看前10行记录,执行结果如下:3.3.3 统计描述数据

数据特征的统计描述信息包括数据的行数、中位值、最大值、最小值、均值、四分位值等统计数据信息。代码如下:

执行结果如下:3.3.4 数据分类分布

接下来看一下数据在不同分类的分布情况,执行程序后得到的将是每个分类数据量的绝对的数值,看一下各个分类的数据分布是否均衡。代码如下:

这里就是通过前面设定的数据特征名称来查看数据的。执行结果如下:

我们可以看到鸢尾花的三个亚属的数据各50条,分布非常平衡。如果数据的分布不平衡时,可能会影响到模型的准确度。因此,当数据分布不平衡时,需要对数据进行处理,调整数据到相对平衡的状态。调整数据平衡时有以下几种方法。

· 扩大数据样本:这是一个容易被忽视的选择。一个更大的数据集,就有可能挖掘出不同的或许更平衡的方面提高算法模型的准确度。

· 数据的重新抽样:过抽样(复制少数类样本)和欠抽样(删除多数类样本)。当数据量很大时可以考虑测试欠抽样(大于一万条记录),当数据量比较少时可以考虑过抽样。

· 尝试生成人工样本:一种简单的生成人工样本的方法是从少数类的实例中随机抽样特征属性,生成更多的数据。

· 异常检测和变化检测:尝试用不同的观点进行思考,以解决问题。异常检测是对罕见事件的检测。这种思维的转变在于考虑以小类作为异常值类,它可以帮助获得一种新方法来分离和分类样本。3.4 数据可视化

通过对数据集的审查,对数据有了一个基本的了解,接下来将通过图表来进一步查看数据特征的分布情况和数据不同特征之间的相互关系。

· 使用单变量图表可以更好地理解每一个特征属性。

· 多变量图表用于理解不同特征属性之间的关系。3.4.1 单变量图表

单变量图表可以显示每一个单独的特征属性,因为每个特征属性都是数字,因此我们可以通过箱线图来展示属性与中位值的离散速度。代码如下:

执行结果如图3-1所示。图3-1

还可以通过直方图来显示每个特征属性的分布状况。代码如下:

在输出的图表中,我们看到separ-length和separ-width符合高斯分布。执行结果如图3-2所示。图3-23.4.2 多变量图表

通过多变量图表可以查看不同特征属性之间的关系。我们通过散点矩阵图来查看每个属性之间的影响关系。

执行结果如图3-3所示。图3-33.5 评估算法

通过不同的算法来创建模型,并评估它们的准确度,以便找到最合适的算法。将按照下面的步骤进行操作:(1)分离出评估数据集。(2)采用10折交叉验证来评估算法模型。(3)生成6个不同的模型来预测新数据。(4)选择最优模型。3.5.1 分离出评估数据集

模型被创建后需要知道创建的模型是否足够好。在选择算法的过程中会采用统计学方法来评估算法模型。但是,我们更想知道算法模型对真实数据的准确度如何,这就是保留一部分数据来评估算法模型的主要原因。下面将按照 80%的训练数据集,20%的评估数据集来分离数据。代码如下:

现在就分离出了 X_train 和 Y_train 用来训练算法创建模型,X_validation 和Y_validation在后面会用来验证评估模型。3.5.2 评估模式

在这里将通过 10 折交叉验证来分离训练数据集,并评估算法模型的准确度。10 折交叉验证是随机地将数据分成10份:9份用来训练模型,1份用来评估算法。后面我们会使用相同的数据对每一种算法进行训练和评估,并从中选择最好的模型。3.5.3 创建模型

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载