《构建实时机器学习系统》一 导读

前  言

机器学习从业人员的艰难选择
作为机器学习从业人员,如果今天突然被公司或学校开除,你能养活自己吗?邻居老大妈买土鸡蛋不买神经网络模型,东门老大爷认识郭德纲不认识朴素贝叶斯,面容姣好的“翠花”只认房产证不认 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 官方网站上下载。我们将每一个章节的内容都分成一个独立的 Git 存档,每个章节之间的程序不会相互关联,以方便读者选择性地阅读和实践。
3. 写作分工

本书大部分内容由彭河森、汪涵两人共同探讨、实践、总结并得出理论方向。汪涵完成了实战数据库综述章节(第8章);其他所有章节均由彭河森完成。
这里我们向本书写作过程中参与讨论和建议的唐磊、陆昊威、高斌、汤宇清、孙宝臣、Luhui Hu、徐易等专家及友人表示感谢。特别感谢严老在本书编写过程中两次收留作者在家。

目  录

第1章 实时机器学习综述
1.1 什么是机器学习
1.2 机器学习发展的前世今生
1.2.1 历史上机器学习无法调和的难题
1.2.2 现代机器学习的新融合
1.3 机器学习领域分类
1.4 实时是个“万灵丹”
1.5 实时机器学习的分类
1.5.1 硬实时机器学习
1.5.2 软实时机器学习
1.5.3 批实时机器学习
1.6 实时应用对机器学习的要求
1.7 案例:Netflix在机器学习竞赛中学到的经验
1.7.1 Netflix 用户信息被逆向工程
1.7.2 Netflix 最终胜出者模型无法在生产环境中使用
1.8 实时机器学习模型的生存期

第2章 实时监督式机器学习
2.1 什么是监督式机器学习
2.1.1 “江湖门派”对预测模型的
不同看法
2.1.2 工业界的学术门派
2.1.3 实时机器学习实战的思路
2.2 怎样衡量监督式机器学习模型
2.2.1 统计量的优秀
2.2.2 应用业绩的优秀
2.3 实时线性分类器介绍
2.3.1 广义线性模型的定义
2.3.2 训练线性模型
2.3.3 冷启动问题

第3章 数据分析工具 Pandas
3.1 颠覆 R 的 Pandas
3.2 Pandas 的安装
3.3 利用 Pandas 分析实时股票报价数据
3.3.1 外部数据导入
3.3.2 数据分析基本操作
3.3.3 可视化操作
3.3.4 秒级收盘价变化率初探
3.4 数据分析的三个要点
3.4.1 不断验证假设
3.4.2 全面可视化,全面监控化

第4章 机器学习工具 Scikit-learn
4.1 如何站在风口上?向Scikit-learn 学习
4.1.1 传统的线下统计软件 R
4.1.2 底层软件黑盒子 Weka
4.1.3 跨界产品 Scikit-learn
4.1.4 Scikit-learn的优势
4.2 Scikit-learn 的安装
4.3 Scikit-learn 的主要模块
4.3.1 监督式、非监督式机器学习
4.3.2 建模函数fit和predict
4.3.3 数据预处理
4.3.4 自动化建模预测 Pipeline
4.4 利用 Scikit-learn 进行股票价格波动预测
4.4.1 数据导入和预处理
4.4.2 编写专有时间序列数据预处理模块
4.4.3 利用 Pipeline 进行建模
4.4.4 评价建模效果
4.4.5 引入成交量和高维交叉项进行建模
4.4.6 本书没有告诉你的

时间: 2025-01-21 04:54:08

《构建实时机器学习系统》一 导读的相关文章

《构建实时机器学习系统》一第2章 实时监督式机器学习 2.1 什么是监督式机器学习

第2章 实时监督式机器学习 2.1 什么是监督式机器学习 监督式机器学习旨在利用训练集数据,建立因变量和自变量之间的函数映射关系.如果用X 代表自变量,Y 代表因变量,f 代表映射函数,b 代表映射函数的参数,那么监督式机器学习的任务就是找到恰当的函数f 和参数 ,让下面的映射尽量符合要求: y=f (x;b,e) 这里e为实际情况中的随机扰动项. 下面就来具体看看在监督式机器学习中,因变量.自变量和预测函数的含义. (1)因变量 因变量是我们试图通过机器学习模型预测的变量,在实际应用中它往往无

《构建实时机器学习系统》一3.4 数据分析的三个要点

3.4 数据分析的三个要点 本书后面的章节中将会以前面发现的均值回归的性质为依托,设计实时机器学习交易策略进行交易.好多读者看到这里可能已经跃跃欲试,等不及要开始搭建服务器开始赚他一个亿了.但是在这之前我们需要总结一下在开展机器学习工作前期关于数据分析的几个原则. 3.4.1 不断验证假设 验证假设是否正确是机器学习前期数据分析最重要的目的.这里的假设包括但不限于:数据的格式.变量的数量.数据是否缺失.是否有极端值.采样是否均衡等.上面这些假设,如果稍有差错,就会让在后面得到的机器学习模型无用武

