新書推薦:
《
银行业架构网络BIAN(全球数字化时代金融服务业框架)(数字化转型与创新管理丛书)
》
售價:HK$
101.2
《
金托邦:江湖中的沉重正义
》
售價:HK$
62.1
《
易经今解:释疑·解惑·见微
》
售價:HK$
90.9
《
东欧史(全二册)-“中间地带”的困境
》
售價:HK$
227.7
《
虚拟资本:金融怎样挪用我们的未来
》
售價:HK$
79.4
《
刻意练习不生气
》
售價:HK$
40.3
《
大宋理财:青苗法与王安石的金融帝国(全彩插图本)
》
售價:HK$
112.7
《
安全感是内心长出的盔甲
》
售價:HK$
68.8
|
內容簡介: |
本书首先利用Pandas对美股秒级交易数据进行分析,利用Scikit-learn对股票变化方向进行预测,并在架构案例中,打造了一个以RabbitMQ为消息传导中枢的实时处理系统,利用Elasticsearch对数据进行实时可视化。
|
目錄:
|
Contents?目录
前 言
第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章 数据分析工具 Pandas23
3.1 颠覆 R 的 Pandas23
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-learn31
4.1 如何站在风口上?向Scikit-learn 学习31
4.1.1 传统的线下统计软件 R31
4.1.2 底层软件黑盒子 Weka32
4.1.3 跨界产品 Scikit-learn33
4.1.4 Scikit-learn的优势33
4.2 Scikit-learn 的安装34
4.3 Scikit-learn 的主要模块35
4.3.1 监督式、非监督式机器学习35
4.3.2 建模函数fit和predict36
4.3.3 数据预处理38
4.3.4 自动化建模预测 Pipeline39
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章 集群部署工具 Docker55
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 Compose64
6.5.1 Docker Compose 的安装64
6.5.2 Docker Compose 的基本操作64
6.5.3 利用 Docker Compose 创建网页计数器集群65
6.6 远端服务器配置工具Docker Machine68
6.6.1 Docker Machine 的安装68
6.6.2 安装 Oracle VirtualBox69
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章 实时消息队列和RabbitMQ74
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 PubSub 发布监听80
7.5.3 远程命令81
7.6 利用 Docker 快速部署RabbitMQ82
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
|
內容試閱:
|
Preface?前言机器学习从业人员的艰难选择作为机器学习从业人员,如果今天突然被公司或学校开除,你能养活自己吗?邻居老大妈买土鸡蛋不买神经网络模型,东门老大爷认识郭德纲不认识朴素贝叶斯,面容姣好的翠花只认房产证不认 Zookeeper。即使你身怀绝技,有着远大的抱负,机器学习应用难以变现也是事实。为了能维持生计,众多机器学习从业人员只能进入大公司、大组织。但限于流程和已有的体制,在这样的工作环境下,他们很难完全发挥自己的潜能。
太多的好朋友,在脱离体制和大公司的时候豪情万丈,吃散伙饭时和战友们慷慨激昂,唱着真心英雄,梦想着自己也有回到北京东二环开始指点江山的一天。可是第二天带着宿醉起床面对着电脑屏幕时,却不知道该怎么开始。没错,我们都有自己的想法,我们自己就是程序员,比那些在创业街上卖 PPT 的人厉害多了。可是在工业界,不管是初入职场的新人,还是久经沙场的老将,都需要在业余时间不停地刷题,练习LeetCode中的习题,以应对不时之需。这样的生存方式严重阻碍了知识经济的发展,更不要提为祖国健康工作五十年了。与大组织、巨无霸企业不同的是,自主创业往往需要开发人员全栈的技术能力。大公司里面的技术能手在独立创业的时候也不免会遇到下面这些很基本的问题:
服务器从哪里来?以前单位、导师手里有一套自主开发的大数据平台,现在自己单干了没法用,怎么办?以前用的机器学习软件包是某个牛人自己开发的独门武功,只在公司内部用,现在该用什么?模型训练出来了,又怎么部署?总算东拼西凑写好了一个流程,接下来如何实现数据可视化?总算有客户开始用了,怎么样才能对结果实时监控?这个时候你才会想起马云的那句话:离开公司了你什么都不是。还是回大公司吧,至少比较安稳总结起来,机器学习从业人员的难处有三点。
技能无法直接转化为经济效益:必须依靠大组织、公司,才能实现经济效益的转化。这必然要求从业人员服从诸多的条款和价值观,这对他们工作效率和积极性来说都是沉重的负担。
迭代速度受牵制:虽然开源社区拥有众多非常优秀的工具,但大公司、大组织往往都有众多历史遗留架构,这使得开发部署过程变得异常漫长。与此同时,从业人员也会觉得所学的知识将来无法为自己所用,因此感到空虚。
出成果压力大:高投入就需要有高回报。机器学习从业人员薪资非常高,因此公司对从业人员进行新架构、新项目开发的耐心往往也非常有限。就算是从公司利益出发,进行架构、代码的革新,从业人员往往也会担上不少风险。如果不能在短时间内实现架构,或者新训练的模型不能达到预期目标,从业人员的工作稳定性将会得不到保证。
老板、管理人员的困境机器学习从业人员有自己的困难,公司的老总、经理也有伤脑筋的事情。2015 年 KDNuggets 调查数据显示,工业界超过半数的数据科学家在一个职位上的工作时间一般都少于两年。另外美国旧金山湾区的机器学习科学家在一个职位上平均只会停留8个月。这么高的跳槽频率让众多雇主也提心吊胆。根据笔者的经验,机器学习从业人员,从入职到真正开始产生正现金流,至少需要 9 个月左右的时间。太短的工作年限对于很多雇主来说远远不足以收回成本。
有的公司财力雄厚,高薪聘请了拥有谷歌工作经验的斯坦福大学博士,但这名博士入职三个月,文章发表了四篇,会开了五场,可是机器学习模型拿到实际工作环境中的效果却不理想,无法上线。结果令人沮丧。
资金实力不太充裕的初创公司就更难了。本身财力有限,招人靠情怀来对冲。好不容易找到了志同道合的人,开口就问人家要 GPU 集群,而现成的机器学习框架中TensorFlow 太慢,PaddlePaddle 太差,往往有一些以技术为主打的初创公司,专心于核心软件开发,而速度太慢,结果还没开始上线产生效益,当时所在的初创公司就已经烧断了现金流。
另一方面,老板从来不敢对机器学习从业人员过分施压。因为若施压太大,再加上现在市场对机器学习专家的需求旺盛,机器学习员工都是一言不合就跳槽。施压太小,机器学习员工就会开始面向简历的开发模式,一会儿去欧洲开会,一会儿开源个深度学习框架,就是不上线真正能赚钱的产品,这又怎能不让人着急?总结起来,管理人员的难处有以下三点。
双重身份的矛盾:机器学习开发人员到底算科学家还是算程序员?这是一个管理者需要面对的根本性问题。若把机器学习开发人员看成科学家,就要做好所有投资都打水漂的心理准备,投资回报率可能非常低;若把机器学习开发人员看成程序员,就要给其足够的自由度和福利,并且做好开发人员冗余,对员工突然离职的情况做好准备。
利益冲突的矛盾:现在机器学习人员的流动性很高,公司需要出效益,而工作人员需要出好看的简历。在很多情况下,这两个需求是背道而驰的。本书后文会对各种机器学习架构进行综述,其中不乏员工为了充实简历而开发的政绩工程。通过对本书的学习,相信管理人员的眼睛也会擦亮不少。
和商业部门整合的矛盾:机器学习科学家往往醉心于开发最复杂最尖端的模型,以取得机器学习理论上的最佳效果。可是很多机器学习模型的可解释度并不好,无法让业务部门对模型进行可视化解读。虽然机器学习工具众多,但是能将机器学习模型和可视化系统整合起来的程序却非常少。本书所描述的架构和可视化部分会对这个问题进行解答。
总的来说,企业求生求利的动力意味着开发人员必须短平快地出结果;机器学习模型效果的不确定性意味着管理人员必须拥抱不确定性;机器学习从业人员的高流动性意味着公司和组织必须采取灵活的开发流程和架构。
不写寻常书,不走寻常路什么样的技术成长道路,才能让我们施展自己的才华,同时快乐地养活自己?什么样的职业发展模式,才能让我们真正掌握自己的命运,去改变世界,而不是为北京、上海、深圳高昂的房价发愁?什么样的架构设计,才能让我们的生活回到朝九晚五的正常模式,能够每天六点回家和家人吃晚餐,和心爱的人看星星看月亮?起初机械工业出版社华章公司的杨绣国编辑联系到作者之一彭河森的时候,他是很犹豫的。市场上现在已经有了很多优秀的机器学习著作,怎么还需要我们再写一本呢?为了验证我们的观点,我们去豆瓣等网站进行了简单的市场调查,以机器学习为关键词搜索了已有书评。
搜索的结果既是意料之中又让我们大为吃惊。意料之中的是现在市面上已经存在很多优秀的机器学习相关图书,对机器学习模型的支撑涵盖了从基本逻辑回归到最前沿的深度学习的所有内容。大为吃惊的则有如下两个方面。
读者胃口很挑:没错,说你呢。我们发现众多机器学习图书都被打上了太广、深度不够的标签。这让我们感觉到压力巨大,害怕我们的这本书也会打上类似的标签。
理论太多、应用太少:我们发现市面上的书籍大多都是以理论为主,再搭配相应的编程工具。对部署、系统架构设计、后期可视化等重要工作根本没有提及。而我们预计读者大多是在校学生,或者是初入职场的机器学习从业人员,他们这个时候最需要的大概不是天花乱坠的理论,而是能切切实实地实现机器学习模型功能的指导。
有了这样的认识之后,我们决定从应用和架构的角度着手,来写作本书,并设立了如下的目标。
1. 以机器学习全栈应用能力为目标如果明天你就要被微软开除,那么今天你希望学到些什么?我们在撰写这本书的时候一直以这样的精神来激励自己。微软每年7 月到 9 月都会有裁员措施,但这也在不停地提醒笔者要抓紧时间好好写书,贴近应用,这样才能在不幸被裁员的时候养活自己。这样的精神一直贯穿了全书:本书所有的章节都配备了实际使用的案例分析,我们的案例分析不只是针对当前章节所学知识的练习,也涉及实际应用中可能会遇到的大坑,以及相应的解决办法。
我们力图通过 Docker 等部署工具的介绍,帮助读者快速掌握机器学习模型的产业化进程。不管你是就职于大公司,还是自己创业,我们都希望本书的内容能够让你快速上线满意的机器学习系统,离你的梦想更近一点。
世界在改变,机器学习也在不停地改变。对于机器学习中的很多重要成员,如建模工具、分布式队列等,本书都会对其来龙去脉和发展趋势进行综述。希望通过这样的讨论,能够让读者建立起对机器学习发展局势的判断,在未来的成长中也能独占鳌头。
2. 抓住机器学习主干,远离学院派现今 Scikit-learn 等软件已经包含了大量的机器学习模块,其使用方法已经标准化,所以我们不准备在机器学习模型上耗费太多笔墨。例如,在 Scikit-learn 的线性模型模块 LinearRegression 中,训练模型会调用fit 函数,进行预测会调用predict 函数。与此同时,Scikit-learn 中的随机森林模块 RandomForest同样是调用以上两个函数进行模型的训练和预测的。接口的统一化帮助了开发人员进行模块化开发。如果出现了新的机器学习模型,则只需要替换一下模型训练模块即可。
另外鉴于现如今网上丰富的机器学习理论资源,我们认为现今的读者完全有能力对特定的机器学习模型进行自学。本书会以线性模型为例对 Scikit-learn 的使用进行讲解,有需要对其他机器学习模块进行学习的读者,也可以很容易地将线性模型模块替换成为其他的模块。
3. 能读的代码,能运行的例子好多技术类书籍我看着看着就晕了,代码根本没法读,我们向众多好友征询意见的时候收到了这样的反馈。为了增加本书案例的可读性,我们力求避免代码的大段堆砌。所有案例的代码模块都力求在 20 行以下。
好多书的例子都没办法编译,我们写这本书的时候也听到了不少朋友的吐槽。我们认为能正常运行起来的例子是良好学习体验的关键。为此,本书的所有例子都通过多次可用性测试,并且使用Docker运行,大大降低了重复利用的门槛。同时我们将源代码寄存在 Github 上面,随时进行更新排错,我们也欢迎读者在上面添加 Pull Request,完善新内容,与我们进行交流。
4. 实时股票交易、金融舆情分析实例数据有很多 IT 界的朋友经常在工作累了的时候说:实在不行我就转行去做金融了,但是行动起来去做金融的人却甚少。既然在机器学习从业人员的眼中金融行业就像乌托邦那般美妙,那么为什么不进去看一看自己是否合适呢?另外,也有一些具有金融背景的友人,他们急切地想要利用机器学习方法来实现自动化交易。每年都有无数高考状元、名校学子加入外资对冲基金,如果我们能够架设好一个实时交易投资的平台,没准人才就不会流失到华尔街去了,而能为国所用呢。
对此我们采用了美股交易秒级数据作为本书案例的数据。我们收集了 2015 年 8月所有标准普尔 500 指数成分股每秒的报价和成交量。这里的数据主要是以时间序列形式出现,我们将会尝试搭建实时机器学习平台,对这些数据进行存储、加工分析和可视化,并且对未来若干秒的走势进行预测。如果一切顺利,我们可以从中得到 Alpha(量化交易中的可以长期盈利的策略),实现盈利。
在后面的章节中,我们会从数据分析出发,由浅到深地利用以上数据进行建模,且在本书结尾时实现对金融数据预测判断的功能。
本书的学习方法重架构、重设计、重实战是本书撰写的指导思想。我们认为优秀的系统设计在于完备的思考和准备,因此本书对计算机编程和机器学习理论只有入门级的要求。
1.基础知识要求本书的两位笔者之中,彭河森是统计学出身,汪涵是应用数学出身。但最后都殊途同归地走上了机器学习应用的道路。对于计算机编程基础,本书的门槛为国内全日制大学本科非计算机专业理科第二年的水平。我们假设读者具有基本的 Python 编程能力,能在脚本执行和交互情况下运行 Python 程序。本书着重讲解架构设计,对面向对象编程、设计模式等课题没有任何要求。
对于机器学习理论基础,本书的门槛为国内全日制大学本科非计算机、统计、数学专业理科第二年的水平。本书假设读者具有基本的线性代数知识,对统计推断和机器学习模型有基本的了解。
2.学习环境配置本书假设读者采用了 Ubuntu 16.04 或Mac操作系统。新版 Windows10在本书写作之时刚刚开始支持 Linux Shell,并且具有了 Ubuntu 内核的支持,由于时间关系我们没有来得及验证,请读者谨慎试验。另外由于我们将在本书中大量使用 Docker,所以相关软件将会以 Docker 镜像的形式存在。我们将在相应章节(第6章)中介绍 Docker 及其环境工具的安装和配置。本书对其他系统软件的安装并没有要求。
每个章节的实例内容都可以在Github 官方网站上下载,地址为:https:github.comreal-time-machine-learning。我们将每一个章节的内容都分成一个独立的 Git 存档,每个章节之间的程序不会相互关联,以方便读者选择性地阅读和实践。
3. 写作分工本书大部分内容由彭河森、汪涵两人共同探讨、实践、总结并得出理论方向。汪涵完成了实战数据库综述章节(第8章);其他所有章节均由彭河森完成。
这里我们向本书写作过程中参与讨论和建议的唐磊、陆昊威、高斌、汤宇清、孙宝臣、Luhui Hu、徐易等专家及友人表示感谢。特别感谢严老在本书编写过程中两次收留作者在家。
|
|