首页>参考读物>计算机科学与技术>软件与程序设计

机器学习:实用技术指南
作者 : [美] 詹森·贝尔(Jason Bell)著
译者 : 邹伟 王燕妮 译
出版日期 : 2018-04-11
ISBN : 978-7-111-59337-9
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 318
开本 : 16
原书名 : Machine Learning: Hands-On for Developers and Technical Professionals
原出版社: John Wiley & Sons(USA)
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

图书特色

以实例方式详细讲解各种机器学习方法的使用及其工程实践,提供代码示例

图书前言

数据,数据,数据!想必在新闻、报刊、白皮书、电视等媒介的持续冲击下,人们无法摆脱大数据和数据科学的洗礼。现实需求推动了对数据的学习、分析和应用,这些数据来自社交媒体、智能手机、硬件设备(也称作“物联网”)、传感器等任何可以产生数据的设备。
大多数数据挖掘的宣传着重于数据规模和处理速度。数据洪水(data flood)的预言告诉人们,我们无法实时处理这些数据,硬件推销人员会进一步卖给我们所需要的服务,以期能够满足处理速度的要求。从某种程度上来说,他们是对的,但是我们值得停下来思考片刻,并对手边的任务进行适当的再认识。
近年来,数据挖掘和机器学习在我们周围持续火爆,各种媒体也不断推送着海量的数据。但仔细观察就能发现,实际应用中的那些机器学习算法与多年前并没有什么两样,只是在应用的数据规模上有些不同罢了。历数一下产生数据的组织,至少在我看来,数目其实并不多。无非是Google、Facebook、Twitter、Netflix及其他为数不多的机构,在使用若干学习算法和工具,这些算法和工具使得他们能够对数据进行测试分析。那么,真正的问题是:“对于其他人,大数据框架下算法和工具的作用是什么呢?”
我承认本书将多次提及大数据和机器学习之间的关系,这是我无法忽视的一个客观问题,但它只是一个很小的因素,终极目标是如何利用可用数据获取数据的本质内涵。请记住,本书是在探讨工具,关键点是选择哪个工具来胜任我们尝试完成的工作。迫于技术上的压力,有人可能会选择Hadoop,但是Hadoop并不一定总是完成任务最好的选择。
本书目的
本书是关于机器学习而非大数据的,书中会介绍多种用于分析数据本质的技术。读完本书,你将掌握许多有用的机器学习方法的实际运用,并分析、解释算法实现中如此组织代码的原因。针对具体实际问题选择哪种方法更恰当,本书会提供推荐的建议。
本书没有固定的阅读顺序。你可以从头读到尾,或者选择性地阅读你需要的内容。
“实践”意味着亲自动手
过去的几年里,我读过的许多关于机器学习的书都非常重视理论,这并不是什么坏事。如果你正在看一本使用复杂公式、深入讲解数学理论的书,我要为你的严谨而喝彩。对于我而言,我更加关注的是使用何种机器学习方法及其工程实践。我的信条很简单:
在头脑中思考一个问题;
找到我需要学习的理论;
找到和我要学习的理论最相关的例子;
在我的实践工程中让它们发挥作用。
作为软件开发人员,我个人喜欢看很多示例。作为一名老师,我喜欢尽可能多地亲自实现它,并且尽可能简单地将内容传授给我的学生。大概过程是:指出关键点,在IDE中输入正确的代码,然后实现期望的功能。这是令人振奋并且很有成就感的事情,并且我在本书中也希望传达这样的思想。
每个人都有自己的学习方式。我相信本书涵盖了大多数的通用方法,所以,相信每个人都能从中获益。
“如何对待数学?”
就像谈论“你最喜欢哪支足球队?”“吉他手吉米·佩奇(Jimmy Page)和杰夫·贝克(Jeff Beck)哪个更帅气(嘿,本人更喜欢贝克)?”有些话题是没有标准答案的。比如这个问题:在开始从事机器学习之前,我需要知道多少数学知识?
从事机器学习和学习机器学习的理论是两个不同的概念。为了学习理论,显然需要一个好的数学背景。本书讨论机器学习的实践方法。现在已经有了很多可被开发者利用的机器学习工具,当前的重点不是为什么这些工具有用,而是如何让这些工具为我所用。前人已经完成了艰难的工作,我们要尊重他们的劳动成果,并为他们喝彩。
“但是你需要一个博士!”
同行的一些言语或许会葬送你的研究之路。在你开始做数据分析或者敢于自称是“数据科学家”的时候,耳边会长期充斥着关于你应该具备什么样的知识层次这样的争论(我将马上剖析“数据科学家”这个术语)。个人而言,我相信如果你能够花费多年去获得一个学士学位,接着获得硕士学位,然后是博士学位,你就可以选择这条路。我对待事情更加注重实用性,并且喜欢边阅读资料边动手实践。
学术环境很关键;现在有大量的在线课程、论文、网站,以及关于数学、统计、数据挖掘方面的书籍,足够让你跟上最新最热的思想。我从中获取了很多资源。
但是,对于我,最直接的莫过于甩开膀子,阅读大量书籍,尝试一些方法,并且检验它们的结果。如果你想重温一下线性回归的理论,我再次向你保证有很多资料可以阅读,本书也将介绍它们。
最后,大家能够成为“数据科学家”吗?或许本书更有可能的结果是:带给大家更多的机器学习实践技能。第2章将再次讨论这个话题。
所以,当办公室的其他人还在争论是否需要在项目组中增加几个博士的时候,你已经开始用代码实现一个决策树,并且检验它是否切实可行了。
最终你会学到什么
假定你将本书从头读到尾,你将学到机器学习的常用策略、机器学习的不同方法,以及将它们应用在实时和批处理环境下的方法。
或者,你也可以直接参考你需要的某一个章节。本书各章节之间联系并不紧密,每一章的内容和实例与其他章节并无太多相关性。
本书的目的是以实例的方式讲述通用的机器学习概念。在各种工具和软件库中选择适合自己的那个,借助已有工具的方式能够让你快速学习并掌握相关知识,同时对于深刻分析、理解当前数据不会有太大影响。
理论和实践学习的平衡
现在已经有很多关于机器学习和数据挖掘的书籍,难点在于如何找到理论和实践的平衡点。当筹划本书时,我会将重点放在实际和易用的例子上,提供逐步的指导,并且能够让你看到这些技术是如何组合在一起的。
我并没有说要轻视理论,恰好相反,理论是极其重要的。清楚你想学什么,或者更重要的是,你想怎么学,将决定你如何阅读本书。
前两章介绍机器学习和数据挖掘的定义、实践中所使用的相关工具,以及它们产生的效果,为接下来真正的机器学习算法做准备。主要章节(第3~8章)重点介绍不同类型的机器学习理论,类似游戏攻略,每章将给出代码片段的解释,再配合其他方法,保证你能够从中获得需要的知识。
最后,你将对比实时和批处理两种环境下的方法,并且学习如何将它们整合在一个大的算法框架中。你还将了解Apache Spark和R语言,它们是统计的根本语言。
章节概述
第1章阐述“什么是机器学习”,讨论机器学习的定义和用途,并且指出你将遇到的算法方面的挑战。同时还讨论人类自身的“机器学习”过程,探讨人类建立的模型是如何在将来产生作用的。
在任何实际编程之前,都应该做好计划。第2章的重点就是完成这一步。计划包括一组分析和展示方法、数据处理过程、确定存储空间、数据私有性、数据质量和清洗。须知,没有任何一种方法能够胜任所有任务。第2章将通过一些简单的Linux命令帮助你整理需要处理的数据。
决策树是机器学习中的常用方法。在模型中,通过使用观测结果或者样本标签以及众多的输入数据(信号、特征),机器学习的算法就能够预测新数据的可能结果。第3章讲述决策树的设计,并使用Weka实现一个决策树实例。
贝叶斯网络表示一组随机变量的条件独立性。第4章将构造一个简单的例子,展示贝叶斯网络是如何工作的,并且提供一些可用的代码。
受生物领域中枢神经系统工作方法的启发,神经网络模型仍应用在深度学习系统中。第5章将讨论机器学习的这一分支是如何起作用的,并且阐述把输入样本传递给网络结构的具体过程。
如果你关注购物篮分析(basket analysis),你会喜欢第6章涉及的关联规则学习,从而找到大数据集之间的联系。该章将细致地讨论Apriori算法,以及它是如何应用在当前的超市行业中的。
支持向量机(SVM)是一个监督学习方法,用于分析数据和模式识别。第7章将给出文本分类等实例,展示SVM是如何工作的。
第8章讲解聚类—对象间的分组,例如,聚类能够在市场细分分析(Market Segmentation Analysis)的应用中工作得很好。在初始学习阶段,聚类算法是逐步迭代减小分类误差的最好机器学习方法。
第9章和第10章是实例攻略。第9章的例子关注实时处理。你将使用Spring XD—它甚至可以称作“数据吸收引擎”(data ingesting engine),同时利用流式的推特应用程序接口(streaming Twitter API),只要有新的推特消息(Twitter),就把它们收集起来,从而准备好数据,在第10章做进一步处理。
第10章考察机器学习的批处理过程。使用第9章获得的数据,你可以搭建Hadoop的聚类模型,并且运行多个作业。该章介绍使用Sqoop获得数据库中数据的常用方法,如何使用Mahout执行用户推荐,以及如何使用Hadoop和Pig分析个性化用户数据。
第11章介绍机器学习舞台上的新成员—Apache Spark,并且介绍Scala语言,它可以针对内存数据用类似于SQL的查询语句进行查询。
R语言是世界范围内用于统计工作的重要语言,第12章将介绍和分析R语言。你可以使用它来实现本书前面章节涉及的机器学习算法。
本书的源代码
本书每一章阐述的所有代码都保存在GitHub库中供大家下载调试。GitHub的地址是https://github.com/jasebell/mlbook。读者也可以访问Wiley官网找到代码: www.wiley.com/go/machinelearning。
本书的例子是使用Java实现的,如果你想使用其他语言实现,可以搜索GitHub网站,或许能在其中找到很多有趣的例子。
代码已经按照章节分好了,代码包中每章都有各自的文件夹。如果某一部分需要额外的库,文件夹中会有一个README注释文件。
使用Git
Git是一个在业界和开源软件社区广泛使用的版本控制系统。如果软件是由团队开发的,Git将非常重要。你可以使用它在代码的各个分支上工作,最后将分支合并在一起。
本书使用Git并不多,但是如果你希望使用本书的代码库,需要克隆一份实例。
为了克隆本书的实例,可以使用下面的命令:

