产品特色
编辑推荐
以全栈机器学习应用为目标
通过介绍Docker等部署工具,帮助读者加速掌握机器学习模型的产业化进程。不管你是就职于大公司,还是自己创业,希望本书的内容能够让你快速上线满意的机器学习系统,离梦想更近一点。
抓住机器学习主干,远离学院派
世界在变,机器学习也在不停地变。对于机器学习中的很多重要成员,如建模工具、分布式队列等,本书都会对其来龙去脉和发展趋势进行综述。希望通过这样的讨论,能够让读者对机器学习的发展趋势有自己的判断,在未来的成长中也能独占鳌头。
能读的代码,能跑的例子
本书力求避免代码的大段堆砌。所有案例代码都力求在 20 行以内,所有例子都通过多次可用性测试。同时我们也将源代码寄存在 Github 上面,随时进行更新排错。
实时股票交易实例数据
采用美股交易秒级数据作为案例数据,搭建实时机器学习平台,对数据进行存储、加工分析和可视化,并且对数据未来若干秒的走势进行预测。
内容简介
本书是国内少有的从系统构架角度介绍机器学习应用的图书,总结了笔者多年来在Google、微软工作中积累的精华。书中内容可以从工具、理论和案例三条线路来概括:
工具方面,除了数据分析工具Pandas、机器学习工具Scikit Learn和Docker以外,还介绍了RabbitMQ、Elasticsearch,以及MySQL、Cassandra数据库等。
理论方面,不仅介绍了监督式机器学习基础、衡量和评价方法,机器学习的常见构架,还在本书末尾对机器学习构架的设计模式进行了总结,这样的总结也属国内外业界首创。
案例方面,采用美股交易秒级数据作为案例数据,利用Pandas对秒级交易数据进行分析,利用Scikit Learn对股票变化方向进行预测,还打造了一个以RabbitMQ为消息传导中枢的实时处理系统。
作者简介
彭河森,资深机器学习科学家,曾在Google、Amaz*n、微软等公司从事一线机器学习构架和开发工作,参与了Google实时数据警报、Amazo*产品广告自动化优化、微软必应广告等多项海量数据、延时要求苛刻的机器学习应用工作。也参与Scikit-learn、Airflow、R等多项开源项目。对机器学习项目的生存期管理、架构设计、软件开发以及应用关键有着丰富的经验。
汪涵,资深机器学习开发者,曾是Amaz*n、微软、Quantlab、晨星等公司一线机器学习开发人员,参与了Amazo*AB检验服务、微软必应搜索问答系统等多项关键大数据处理和机器学习应用的构架和开发工作。对机器学习、自然语言处理有着深刻的体会。
目录
前 言
第1部分 实时机器学习方法论
第1章 实时机器学习综述 2
1.1 什么是机器学习 2
1.2 机器学习发展的前世今生 3
1.2.1 历史上机器学习无法调和的难题 3
1.2.2 现代机器学习的新融合 4
1.3 机器学习领域分类 5
1.4 实时是个“万灵丹” 6
1.5 实时机器学习的分类 7
1.5.1 硬实时机器学习 7
1.5.2 软实时机器学习 7
1.5.3 批实时机器学习 8
1.6 实时应用对机器学习的要求 8
1.7 案例:Netflix在机器学习竞赛中学到的经验 9
1.7.1 Netflix 用户信息被逆向工程 9
1.7.2 Netflix 最终胜出者模型无法在生产环境中使用 9
1.8 实时机器学习模型的生存期 10
第2章 实时监督式机器学习 12
2.1 什么是监督式机器学习 12
2.1.1 “江湖门派”对预测模型的
不同看法 13
2.1.2 工业界的学术门派 14
2.1.3 实时机器学习实战的思路 15
2.2 怎样衡量监督式机器学习模型 16
2.2.1 统计量的优秀 16
2.2.2 应用业绩的优秀 20
2.3 实时线性分类器介绍 20
2.3.1 广义线性模型的定义 20
2.3.2 训练线性模型 21
2.3.3 冷启动问题 22
第3章 数据分析工具 Pandas 23
3.1 颠覆 R 的 Pandas 23
3.2 Pandas 的安装 24
3.3 利用 Pandas 分析实时股票报价数据 24
3.3.1 外部数据导入 25
3.3.2 数据分析基本操作 25
3.3.3 可视化操作 26
3.3.4 秒级收盘价变化率初探 28
3.4 数据分析的三个要点 30
3.4.1 不断验证假设 30
3.4.2 全面可视化,全面监控化 30
第4章 机器学习工具 Scikit-learn 31
4.1 如何站在风口上?向Scikit-learn 学习 31
4.1.1 传统的线下统计软件 R 31
4.1.2 底层软件黑盒子 Weka 32
4.1.3 跨界产品 Scikit-learn 33
4.1.4 Scikit-learn的优势 33
4.2 Scikit-learn 的安装 34
4.3 Scikit-learn 的主要模块 35
4.3.1 监督式、非监督式机器学习 35
4.3.2 建模函数fit和predict 36
4.3.3 数据预处理 38
4.3.4 自动化建模预测 Pipeline 39
4.4 利用 Scikit-learn 进行股票价格波动预测 40
4.4.1 数据导入和预处理 41
4.4.2 编写专有时间序列数据预处理模块 41
4.4.3 利用 Pipeline 进行建模 43
4.4.4 评价建模效果 43
4.4.5 引入成交量和高维交叉项进行建模 44
4.4.6 本书没有告诉你的 45
第2部分 实时机器学习架构
第5章 实时机器学习架构设计 48
5.1 设计实时机器学习架构的
四个要点 48
5.2 Lambda 架构和主要成员 49
5.2.1 实时响应层 49
5.2.2 快速处理层 50
5.2.3 批处理层 50
5.3 常用的实时机器学习架构 50
5.3.1 瀑布流架构 50
5.3.2 并行响应架构 51
5.3.3 实时更新模型混合架构 52
5.4 小结 53
第6章 集群部署工具 Docker 55
6.1 Docker 的前世今生 55
6.2 容器虚拟机的基本组成部分 56
6.3 Docker 引擎命令行工具 57
6.3.1 Docker 引擎的安装 57
6.3.2 Docker 引擎命令行的基本操作 58
6.4 通过 Dockerfile 配置容器虚拟机 61
6.4.1 利用 Dockerfile 配置基本容器虚拟机 62
6.4.2 利用 Dockerfile 进行虚拟机和宿主机之间的文件传输 62
6.5 服务器集群配置工具Docker Compose 64
6.5.1 Docker Compose 的安装 64
6.5.2 Docker Compose 的基本操作 64
6.5.3 利用 Docker Compose 创建网页计数器集群 65
6.6 远端服务器配置工具Docker Machine 68
6.6.1 Docker Machine 的安装 68
6.6.2 安装 Oracle VirtualBox 69
6.6.3 创建和管理 VirtualBox中的虚拟机 69
6.6.4 在 Docker Machine 和 VirtualBox的环境中运行集群 70
6.6.5 利用 Docker Machine 在 Digital Ocean 上配置运行集群 71
6.7 其他有潜力的 Docker 工具 73
第7章 实时消息队列和RabbitMQ 74
7.1 实时消息队列 74
7.2 AMQP 和 RabbitMQ 简介 76
7.3 RabbitMQ的主要构成部分 76
7.4 常用交换中心模式 78
7.4.1 直连结构 78
7.4.2 扇形结构 78
7.4.3 话题结构 79
7.4.4 报头结构 79
7.5 消息传导设计模式 79
7.5.1 任务队列 80
7.5.2 Pub/Sub 发布/监听 80
7.5.3 远程命令 81
7.6 利用 Docker 快速部署RabbitMQ 82
7.7 利用 RabbitMQ 开发队列服务 85
7.7.1 准备案例材料 86
7.7.2 实时报价存储服务 86
7.7.3 实时走势预测服务 89
7.7.4 整合运行实验 93
7.7.5 总结和改进 95
第8章 实战数据库综述 98
8.1 SQL 与 NoSQL,主流数据库分类 98
8.1.1 关系型数据库 99
8.1.2 非关系型数据库 NoSQL 99
8.2 数据库的性能 100
8.2.1 耐分割 100
8.2.2 一致性 101
8.2.3 可用性 101
8.2.4 CAP 定理 101
8.3 SQL和NoSQL对比 102
8.3.1 数据存储、读取方式 102
8.3.2 数据库的扩展方式 103
8.3.3 性能比较 103
8.4 数据库的发展趋势 103
8.4.1 不同数据库之间自动化同步更为方便 103
8.4.2 云数据库的兴起 104
8.4.3 底层和应用层多层化 104
8.5 MySQL 简介 105
8.6 Cassandra简介 105
8.6.1 Cassandra交互方式简介 105
8.6.2 利用Docker安装Cassandra 106
8.6.3 使用Cassandra存储数据 106
第9章 实时数据监控 ELK 集群 107
9.1 Elasticsearch、LogStash和Kibana 的前世今生 107
9.1.1 Elasticsearch 的平凡起家 108
9.1.2 LogStash 卑微的起源 108
9.1.3 Kibana 惊艳登场 109
9.1.4 ELK 协同作战 109
9.2 Elasticsearch 基本架构 109
9.2.1 文档 110
9.2.2 索引和文档类型 111
9.2.3 分片和冗余 112
9.2.4 Elasticsearch 和数据库进行比较 113
9.3 Elasticsearch 快速入门 113
9.3.1 用 Docker 运行 Elasticsearch 容器虚拟机 113
9.3.2 创建存储文档、文档类型和索引 114
9.3.3 搜索文档 117
9.3.4 对偶搜索 120
9.4 Kibana 快速入门 124
9.4.1 利用 Docker 搭建ELK 集群 125
9.4.2 配置索引格式 127
9.4.3 交互式搜索 128
9.4.4 可视化操作 129
9.4.5 实时检测面板 132
第10章 机器学习系统设计模式 134
10.1 设计模式的前世今生 134
10.1.1 单机设计模式逐渐式微 134
10.1.2 微服务取代设计模式的示例 135
10.1.3 微服务设计模式的兴起 137
10.2 读:高速键值模式 137
10.2.1 问题场景 137
10.2.2 解决方案 138
10.2.3 其他使用场景 139
10.3 读:缓存高速查询模式 139
10.3.1 问题场景 139
10.3.2 解决方案 139
10.3.3 适用场景 141
10.4 更新:异步数据库更新模式 141
10.4.1 问题场景 141
10.4.2 解决方案 141
10.4.3 使用场景案例 142
10.5 更新:请求重定向模式 144
10.5.1 问题场景 144
10.5.2 解决方案 144
10.5.3 更新流程 145
10.5.4 使用场景案例 146
10.6 处理:硬实时并行模式 146
10.6.1 问题场景 146
10.6.2 解决方案 147
10.6.3 使用场景案例 147
10.7 处理:分布式任务队列模式 148
10.7.1 问题场景 148
10.7.2 解决方案 149
10.7.3 Storm 作为分布式任务队列 150
10.7.4 适用场景 151
10.7.5 结构的演进 152
10.8 处理:批实时处理模式 152
10.8.1 问题场景 152
10.8.2 解决方案 152
10.8.3 适用场景 153
第3部分 未来展望
第11章 Serverless 架构 156
11.1 Serverless 架构的前世今生 156
11.2 Serverless 架构对实时
机器学习的影响 157
第12章 深度学习的风口 159
12.1 深度学习的前世今生 159
12.2 深度学习的难点 161
12.3 如何选择深度学习工具 161
12.3.1 与现有编程平台、技能整合的难易程度 162
12.3.2 此平台除做深度学习之外,还能做什么 163
12.3.3 深度学习平台的成熟程度 164
12.4 未来发展方向 165
前言/序言
机器学习从业人员的艰难选择
作为机器学习从业人员,如果今天突然被公司或学校开除,你能养活自己吗?邻居老大妈买土鸡蛋不买神经网络模型,东门老大爷认识郭德纲不认识朴素贝叶斯,面容姣好的“翠花”只认房产证不认 Zookeeper。即使你身怀绝技,有着远大的抱负,机器学习应用难以变现也是事实。为了能维持生计,众多机器学习从业人员只能进入大公司、大组织。但限于流程和已有的体制,在这样的工作环境下,他们很难完全发挥自己的潜能。
太多的好朋友,在脱离体制和大公司的时候豪情万丈,吃散伙饭时和战友们慷慨激昂,唱着真心英雄,梦想着自己也有回到北京东二环开始指点江山的一天。可是第二天带着宿醉起床面对着电脑屏幕时,却不知道该怎么开始。没错,我们都有自己的想法,我们自己就是程序员,比那些在创业街上卖 PPT 的人“厉害”多了。可是在工业界,不管是初入职场的新人,还是久经沙场的老将,都需要在业余时间不停地刷题,练习“LeetCode”中的习题,以应对不时之需。这样的生存方式严重阻碍了知识经济的发展,更不要提为祖国健康工作五十年了。与大组织、巨无霸企业不同的是,自主创业往往需要开发人员全栈的技术能力。大公司里面的技术能手在独立创业的时候也不免会遇到下面这些很基本的问题:
服务器从哪里来?
以前单位、导师手里有一套自主开发的大数据平台,现在自己单干了没法用,怎么办?
以前用的机器学习软件包是某个“牛人”自己开发的“独门武功”,只在公司内部用,现在该用什么?
模型训练出来了,又怎么部署?
总算东拼西凑写好了一个流程,接下来如何实现数据可视化?
总算有客户开始用了,怎么样才能对结果实时监控?
这个时候你才会想起马云的那句话:“离开公司了你什么都不是”。还是回大公司吧,至少比较安稳……
总结起来,机器学习从业人员的难处有三点。
技能无法直接转化为经济效益:必须依靠大组织、公司,才能实现经济效益的转化。这必然要求从业人员服从诸多的条款和价值观,这对他们工作效率和积极性来说都是沉重的负担。
迭代速度受牵制:虽然开源社区拥有众多非常优秀的工具,但大公司、大组织往往都有众多历史遗留架构,这使得开发部署过程变得异常漫长。与此同时,从业人员也会觉得所学的知识将来无法为自己所用,因此感到空虚。
出成果压力大:高投入就需要有高回报。机器学习从业人员薪资非常高,因此公司对从业人员进行新架构、新项目开发的耐心往往也非常有限。就算是从公司利益出发,进行架构、代码的革新,从业人员往往也会担上不少风险。如果不能在短时间内实现架构,或者新训练的模型不能达到预期目标,从业人员的工作稳定性将会得不到保证。
老板、管理人员的困境
机器学习从业人员有自己的困难,公司的老总、经理也有伤脑筋的事情。2015 年 KDNuggets 调查数据显示,工业界超过半数的数据科学家在一个职位上的工作时间一般都少于两年。另外美国旧金山湾区的机器学习科学家在一个职位上平均只会停留8个月。这么高的跳槽频率让众多雇主也提心吊胆。根据笔者的经验,机器学习从业人员,从入职到真正开始产生正现金流,至少需要 9 个月左右的时间。太短的工作年限对于很多雇主来说远远不足以收回成本。
有的公司财力雄厚,高薪聘请了拥有谷歌工作经验的斯坦福大学博士,但这名博士入职三个月,文章发表了四篇,会开了五场,可是机器学习模型拿到实际工作环境中的效果却不理想,无法上线。结果令人沮丧。
资金实力不太充裕的初创公司就更难了。本身财力有限,招人靠情怀来对冲。好不容易找到了志同道合的人,开口就问人家要 GPU 集群,而现成的机器学习框架中TensorFlow 太慢,PaddlePaddle 太差,往往有一些以技术为主打的初创公司,专心于核心软件开发,而速度太慢,结果还没开始上线产生效益,当时所在的初创公司就已经烧断了现金流。
另一方面,老板从来不敢对机器学习从业人员过分施压。因为若施压太大,再加上现在市场对机器学习专家的需求旺盛,机器学习员工都是一言不合就跳槽。施压太小,机器学习员工就会开始面向简历的开发模式,一会儿去欧洲开会,一会儿开源个深度学习框架,就是不上线真正能赚钱的产品,这又怎能不让人着急?
总结起来,管理人员的难处有以下三点。
双重身份的矛盾:机器学习开发人员到底算科学家还是算程序员?这是一个管理者需要面对的根本性问题。若把机器学习开发人员看成科学家,就要做好所有投资都打水漂的心理准备,投资回报率可能非常低;若把机器学习开发人员看成程序员,就要给其足够的自由度和福利,并且做好开发人员冗余,对员工突然离职的情况做好准备。
利益冲突的矛盾:现在机器学习人员的流动性很高,公司需要出效益,而工作人员需要出好看的简历。在很多情况下,这两个需求是背道而驰的。本书后文会对各种机器学习架构进行综述,其中不乏员工为了充实简历而开发的“政绩工程”。通过对本书的学习,相信管理人员的眼睛也会擦亮不少。
和商业部门整合的矛盾:机器学习科学家往往醉心于开发最复杂最
构建实时机器学习系统 epub pdf mobi txt 电子书 下载 2024
构建实时机器学习系统 下载 epub mobi pdf txt 电子书 2024