书名:基于H2O的机器学习实用方法:一种强大的可扩展的人工智能和深度学习技术
原书名:Practical Machine Learning with H2O:Powerful, Scalable Techniques for Deep Learning and AI
出版社:机械工业出版社
出版日期:2018年7月
定价:69.00元
经过漫长的发展,机器学习逐渐变得越来越成熟。它最早可以追溯到 20世纪 50年代,当时开发出第一个根据经验进行学习的程序(下跳棋),这也是第一个神经网络。人工智能研究人员多次提到这是一个当今早就不再关注的“指日可待”的重大突破。但也许研究人员是一直沿着正确的道路进行研究,或许只是需要一个更大数量级的处理能力,或一个微小的算法调整,就可以将毫无意义的研究变成富有成效并具有远大前途的工作。
在20世纪90年代早期,人们普遍将神经网络看作在人工智能方面取得的一项新的重大突破。当时本人曾多次尝试在计算机中实际应用神经网络,但在与利用特定领域的知识工程以及重新改进的树搜索方法所得到的结果相比时,发现其处理能力非常糟糕(结果仍是相当普通的)。而且其处理大规模数据的能力也很差。 20年后,当听说深度学习这一新概念在计算机领域取得了令人瞩目的成果时,本人感到非常困惑的是这与多年前所放弃研究的神经网络究竟有何不同。答案其实是“并没有太大不同”,或许只需要一个具有更强大处理能力(在这种情况下需提高 5~6个数量级)的算法,就能取得丰硕成果。
H2O是一种用于机器学习和数据分析的软件。怀着想要了解深度学习所具有的强大功能的这一想法,促使本人深入学习H2O(尽管并不仅限于此,还包括搜索树、线性模型、无监督学习等),结果立刻就留下了深刻印象。H2O具有下列特性:
. 开源(免费的 Apache许可证);
. 易于使用;
. 可扩展到大数据;
. 文档完备且具有商业支持;
. 第三版(即成熟架构);
. 广泛的操作系统 /语言支持。
H2O.ai(开发H2O的公司)聚集了高质量的优秀团队,将会发展得越来越好。在整个开发过程中,公司不仅始终坚持“如何才能使得 H2O更好地发挥作用”,而且始终坚持“如何使其在大数据范畴下有效工作”的发展理念。
如果机器学习已完全成熟,那么H2O就好比既是一辆经济实用的家用车,同时也是一辆大载重量的货车。如果进一步深化比喻,本书将不仅介绍仪表盘控件所做的工作,而且还将讨论实现车辆从 A到 B的最佳方式。为了尽可能实用,本书只对学习算法相关的数学原理或理论进行最低程度的解释。
当然H2O也并非完美,以下是一些需要注意的问题。首先,H2O不支持GPU(它可实现深度学习,尤其是更快的学习)一。其次,集群都是针对低层(大数据),而不支持高层(复杂但相对较少的数据),因此对于后者,可能只需要一个单一的、快速的、有多个内核一Deep Water是一个正在开发的新的H2O项目,可允许与其他深度学习库进行交互,因此H2O将会很快支持GPU。
另外,集群也不具备高可用性(HA)。第三,H2O是Java语言编译的,可以实现很好的优化,且 H2O算法以执行速度快而著称,当然从理论上来说,更加优化的C++语言可能会更快。第四,在 H2O中不具有SVM(状态向量机)算法。最后,H2O还试图支持众多开发平台,因此每个平台都有一些简单的接口,有时会由于试图保持所有平台同步而导致开发过程较慢。
换言之,如果还是用车辆来比喻:一级方程式赛车会在直道上击败H2O,但实际情况中尚未出现这种情况。
选择H2O的用户及原因一些知名公司(http://www.h2o.ai/customers/)已正在利用H2O进行大数据处理,H2O网站已声称目前有超过 5000家公司在使用 H2O。同时,开发H2O的H2O.ai公司拥有 80多名员工,其中一半以上是开发人员。
但这些都是给投资者留下深刻印象的统计数据,而对于开发人员毫无意义。对于那些感觉已掌握所有所需机器学习库的R和Python开发人员而言,H2O所具有的主要优点是易用性和防止数据集过大而导致存储空间不足的有效扩展性。对于觉得已掌握SparkML的用户来说,H2O算法数量较少,但运算速度明显更快。另外H2O还有一个优点,就是智能默认值意味着代码更加紧凑且宜于阅读:直接利用一行语句就可以得到一个性能良好的最先进的深度学习模型。本书的目的之一是介绍如何调整模型,但正如在书中所见,有时会由于无法比默认模型更好而不得不放弃调节。
关于读者在基于一些假设条件的基础上,将本书控制在 1000页以内。首先假设读者已熟悉R或Python语言。由于不会用到高级语言特性,因此具备任何编程语言的能力都足以理解书中内容,但本书中的示例仅提供了R和Python这两种语言。由于熟悉pandas,Python用户可能更具优势,尤其是因为pandas会使得所有的数据科学更加容易。
另外,还假设有一些心理暗示:为重复保存每个示例两次:希望R用户能够理解Python示例中所发生的,而Python用户可以理解R示例。对于R用户来说,这些Python示例是一个好的开始(对于R用户也是如此)。
即使使用电子表格或SQL表,也需要具有一些数据处理的经验。在此,假设读者对机器学习和人工智能,及其在公共基础设施中越来越多的应用具有一些正确认识。也许读者阅读本书的目的是想实现部分功能,并确保这些转变是出于伦理道德,同时让所有人受益,不论种族、性别、国籍或信仰。如果的确如此,向您致敬。
另外,还假设读者了解一些统计知识。这并没什么可担心的,本书的书名中强调了实用性,尽量将机器学习算法的相关理论降低到只需了解如何进行调节(而不是能够从头开始实现)。若想了解更多知识,可以利用维基百科或搜索引擎。但至少应该了解模式中中位数的含义,知道什么是标准差和正态分布。
但更重要的是,希望读者能够了解统计存在误导,且机器学习可能会过拟合(https://en.wikipedia.org/wiki/Over.tting)。当提到 p=0.05对一个实验具有显著意义时,这意味着每进行 20次该实验,可能会有一次是错误的。体会显著的最明显时刻是在xkcd(https://xkcd.com/882/)上。
在谈到计时的某些时候,这是介绍“我的机器”的一个好机会。书中所用的是一个中端便携式计算机,有一些年份了,具有 8GB内存、四核、 8个超线程。但已足以运行书中的所有示例,实际上 4GB的系统内存就足够了。然而,对于某些网格搜索(在第 5章中介绍),“假设”不能在本机运行而在云平台启动集群(第 10章简单介绍了“聚类”概念)。这样做只是出于实用性考虑:并不想等待 24h后完成一个实验,然后再写出来。
目录:
译者序
原书前言
第 1章 安装和快速启动 \ 1
1.1 安装准备 \ 1
1.1.1 安装 R \ 1
1.1.2 安装 Python \ 2
1.1.3 隐私保护 \ 2
1.1.4 安装 Java \ 2
1.2 利用 R(CRAN)安装 H2O \ 3
1.3 利用 Python(pip)安装 H2O \ 4
1.4 第一个学习示例 \ 5
1.4.1 利用 Python进行训练和预测 \ 8
1.4.2 利用 R进行训练和预测 \ 10
1.4.3 性能与预测 \ 12
1.4.4 运气不佳 \ 13
1.5 Flow \ 13
1.5.1 数据 \ 14
1.5.2 模型 \ 16
1.5.3 预测 \ 17
1.5.4 Flow中的其他注意事项 \ 18
1.6 小结 \ 18
第2章 数据导入/数据导出\19
2.1 存储空间要求 \ 19
2.2 数据准备 \ 20
2.3 数据导入到 H2O \ 21
2.3.1 加载 csv文件 \ 21
2.3.2 加载其他格式文件 \ 23
2.3.3 从 R中直接加载 \ 23
2.3.4 从 Python中直接加载 \ 25
2.4 数据操作 \ 26
2.4.1 懒操作、命名和删除 \ 26
2.4.2 数据汇总 \ 27
2.4.3 列操作 \ 28
2.4.4 行聚合 \ 29
2.4.5 索引 \ 30
2.4.6 H2O中的数据拆分 \ 31
2.4.7 行和列 \ 35
2.5 数据从 H2O中导出 \ 38
2.5.1 导出数据帧 \ 38
2.5.2 POJO \ 39
2.5.3 模型文件 \ 40
2.5.4 保存所有模型 \ 40
2.6 小结 \ 41
第3章 数据集 \ 42
3.1 数据集:建筑节能 \ 42
3.1.1 设置和加载 \ 43
3.1.2 数据列 \ 44
3.1.3 拆分数据 \ 45
3.1.4 观察 \ 46
3.1.5 关于数据集 \ 50
3.2 数据集:手写体 \ 50
3.2.1 设置和加载 \ 51
3.2.2 观察 \ 52
3.2.3 帮助建模 \ 54
3.2.4 关于数据集 \ 55 5.4 建筑节能:默认的随机森林 \ 91
3.3 数据集:足球比分 \ 56
3.3.1 相关性 \ 59
3.3.2 缺失数据.更多列 \ 62
3.3.3 如何训练和测试? \ 63
3.3.4 设置和加载 \ 63
3.3.5 其他第三方 \ 64
3.3.6 缺失数据(再次)\ 67
3.3.7 设置和加载(再次)\ 67
3.3.8 关于数据集 \ 70
3.4 小结 \ 70
第 4章 常用模型参数 \ 71
4.1 支持测度 \ 71
4.1.1 回归指数 \ 72
4.1.2 分类指数 \ 72
4.1.3 二项式分类 \ 73
4.2 要素 \ 75
4.3 努力 \ 76
4.4 评分和验证 \ 76
4.5 提前终止 \ 77
4.6 检查点 \ 79
4.7 交叉验证(又名 k-folds)\ 81
4.8 数据加权 \ 82
4.9 抽样、归纳 \ 84
4.10 回归 \ 85
4.11 输出控制 \ 87
4.12 小结 \ 87
第5章 随机森林\88
5.1 决策树 \ 88
5.2 随机森林 \ 89
5.3 参数 \ 89 5.5 网格搜索 \ 93
5.5.1 笛卡尔 \ 94
5.5.2 随机离散 \ 96
5.5.3 高层策略 \ 98
5.6 建筑节能:改进的随机森林 \ 99
5.7 MNIST:默认的随机森林 \ 101
5.8 MNIST:改进的随机森林 \ 102
5.8.1 增强数据 \ 105
5.9 足球比赛:默认的随机森林 \ 106
5.10 足球比赛:改进的随机森林 \ 108
5.11 小结 \ 110
第 6章 梯度推进机 // 111
6.1 推进 // 111
6.2 好处、坏处和…神秘之处 // 112
6.3 参数 // 113
6.4 建筑节能:默认 GBM // 114
6.5 建筑节能:改进 GBM // 115
6.6 MNIST:默认 GBM // 119
6.7 MNIST:改进 GBM // 120
6.8 足球比赛:默认 GBM // 122
6.9 足球比赛:改进 GBM // 123
6.10 小结 // 125
第 7章 线性模型 // 126
7.1 GLM参数 // 126
7.2 建筑节能:默认 GLM // 130
7.3 建筑节能:改进 GLM // 132
7.4 MNIST:默认 GLM // 136
7.5 MNIST:改进 GLM // 137
7.6 足球比赛:默认 GLM // 139
7.7 足球比赛:改进 GLM // 141
7.8 小结 // 142
第 8章 深度学习(神经网络)// 143
8.1 什么是神经网络? // 143
8.1.1 数值与分类 // 145
8.1.2 神经网络层 // 146
8.1.3 激活函数 // 147
8.2 参数 // 148
8.2.1 深度学习正则化 // 148
8.2.2 深度学习评分 // 149
8.3 建筑节能:默认的深度学习 // 152
8.4 建筑节能:改进的深度学习 // 153
8.5 MNIST:默认的深度学习 // 157
8.6 MNIST:改进的深度学习 // 159
8.7 足球比赛:默认的深度学习 // 163
8.8 足球比赛:改进的深度学习 // 164
8.9 小结 // 168
8.10 附录:更多的深度学习参数 // 169
第 9章 无监督学习 // 171
9.1 k均值聚类 // 172
9.2 深度学习自动编码器 // 174
9.2.1 层叠自动编码器 // 177
9.3 主成分分析 // 178
9.4 GLRM // 179
9.5 缺失数据 // 180
9.5.1 GLRM // 183
9.5.2 失去 R // 183
9.6 小结 // 187
第 10章 其他内容 // 188
10.1 重要且需要分析的内容 // 188
10.2 安装最新版本的 H2O // 188
10.2.1 由源代码构建 // 189
10.3 命令行运行 // 189
10.4 聚类 // 189
10.4.1 EC2 // 190
10.4.2 其他云提供商 // 191
10.4.3 Hadoop // 191
10.5 Spark/Sparkling Water // 191
10.6 朴素贝叶斯 // 192
10.7 集成 // 192
10.7.1 层叠: h2o.ensemble // 193
10.7.2 分类集成 // 195
10.8 小结 // 195
第 11章 后记:一切运行良好! // 196
11.1 建筑节能结果 // 196
11.2 MNIST结果 // 197
11.3 足球比赛结果 // 199
11.4 究竟有多差? // 200
11.4.1 越多越好 // 201
11.4.2 仍渴望更多 // 202
11.4.3 困难排除 // 202
11.4.4 自动编码器 // 203
11.4.5 卷积和收缩 // 204
11.4.6 集成 // 205
11.4.7 这就是可能最差的情况. // 206
11.5 小结 // 206