你可以看到克隆进度,当它完成的时候,你能够改变文件夹,在新下载的目录中查阅代码实例。

上架指导

计算机\数据挖掘

封底文字

如果你想研究机器学习,但又害怕数学,那么本书是你的终极指南。本书通过大量的实例和代码详细讨论机器学习的实践方法,不涉及过多的数学理论。通过本书,你将学习各种算法、数据准备技术、树和网络,并熟悉从数据中获得更多知识的工具。你会理解这些工具是如何工作的,如何使用的,以及如何使它变得有价值。

通过阅读本书,你将:
学习机器学习的语言:Weka、Mahout、Spark和R
根据需要的输出进行调整,做出正确的数据存储和清理决策
了解决策树、贝叶斯网络、人工神经网络和关联规则学习
实现支持向量机,了解相关的优缺点
使用Hadoop、Mahout和MapReduce的大数据处理技术
使用Spring XD来捕获流数据,并实时学习
访问需要规划项目、获取、处理数据的工具
使用提供的实践代码进行示例学习

译者序

随着高新技术的发展,计算机的功能日益强大;随着数据量的与日俱增,由处理数据的数量与复杂度所带来的一系列问题不容忽视。“机器学习”是近20多年兴起的一门多领域交叉学科,涉及概率论、统计学、逼近论、计算复杂性理论等多门学科,其目的是设计和分析一些让计算机可以自主“学习”的算法,对大数据及复杂数据进行处理、分析。本书在阐述“机器学习”概念的同时,通过多种示例深入分析了机器学习的原理及可行性,并结合多种经典案例,详细介绍了机器学习中常用的数学模型:决策树、贝叶斯网络、人工神经网络、关联规则、聚类、支持向量机等,以及在不同运行环境中,如何采用Java编程语言对模型进行处理与结果分析,同时分析了算法的性能及效率。
由于中西方文化的差异,原著中的一些内容可能使读者感到困惑,另外还有不少地方表述模糊。针对这些,我们都尽可能地加了译者注。而对于发现的错误、不当之处或有争议之处,我们通过交流、沟通,并尽力在译文中做了修正。
承蒙多位学者的鼓励,译者有幸将国外优秀的原著介绍给读者,译者在此表示衷心的感谢。同时感谢责任编辑对文稿所做的大量工作。引用思想领袖Thomas H. Davenport的一句话:“人类通常一周可以创建一个或两个好的模型;而机器学习一周就可以创造出成千上万个模型。”因此,不论你是科研工作者、学生、工程师,还是从事信息技术相关领域工作的人士,阅读本书都会带给你极大的收获,并能引发你对机器学习的深入思考。
虽然译者已经竭尽全力以“信、达、雅”为标准来还原作者的本意,也进行了多轮的审校和通读,但由于水平及时间有限,难免有不当之处,恳请学术界同仁及广大读者赐正。