《构建实时机器学习系统》一2.2 怎样衡量监督式机器学习模型

2.2 怎样衡量监督式机器学习模型 本章前面对一个好的实时机器学习模型的衡量只提到了"优秀" "合适"这样的字眼,本节将会详细展开,讨论监督式实时机器学习模型的衡量标准. 在实际应用中,监督式实时机器学习效果的好坏可以分为统计量是否优秀和应用业绩是否优秀两个方面.下面将按照这两部分分别进行介绍. 在讨论技术细节之前,先进行一下符号的定义: 给定 n 组已知的自变量和因变量{(Yi, Xi)}ni=1作为测试数据集,对于任意i,我们通过自变量Xi和模型f(Xi; b)

《构建实时机器学习系统》一1.4 实时是个“万灵丹”

1.4 实时是个"万灵丹" 成长会解决一切问题.如果一个企业正在飞速成长,大家步调一致.同心齐力,那么内斗或管理混乱等问题将是难以出现的.而当企业的成长受到了制约,停滞不前的时候,往往就会出现众多非技术性原因造成的悲剧. 我们强调机器学习的实时性,就是为了保证应用机器学习的企业能够利用机器学习的资源大踏步向前,而不会被早早地制约,徘徊不前.机器学习就已经够有挑战性的了,为什么还要采用实时机器学习?根据我们的经验,实时机器学习上马应该越早越好,原因具体有以下三点. 1.实时架构稳定性可以

《构建实时机器学习系统》一1.5 实时机器学习的分类

1.5 实时机器学习的分类 按照实际应用中采用的方式不同,实时机器学习可以分为硬实时.软实时和批实时三种模式,下面将分别进行介绍. 1.5.1 硬实时机器学习 硬实时的定义是:响应系统在接收到请求之后,能够马上对请求进行响应反馈,做出处理.硬实时机器学习的主要应用场景是网页浏览.在线游戏.高频交易等对时效性要求非常高的领域.在这些领域中,我们往往需要将相应延迟控制在若干毫秒以下.对于高频交易等场景,更是有不少计算机软件.硬件专家,开发出了各种专有模块以在更短的时间内完成交易,获得超额利润. 在本

《构建实时机器学习系统》一1.8 实时机器学习模型的生存期

1.8 实时机器学习模型的生存期 进行实时机器学习开发必须考虑生存期.生存期是指一个系统从提出.设计.开发. 测试到部署运用.维护.更新升级或退役的整个过程.若在生存期设计上出现了数据,那么在后面的使用中就会出现各种各样的瓶颈阻碍应用产生价值. 从软件工程的角度上讲,开发实时机器学习也遵从构思.分析.设计.实现和维护五个步骤,这五个步骤可能会循环往复,随着业务的发展进行多次迭代.实时机器学习模型的应用由于其技术的特殊性,也具有自己的小型生存期,其中包括数据收集.数据分析.离线手工建模评测.上线自

《构建实时机器学习系统》一1.6 实时应用对机器学习的要求

1.6 实时应用对机器学习的要求 现今每年都会发表成千上万的机器学习相关的论文,其中不乏表现突出的方法论,但是并不是所有的机器学习模型在实际应用中都适用.实时机器学习的应用主要有以下几个方面的要求. 1.模型可扩展性 模型可扩展性需要整个机器学习应用的各个部分均可以轻易地根据实际需要进行扩展.这里的扩展可能是增加新的预测变量,也可能是在新的市场. 人群和用户界面中进行使用,还有可能是加入新的架构部件,进行可视化等操作. 2.模型运用低延迟性 低延迟性是实时机器学习应用区别于其他机器学习应用的核心

《构建实时机器学习系统》一1.7 案例:Netflix在机器学习竞赛中学到的经验

1.7 案例:Netflix在机器学习竞赛中学到的经验 美国领先的付费视频公司 Netflix 在机器学习.系统推荐方面都做出了卓越的贡献, 早在 2007 年,Netflix 就率先提出了百万美元大奖,奖励在 Netflix Prize 竞赛中优胜的队伍.Netflix Prize通过为期三年的竞赛,积累了机器学习宝贵的第一手资料,成为了机器学习中的经典案例,这里我们介绍以下两个方面. 1.7.1 Netflix 用户信息被逆向工程 Netflix Prize进行影片推荐预测时,使用的数据包括

《构建实时机器学习系统》一3.3 利用 Pandas 分析实时股票报价数据

3.3 利用 Pandas 分析实时股票报价数据 熟悉一项软件的最好方法就是通过示例来亲自使用它.这里将会通过分析苹果公司 2015 年 8 月 3 日秒级股票价格的数据来熟悉 Pandas 的用法.建议通过Python 笔记本或交互式窗口的方法来进行下面的操作. 首先,需要导入相关的模块,在导入Pandas模块的同时,我们还用到了Datetime模块.Datetime模块的主要功能是对时间.日期等数据进行处理,导入命令如下: import pandas as pd from datetime