图书目录

译者序
前言
致谢
第1章 什么是机器学习1
1.1 机器学习的历史1
1.1.1阿兰·图灵1
1.1.2亚瑟·塞缪尔2
1.1.3汤姆 M.米切尔2
1.1.4总结定义2
1.2机器学习的算法类型2
1.2.1监督学习3
1.2.2无监督学习3
1.3人的作用3
1.4机器学习的用途4
1.4.1软件4
1.4.2股票交易4
1.4.3机器人学5
1.4.4医学和医疗5
1.4.5广告业5
1.4.6零售和电子商务6
1.4.7游戏分析7
1.4.8物联网7
1.5机器学习语言8
1.5.1Python8
1.5.2R8
1.5.3Matlab8
1.5.4Scala8
1.5.5Clojure9
1.5.6Ruby9
1.6 本书使用的软件9
1.6.1检查Java版本9
1.6.2Weka 工具包9
1.6.3Mahout10
1.6.4Spring XD10
1.6.5Hadoop11
1.6.6使用集成开发环境11
1.7数据库11
1.7.1加州大学欧文分校机器学习库12
1.7.2Infochimps12
1.7.3Kaggle12
1.8总结12
第2章 筹备机器学习13
2.1机器学习周期13
2.2以问题为先导13
2.3缺少数据14
2.3.1从身边做起14
2.3.2比赛14
2.4一劳永逸的解决方案15
2.5界定机器学习过程15
2.5.1规划15
2.5.2开发16
2.5.3测试16
2.5.4报告16
2.5.5精炼16
2.5.6产品16
2.6建立数据团队17
2.6.1数学和统计学17
2.6.2编程17
2.6.3图形设计17
2.6.4行业知识17
2.7数据处理18
2.7.1使用个人计算机18
2.7.2计算机集群18
2.7.3云服务18
2.8数据存储19
2.8.1物理磁盘19
2.8.2云存储19
2.9数据隐私19
2.9.1文化规范19
2.9.2普遍的期望20
2.9.3用户数据匿名20
2.9.4不要穿过“底线”21
2.10数据质量和清洗21
2.10.1完整性检测22
2.10.2类型检测22
2.10.3长度检测22
2.10.4范围检测22
2.10.5格式检测23
2.10.6进退两难23
2.10.7国家名内包含的内容26
2.10.8数值和日期27
2.10.9有关数据清洗的最后看法28
2.11思考输入数据28
2.11.1原始文本28
2.11.2逗号分隔变量28
2.11.3JSON29
2.11.4YAML30
2.11.5XML31
2.11.6电子表格32
2.11.7数据库32
2.11.8图像33
2.12考虑输出数据33
2.13不要害怕实验33
2.14总结34
第3章 决策树35
3.1决策树基础35
3.1.1决策树的用途35
3.1.2决策树的优点36
3.1.3决策树的局限36
3.1.4相关算法类型36
3.1.5决策树工作原理37
3.2 Weka中的决策树40
3.2.1需求40
3.2.2训练数据41
3.2.3使用Weka创建决策树42
3.2.4为分类器生成Java代码46
3.2.5测试分类器代码49
3.2.6进一步的思考51
3.3总结51
第4章 贝叶斯网络52
4.1从飞行员到回形针52
4.2图论53
4.3概率论54
4.3.1投掷硬币54
4.3.2条件概率54
4.3.3赌博中获胜54
4.4贝叶斯定理55
4.5贝叶斯网络原理57
4.5.1赋值57
4.5.2计算结果58
4.6节点的个数59
4.7利用领域专家的信息59
4.8贝叶斯网络演练59
4.8.1贝叶斯网络中的Java API60
4.8.2设计网络60
4.8.3编程61
4.9总结69
第5章 人工神经网络70
5.1什么是神经网络70
5.2人工神经网络的应用71
5.2.1高频交易71
5.2.2信用分析71
5.2.3数据中心管理71
5.2.4机器人72
5.2.5药效监控72
5.3人工神经网络分解72
5.3.1感知机72
5.3.2激活函数73
5.3.3多层感知机74
5.3.4后向传播算法75
5.4人工神经网络的数据准备76
5.5 Weka中的人工神经网络76
5.5.1新建数据集76
5.5.2将数据载入Weka中78
5.5.3配置多层感知机79
5.5.4训练网络81
5.5.5调整网络83
5.5.6增加测试数据规模83
5.6利用Java实现神经网络84
5.6.1创建项目84
5.6.2实现代码86
5.6.3CSV与Arff文件转换88
5.6.4运行神经网络88
5.7总结89
第6章 关联规则学习90
6.1关联规则学习的应用90
6.1.1Web使用挖掘90
6.1.2啤酒和尿布91
6.2关联规则学习工作原理92
6.2.1支持度92
6.2.2置信度93
6.2.3提升度93
6.2.4确信度93
6.2.5计算步骤94
6.3算法94
6.3.1 Apiori94
6.3.2FP-Growth95
6.4基于购物篮分析的实战95
6.4.1下载原始数据95
6.4.2在Eclipse中搭建工程96
6.4.3建立项目的数据文件97
6.4.4 设置数据99
6.4.5运行Mahout101
6.4.6检查结果103
6.4.7结果整合105
6.4.8进一步开发106
6.5总结106
第7章 支持向量机107
7.1什么是支持向量机107
7.2何处使用支持向量机107
7.3基本分类原则108
7.3.1二分类和多分类108
7.3.2线性分类器109
7.3.3置信度109
7.3.4最大化或最小化寻找直线110
7.4支持向量机如何实现分类110
7.4.1使用线性分类110
7.4.2使用非线性分类112
7.5在Weka中使用支持向量机112
7.5.1安装LibSVM112
7.5.2分类演示113
7.5.3用Java实现LibSVM117
7.6总结122
第8章 聚类123
8.1什么是聚类123
8.2聚类应用123
8.2.1因特网124
8.2.2商业和零售业124
8.2.3执法部门124
8.2.4计算124
8.3聚类模型125
8.3.1k-均值的工作原理125
8.3.2计算一个数据集中聚类的数量126
8.4使用Weka做k-均值聚类127
8.4.1准备数据128
8.4.2工作台方法129
8.4.3命令行方法133
8.4.4编程方法135
8.5总结143
第9章 实时机器学习—使用Spring XD框架144
9.1获取消防水管式的数据144
9.1.1使用实时数据的注意事项144
9.1.2实时系统的使用范围145
9.2使用 Spring XD146
9.2.1Spring XD 数据流146
9.2.2输入源、输出、处理单元147
9.3从Twitter 数据中进行学习148
9.3.1开发计划149
9.3.2配置Twitter API开发者应用环境150
9.4配置Spring XD152
9.4.1启动Spring XD服务器152
9.4.2创建样本数据153
9.4.3Spring XD shell153
9.4.4数据流入门154
9.5 Spring XD 和 Twitter156
9.5.1设置Twitter 访问认证156
9.5.2创建第一个Twitter数据流157
9.5.3我们所在的位置159
9.6处理单元介绍159
9.6.1处理单元是如何工作的160
9.6.2创建自己的处理单元160
9.7实时情感分析167
9.7.1基本的分析如何工作168
9.7.2创建情感分析的处理单元169
9.7.3Spring XD Taps172
9.8总结173
第10章 批处理系统的机器学习174
10.1这个是大数据吗174
10.2对批处理数据的若干考虑175
10.2.1量级和频率175
10.2.2需要多少数据175
10.2.3用何种处理方法176
10.3批处理实例176
10.3.1Hadoop176
10.3.2Sqoop176
10.3.3Pig177
10.3.4Mahout177
10.3.5基于云的Elastic Map Reduce177
10.3.6关于教程的提示177
10.4使用Hadoop框架178
10.4.1Hadoop架构178
10.4.2建立单一节点集群179
10.5 MapReduce是如何工作的183
10.6挖掘标签184
10.6.1Hadoop支持Spring XD184
10.6.2本书的目标185
10.6.3什么是标签185
10.6.4建立MapReduce类186
10.6.5在现有数据上运行ETL195
10.6.6使用Mahout生成推荐198
10.7挖掘销售数据204
10.7.1欢迎来到我的咖啡店204
10.7.2小规模(数据)尝试205
10.7.3编写核心方法205
10.7.4使用Hadoop和MapReduce207
10.7.5使用Pig挖掘销售数据210
10.8规划批处理任务218
10.9总结219
第11章 Apache Spark 221
11.1 Spark是不是Hadoop的替代品221
11.2 Java、Scala还是Python222
11.3 Scala速成222
11.3.1安装Scala222
11.3.2包222
11.3.3数据类型223
11.3.4类223
11.3.5调用函数224
11.3.6操作符224
11.3.7控制结构224
11.4下载和安装Spark225
11.5 Spark简介225
11.5.1启动命令行终端226
11.5.2数据源227
11.5.3Spark初体验227
11.5.4Spark监控229
11.6 Spark与Hadoop MapReduce229
11.7在Spark下编写独立运行的程序232
11.7.1用Scala编写Spark程序232
11.7.2安装SBT232
11.7.3用Java编写Spark程序235
11.7.4Spark程序小结238
11.8 Spark SQL238
11.8.1基本概念238
11.8.2在RDD中使用SparkSQL239
11.9 Spark流处理框架247
11.9.1基本概念247
11.9.2用Scala编写第一个流处理程序248
11.9.3用Java编写第一个流处理程序250
11.10 MLib:机器学习算法库252
11.10.1依赖253
11.10.2决策树253
11.10.3聚类254
11.11总结254
第12章 基于R语言的机器学习255
12.1安装R255
12.1.1Mac OS X255
12.1.2Windows255
12.1.3Linux256
12.2第一次运行R256
12.3安装RStudio257
12.4 R基础258
12.4.1变量和向量258
12.4.2矩阵258
12.4.3列表259
12.4.4数据框260
12.4.5安装包261
12.4.6加载数据262
12.4.7绘制数据263
12.5简单统计266
12.6简单线性回归267
12.6.1 构建数据267
12.6.2 初始图267
12.6.3 线性回归模型268
12.6.4 预测268
12.7基本情感分析269
12.7.1加载词汇表的函数269
12.7.2编写函数给情感打分269
12.7.3函数测试270
12.8 Apriori关联规则271
12.8.1安装arules包271
12.8.2训练数据271
12.8.3导入事务数据272
12.8.4运行Apriori算法273
12.8.5查看结果273
12.9从Java中访问R273
12.9.1安装rJava包274
12.9.2R中的第一段Java代码274
12.9.3创建一个Eclipse项目275
12.9.4创建Java/R类276
12.9.5运行示例276
12.9.6扩展R实现278
12.10 R与Hadoop278
12.10.1RHadoop项目278
12.10.2在RHadoop上的Map Reduce任务示例279
12.10.3用R连接社交媒体280
12.11总结282
附录A Spring XD快速入门284
附录B Hadoop 1.x快速入门286
附录C 常用UNIX命令289
附录D 进一步阅读299

教学资源推荐
作者: (美)Daniel M. Bikel, Imed Zitouni 编
作者: 刘恒洋 杨宏雨 主编
作者: Brian W.Kernighan
作者: [美]本贾尼·斯特劳斯特鲁普(Bjarne Stroustrup) 著
参考读物推荐
作者: 杨镇 姜信宝 朱智胜 盖方宇 著
作者: Damon Hougland Aaron Tavistock