《构建实时机器学习系统》_sample


实 时金融交 易 数据案例 Sci kit-lea 「 n Elasticsea 「 ch RabbitMQ Docke 「 华章科技 • 前 Amazon 、 微软 、 Google 资深机器学习专家倾力打道,集真 十 多军机器学习第 一 线 应 用的精华 • 国 内少高的以系统架构为主线的机器学习实战图书 构建立时 机器学习系统 彭河森 汪涵 。 着. · , . . , ·. . f再飞 机械工业出版社 "a:f C Q! na Machi ne Press -· .. ‘ 本书是国内少有的从系统架向角 度介绍机器学习应用的图书,总结了笔 者多年来在 Google 、 Amazon 、微 软工作中积累的精华。书中内窑可以从 工具 、 理论和案例三条线路来概括: 工具方面, 介绍了机器学习和数 据分析工具 Pandas 和 Sci kit-learn, 还介绍了机器学习系统工具 Dock 町、 RabbitMQ 、 Elasticsea 「 ch 、 MySQL 、 Cassand 「 a 等 。 理论方面, 不仅介绍了监督式机器 学习基础、衡量和评价方法,机器学习 的常见架构,还在本书末尾对机器学习 架幅的设计模式进行了总结,这样的总 结也属国内外业界首创。 案例方面, 采用美股交易秒级数据 作为案例数据,利用 Pandas 对秒级交 易数据进行分析,利用 Sci kit-learn 对 股票变化万向进行预测,还打造了一个 以 RabbitMQ 为消息传导中枢的实时处 理系统 。 l、 构建实时 机器学习系统 彭河森汪涵 。 著 (;飞机械工业出版社 "!:If China Machine Press 、 、‘民 图书在版编目( CIP )数据 构建实时机器学习系统/彭河森,汪涵着.一北京:机械工业出版社, 2017. 8 ISBN 978-7-111-57557-3 I. 构… II. ①彭… ②汪… III. 机器学习-系统设计 IV. TP181 中国版本图书馆 CIP 数据核字( 2017 )第 183687 号 构建实时机器学习系统 出版发行:机械工业出版社(北京市西城区百万庄大街 22 号邮政编码: 100037) 责任编辑:张梦玲 杨绣国 责任校对: 李秋荣 印 刷:北京市荣盛彩色印刷有限公 司 版 次: 2017 年 8 月第 1 版第 1 次印刷 开本: 186mm × 240mm 1/16 书号: ISBN 978-7-111-57557-3 凡购本书,如有缺页、倒页 、 脱页,由本社发行 部调换 印张: 11.25 定价: 59.00 元 客 ijli{ 热线:( 010) 88379426 88361066 投稿热线:( 010) 88379604 购书热线:( 010) 68326294 88379649 68 995259 读者信箱: hz it @hz b ook.com 版权所有·侵权必究 封底无防伪标均为盗版 本书法律顾问:北京大成律师事务所韩光/邹晓东 7马 p卢'1~C 前言 机器学习从业人员的艰难选择 作为机器学习从业人员,如果今天突然被公司或学校开除,你能养活自己吗?邻居老大 妈买土鸡蛋不买 神经网络模型,东门老大爷认识郭德纲不认识朴素贝叶斯,面容妓好的“翠 花”只 认房产证不认 Zoo keeper 。 即使你身’怀绝技,有着远大的抱负,机器学习应用难以变现 也是事实 。 为了能维持生计,众多机器学习从业人员只能进入大公司、大组织 。 但限于流程 和已有 的体制,在这样的 工 作环境下,他们很难完全发挥自己的潜能 。 太多的好朋友,在脱离体制和大公司的时候豪情万丈,吃散伙饭时和战友们慷慨激昂, 唱着真 心英雄,梦想着自己也有回到北京东二环开始指点江山的 一 天 。 可是第二天带着宿醉 起床面对着电脑屏幕时,却不知道该怎么开始 。 没错 , 我们都有自己的想法,我们自己就是 程序员, 比那些在创业街上卖 PPT 的人“厉害”多了 。 可是在工业界,不管是初人职场的新 人,还是久经沙场的老将,都需要在业余时间不停地刷题,练习“ Lee t Co d e ” e 中的习题,以 应 对不时之需 。 这样的生存方式严重阻碍了知识经济的发展,更不要提为祖国健康工作五十 年了。 与大组织 、巨无霸 企业不同的是,自主创业往 往需 要开发人员全梭的技术能力 。 大公 司里面 的技术能手在独立创业的时候也不免会遇到下面这些很基本的问题 : 0 服务器从哪里来 ? 口以前单位 、 导师手里有 一套自 主开发的大数据平台,现在自己单干了没法用,怎么办? 口以前用的机器学习软件包是某个“牛人”自己开发的“独门武功”,只在公司内部用, 现在该用什么 ? θ 北美众多巨元霸型互联网公司的面试内容类似于科举八股文,所用题目被众多从业人员总结成为 一 个名为 LeetCode 的网站, 是 丽试求职人员的必看网站 。 飞比 IV 、、 口模型训练出来了,又怎么部署? q 总算东拼西凑写好了一个流程,接下来如何实现数据可视化? 口总算有客户开始用了,怎么样才能对结果实时监控? 这个时候你才会想起马云的那句话:“离开公司了你什么都不是” 。 还是回大公司吧,至 少比较安稳…·.. 总结起来,机器学习从业人员的难处有 三 点 。 口技能无法直接转化为经济效益:必须依靠大组织、公司,才能实现经济效益的转化 。 这必然要求从业人员服从诸多的条款和价值观,这对他们工作效率和积极性来说都 是 沉重的负担 。 q 迭代速度受牵制:虽然开源社区拥有众多非常优秀的工具,但大公司 、 大组织往 往都 有众多历史遗留架构,这使得开发部署过程变得异常漫长 。 与此同时,从业人员也 会 觉得所学的知识将来无法为自己所用,因此感到空虚 。 q 出成果压力大:高投入就 需要有高回报 。 机器学习从业人员薪资非常高,因此公司 对 从业人员进行新架构、新项目开发的耐心往往也非常有限 。 就算是从公司利益出 发, 进行架构、代码的革新,从业人员往往也会担上不少风险 。 如果不能在短时间内 实现 架构,或者新训练的模型不能达到预期目标,从业人员的工作稳定性将会得不到保证 。 老板、管理人员的困境 机器学习从业人员有自己的困难,公司的老总、经理也有伤脑筋的事情 。 2015 年 KDNuggets 调查数据显示, 工业界超过半数的数据科学家在一个职位上的工作时间一般都少 于两年 。 另外美国旧金山湾区的机器学习科学家在一个职位上平均只会停留 8 个月 。 这么高 的跳槽频率让众多雇主也提心吊胆 。 根据笔者的经验,机器学习从业人员,从入职到真正 开 始产生正现金流,至少需要 9 个月左右的时间 。 太短的工作年限对于很多雇主来说远远 不足 以收回戚本 。 有的公司财力雄厚,高薪聘请了拥有谷歌工作经验的斯坦福大学博士,但这名博士人职 三 个月,文章发表了四篇,会开了五场,可是机器学习模型拿到实际工作环境中的效果却 不 理想,无法上线 。 结果令人沮丧 。 资金实力不太充裕的初 创公司就更难了 。 本身财力有限,招人靠情怀来对冲 。 好不容 易 找到了志同道合的人,开口就问人家要 GPU 集群,而现成的机器学习框架中 Tensor Flow 太 慢, PaddlePaddle 太差,往往有一些以技术为主打的初创公司,专心于核心软件开发,而速 度 v 太慢,结果还没开始上线产生效益,当时所在的初 创公司就已经烧断了现金流 。 另一方面,老板从来不敢对机器学习从业人员过分施压。因为若施压太大,再加上现在 市场对机器学习专家的需求旺盛,机器学习员工 都是一言不合就跳槽 。 施压太小,机器学习 员工就会开始面向简历的开发模式,一会 儿去欧洲开会,一会儿开源个深度学习框架,就是 不上 线真正能赚钱的产品,这又怎能不让人着急? 总结起来,管理人员的难处有以下三点 。 口双重身份的矛盾:机器学习开发人员到底算科学家还是算程序员?这是 一 个管理者需 要面对的根本性问题 。 若把机器学习开发人员看成科学家,就要做好所有投资都打水 漂的心理准备,投资回报率可能非常低;若把机器学习开发人员看成程序员,就要给 其足够的自由度和福利,并且做好开发人员冗余,对员工突然离职的情况做好准备 。 Q 利益冲突的矛盾:现在机器学习人员的流动性很高,公司需要出效益,而工作人员需 要出好看的简历 。 在很多情况下,这两个需求是背道而驰的 。 本书后文会对各种机器 学习架构进行综述,其中不乏员工为了充实简历而开发的“政绩工程” 。 通过对本书的 学习,相信管理人员的眼睛也会擦亮不少。 口和商业部门整合的矛盾:机器学习科学家往往醉心于开发最复杂最尖端的模型,以取 得机器学习理论上的最佳效果 。 可是很多机器学习模型的可解释度并不好,无法让业 务部门对模型进行可视化解读 。 虽然机器学习工具众多,但是能将机器学习模型和可 视化系统整合起来的程序却非常少 。 本书所描述的架构和可视化部分会对这个问题进 行解答 。 总的来说,企业求生求利的动力意味着开发人员必须短平快地出结果;机器学习模型效 果的不确定’性意味着管理人员必须拥抱不确定性 ;机器学习从业人员的高流动性意味着公司 和组织必须采取灵活的开发流程和架构。 不写寻常书,不走寻常路 什么样的技术成长道路,才能让我们施展自己的才华,同时快乐地养活自己?什么样的 职业发展模式,才能让我们真正掌握自己的命运 ,去改变世界,而不是为北京 、上海、深 圳 高昂的房价发愁?什么样的架构设计,才能让我们的生活回到朝九晚五的正常模式,能够每 天六点 回家和家人吃晚餐,和心爱的人看星星看月亮? 起初机械工业出版社华章公司的杨绣国编辑联系到作者之一彭河森的时候,他是很犹豫 的 。 市场上现在已经有了很多优秀的机器学习著作,怎么还需要我们再写一本呢?为了验证我 、 马 ‘民 VI 们的观点,我们去豆瓣等网站进行了简单的市场调查,以“机器学习”为关键词搜索 了已有 书评 。 搜索的结果既是意料之中又让我们大为吃惊 。 意料之中的是现在市面上已经存在很 多 优 秀的机器学习相关图书,对机器学习模型的支撑涵盖了从基本逻辑回归到最前沿的深度 学习 的所有内容 。 大为吃惊的则有如下两个方面 。 口读者胃口很挑 : 没错,说你呢 。 我们发现众多机器学习图书都被打上了“太广 、深度 不够”的标签 。 这让我们感觉到压力巨大,害怕我们的这本书也会打上类似的标签 。 口理论太多、应用太少 : 我们发现市面上的书籍大多都是以理论为主,再搭配相应的 编 程工具 。 对部署、系统架构设计、后期可视化等重要工作根本没有提及 。 而我们 预计 读者大多是在校学生,或者是初入职场的机器学习从业人员,他们这个时候最需 要的 大概不是天花乱坠的理论,而是能切切实实地实现机器学习模型功能的指导 。 有了这样的认识之后,我们决定从应用和架构的角度着手,来写作本书,并设立 了 如 下 的目标 。 1 . 以机器学习全钱应用能力为目 标 “如果明天你就要被微软开除,那么今天你希望学到些什么?”我们在撰写这本书的 时 候一直以这样的精神来激励自己 。 微软每年 7 月到 9 月都会有裁员措施,但这也在不停地 提 醒笔者要抓紧时间好好写书,贴近应用,这样才能在不幸被裁员的时候养活自己 。 这样的 精 神一直贯穿了全书 : 本书所有的章节都配备了实际使用的案例分析,我们的案例分析不 只是 针对当前章节所学知识的练习,也涉及实际应用中可能会遇到的“大坑”,以及相应的解 决 办法 。 我们力图通过 D ocker 等部署工具的介绍,帮助读者快速掌握机器学习模型的产业化 进 程 。 不管你是就职于大公司,还是自己创业,我们都希望本书的内容能够让你快速上线满 意 的机器学习系统,离你的梦想更近一点 。 世界在改变,机器学习也在不停地改变 。 对于机器学习中的很多重要成员,如建模 工具、 分布式队列等,本书都会对其来龙去脉和发展趋势进行综述 。 希望通过这样的讨论,能够让 读者建立起对机器学习发展局势的判断,在未来的成长中也能独占整头 。 2 . 抓住机器学习主干,远离学院派 现今 Scikit - leam 等软件已经包含了大量的机器学习模块,其使用方法已经标准化, 所 以我们不准备在机器学习模型上耗费太多笔墨 。 例如,在 Scikit- am 的线性模型 模块 Linear Regression 中,训练模型会调用血 t ()函数,进行预测会调用 predict ()函数 。 与此同 时, VII Sciki t-learn 中的随机森林模块 RandomF orest 同样是调用以上两个函数进行模型的训练和预测 的 。 接口的统 一 化帮助了开发人员进行模块化开发 。 如果出现了新的机器学习模型,则只需 要替 换 一 下模型训练模块即可 。 另 外鉴于现如今网上丰富的机器学习理论资源,我们认为现今的读者完全有能力对特定 的机 器学习模型进行自学 。 本书会以线性模型为例对 Scikit-learn 的使用进行讲解,有需要对 其他机器学习模块进行学习的读者,也可以很容易地将线性模型模块替换成为其他的模块 。 3. 能读的代码,能运行的例子 “ 好多技术类书籍我看着看着就晕了,代码根本没法读”,我们向众多好友征询意见的时 候 收到了这样的反馈 。 为了增加本书案例的可读性,我们力求避免代码的大段堆砌 。 所有案 例的 代码模块都力求在 20 行以下 。 “好多书的例子都没办法编译”,我们写这本书的时候也听到了不少朋友的“吐槽” 。 我 们认 为能正常运行起来的例子是良好学习体验的关键 。 为此,本书的所有例子都通过多次可 用性 测试,并且使用 Docker 运行,大大降低了重复利用的门槛 。 同时我们将源代码寄存在 Gi thub 上面,随时进行更新排错,我们也欢迎读者在上面添加 Pull Request ,完善新内容,与 我们 进行交流 。 4. 实时股票交易、金融舆情分析实例数据 有很多 IT 界的朋友经常在工作累了的时候说:“实在不行我就转行去做金融了,”但是行 动起来去做金融的人却甚少 。 既然在机器学习从业人员的眼中金融行业就像乌托邦那般美妙, 那么为 什么不进去看 一 看自己是否合适呢? 另外,也有 一 些具有金融背景的友人,他们急切地想要利用机器学习方法来实现自动化 交易。 每年都有无数高考状元、名校学子加入外资对冲基金,如果我们能够架设好一个实时 交易 投资的平台,没准人才就不会流失到华尔街去了,而能为国所用呢。 对此我们采用了美股交易秒级数据作为本书案例的数据 。 我们收集了 2015 年 8 月所有标 准普 尔 500 指数成分股每秒的报价和成交量 。 这里的数据主要是以时间序列形式出现,我们 将会 尝试搭建实时机器学习平台,对这些数据进行存储、加工分析和可视化,并且对未来若 干 秒的走势进行预测 。 如果 一 切顺利,我们可以从中得到 Alpha (量化交易中的可以长期盈利 的策 略),实现盈利 。 在 后面的章节中 , 我们会从数据分析出发,由浅到深地利用以上数据进行建模,且在本 书结 尾时实现对金融数据预测判断的功能 。 、、马 VIII 飞‘民 本书的学习方法 重架构、重设计、重实战是本书撰写的指导思想 。 我们认为优秀的系统设计在于完备 的 思考和准备,因此本书对计算机编程和机器学习理论只有人门级的要求 。 1. 基础知识要求 本书的两位笔者之中,彭河森是统计学出身,汪涵是应用数学出身 。 但最后都殊途同 归 地走上了机器学习应用的道路 。 对于计算机编程基础,本书的门槛为国内全日制大学本科 非 计算机专业理科第二年的水平 。 我们假设读者 具有基本的 Python 编 程能力,能在脚本执行和 交互情况下运行 Python 程序 。 本书着重讲解架构设计,对面向对象编程 、 设计模式等课题 没 有任何要求 。 对于机器学习理论基础,本书的门槛为国内全日制大学本科非计算机 、统 计、数 学专业 理科第二年的水平 。 本书假设读者具 有 基本的线性代数知识,对统计推断和机器学习模 型有 基本的了解 。 2. 学习环境配置 本书假设读者采用了山 untu 16.0 4 或 Mac 操作系统 。 新版 Windows IO 在本书写作之时刚 刚开始支持 Linux Shell ,并且具有了山 untu 内核的支持,由 于时间关系我们没有来得及验证 , 请读者谨慎试验 。 另外由于我们将在本书中大量使用 Docker ,所以相关软件将会以 Docker 镜 像的形式存在 。 我们将在相应章节(第 6 章)中介绍 Docker 及其环境工具的安装和配 置。本 书对其他系统软件的安装并没有要求 。 每个章节的实例内容都可以在 Github 官方网站上下载,地址为: https:// github . com/re al­ time-machine-learning/ 。 我们将每一个 章 节的内容都分成 一个独立的 Git 存档,每个章节之间 的 程序不会相互关联,以方便读者选择性地阅读和实践 。 3. 写作分工 本书大部分内容由彭河森、汪涵两人共同探讨、实践 、 总结并得出理论方向 。 汪涵完成 了实战数据库综述章节(第 8 章);其他所有章节均由彭河森完成 。 这里我们向本书写作过程中参与讨论和建议的唐磊、陆吴威 、高 斌 、汤宇清、 孙 宝臣、 Luhui Hu 、 徐易等专家及友人表示感谢 。 特别感谢严老在本书编写过程中两次收留作者在 家 。 前言 第 1 部分实时机器学习方法论 第 1 章实时机器学习综述…········…… 2 1.1 什么是机器学习……… .... ...…… ·2 1.2 机器学习发展的前世今生……….. 3 1.2 . 1 历史上机器学习无法 调和的难题…··..........…….. 3 l.2 .2 现代机器学习的新融合… …… 4 1.3 机器学习领域分类……………….. 5 1.4 实时是个“万灵丹”··············… ··6 1.5 实时机器学习的分类…········…… 7 1.5 . l 硬实时机器学习…………… ··7 1.5 .2 软实时机器学习 …………… ··7 1.5.3 批实时机器学习…………… ··8 1.6 实时应用对机器学习的要求…….. 8 1.7 案例: Netfiix 在机器学习竞赛 中学到的经验…………………… ··9 1.7.l Netflix 用 户信息被逆向工程 … ·9 、、 Ce11cc,, ι 目录 1.7.2 Netflix 最终胜出者模型无法 在生产环境中使用…… ·········9 1.8 实时机器学习模型的生存期…… ·IO 第2 章实时监督式机器学习…………. 12 2.l 什么是监督式机器学习……... ... . 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 x 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也 arn ….. 31 4.1 如何站在风口上?向 Scikit-leam 学习……………..... .. 31 4 . 1.1 传统的线下统计软件 R …….. 31 4.1.2 底层软件黑盒子 Weka· …… ··32 4 . 1.3 跨界 产品 Scikit-leam · · · · · · · · … 33 4 . 1.4 Scikit-leam 的优势……… … · 33 4.2 Scikit-leam 的安装........... ....… · 34 4 .3 Scikit-leam 的主要模块… ··…….. 35 4.3 . 1 监督式、非监督式 机器学习 ...... .…………… .. 35 4 . 3 . 2 建模函数 fit 和 predict··· · ······ 36 4.3.3 数据预处理………………… 38 4.3.4 自动化建模预测 Pipeline …… 39 4.4 利用 Scikit-leam 进行股票 价格波动预测… … … ············ · ··· 40 4.4.l 数据导入和预处理…… ··· · ···41 4.4.2 编写专有时间序列数据 预处理模块…··.......... … … 41 4.4 .3 利用 Pipeline 进行建模…… ··43 4.4.4 评价建模效果 ……………… 43 h、 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.l Docker 引擎的安装.. ...... … ··57 6.3 .2 Docker 引擎命令行的 基本操作…….... .. .. ..… ….. 5g 6.4 通过 Dockerfile 配 置容器 虚拟机 ……·....................…… 61 6.4 .1 利用 Dockerfile 配置 基本容器虚拟机…..........… 62 6.4.2 利用 Docker丑 le 进行虚拟机和 宿主机之间的文件传输· …… ·62 6.5 服务器集群配置工具 Docker Compose ………………… ·64 6.5. l Docker Compose 的 安装 …… ·64 6.5.2 Docker Compose 的 基本 操作…… ····· ··················64 6.5.3 利用 Docker Compose 创建 网页计数器集群…..........… 65 6.6 远端服务器配置工具 Docker Machine · · · · · · · · · · · · · · · · · · · · · · 68 6.6. l Docker Machine 的安装…… · ·68 6.6.2 安装 Oracle Virtua!Box ……… 69 6.6.3 创建和管理 Virtua!Box 中的虚拟机…··..........…… 69 6.6 . 4 在 Docker 协chine 和 Vrrtua!Box 的环境中运行集群 ·············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 、 马 XI 7.5 消息传导设计模式… ·· ···· ··········79 7.5.l 任务队列……........……… ·80 7.5.2 Pub/Sub 发布/监昕………… 80 7.5.3 远程命令…………………… 81 7.6 利用 Docker 快速部署 RabbitMQ ………………………… 82 7.7 利用 RabbitMQ 开发队列服务….. 85 7.7.l 准备案例材料……………… 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.l 关系型数据库……………… 99 8.1.2 非关系型数据库 NoSQL …… 99 8. 2 数据库的性能…………………· 100 8.2.l 耐分割…………………… 100 8.2.2 一致性…………………… 101 8.2.3 可用性…………………… 101 8.2.4 CAP 定理…………………· 101 8.3 SQL 和 NoSQL 对比…………… 102 8.3 . l 数据存储、读取方式……·· 102 8.3.2 数据库的扩展方式…········ 103 8.3.3 性能比较………........…·· 103 8.4 数据库的发展趋势……………. 103 8.4.l 不同数据库之间自动化 同步更为方便……………· 103 8.4.2 云数据库的兴起........…… 104 XII 8.4.3 底层和应用层多层化…… 00104 8.5 MySQL 简介…………········…· 105 8.6 Cassandra 简介… .. .... .. ……… 00105 8.6.1 Cassandra 交互方式简介… 00105 8.6.2 利用 Docker 安装 Cassandra …………………· 106 8 . 6.3 使用 Cassandra 存储数据…· · 106 第9章实时数据监控 ELK 集群…… 107 9 .1 Elasticsearch 、 LogStash 和 Kibana 的前世今生…. ..... .… … · 107 9 .1.1 Elasticsearch 的 平凡起家… 00 108 9.1.2 LogStash 卑微的起源…… … 108 9.1.3 Kibana 惊艳登场………… 00109 9.1.4 ELK 协同作战……………· 109 9.2 Elasticsearch 基本架构…………· 109 9.2.1 文档……………………… ·110 9.2 .2 索引和文档类型…........…. 111 9.2.3 分片和冗余……………… 00112 9.2.4 Elasticsearch 和数据 库 进行比较…………………· 113 9 .3 Elasticsearch 快速人门…………. 113 9.3. 1 用 Docker 运行 Elasticsearch 容器虚 拟机……………… 00113 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 配置索引格式…… …… … 00 127 9.4.3 交互式搜索……………… 00128 9.4.4 可视化操作…………........ 129 9.4.5 实时检测面板…… ……… 00132 第 10 章机器学习系统设计模式 …… 134 10.l 设计模式的前世今生……… 00 134 10 .1.1 单机设计模式逐渐式微…· 134 10 .1.2 微服务取代设计 模式的示例……………… 135 10 .1.3 微服务设计模式的兴起… ·137 10.2 读:高速键值模式…………… 137 10 .2.1 问题场景… ……… …… 00137 10 .2.2 解决方案……………… 00138 10 .2.3 其他使用场景…… … …… 139 10.3 读:缓存高速查询模式……… 139 10 .3.1 问题场景 ……… ……… 00139 10 .3.2 解决方案…… …… …… 00 139 10.3.3 适用场景…… …… …… 00141 10.4 更新:异步数据库更新模式 … 141 10.4.1 问题场景……………… 00141 10.4 .2 解决方案……………… 00141 10.4 .3 使用场景案例…………… 142 10.5 更新:请求重定向模式......... 144 10.5. l 问题场景……………… 00144 10 . 5 .2 解决方案…… ……… … 00144 10 .5.3 更新济南…… ……… … 00145 10 . 5.4 使用场景案例…………… 146 10 . 6 处理:硬实时并行模式……… 146 10.6.1 问题场景……………… 00146 10.6.2 解决方案……………… 00147 XIII 10 .6 .3 使用场景案例…… ……… 14 7 11. 2 Serverless 架构对 实 时 10.7 处理:分布式任务 队列 模式… 148 机器学习的影响…… ……… … 157 10 .7. 1 问题场景…………… …·· 148 10 . 7 .2 解决方案 … …… …·· ······ 149 第 12 章 深度学习的风口……… … …. 159 10 .7.3 Storm 作为分布式 任务队列 …… …… … … · · 150 10 . 7.4 适用场景 … …… ……….. 151 10 .7.5 结构的演进 … …… …… … 152 10.8 处 理: 批 实 时处 理模式········· 152 10 .8. l 问题场景……… …… … ·· 152 10 . 8 . 2 解决方案… … ……… … · · 152 10.8 .3 适用场景 …… … ……… . . 153 第 3 部分未来展望 第 11 章 Serverless 架构 …………… .. 156 11.1 Serve r less 架构的前世 今生 …·· 156 飞比 12.1 深度 学 习的前世今生……… … 159 12. 2 深度 学 习的难点… … … … …… 161 12.3 如何选择深度学习 工具 ……… ……······ · … …….. 161 12.3.1 与 现有编程平台、 技 能 整合 的难 易程度 … … · 162 12 .3 .2 此 平台除做深度学习之外, 还能做什 么 … … ………… 163 12 .3.3 深度学习平台 的 成 熟程度 ………… … … · · 164 12.4 未来发展方向…………· ··· · · ··· 165 ,, U UHU 一,... n … 分…RV · 立口…4,, h . ?’ ··· 旬到 ······ . ......... ......... ......... ....... .......... .......... .......... .......... .......... .......... ......... .......... .......... .......... .......... .......... ............. .......... ............ ………. .... .... ... ... .... .. . 实时机器学习方法论 · 第 1 章实时机器学习综述 · 第 2 章实时监督式机器学习 · 第 3 章数据分析工具 Pand a s · 第 4 意机器学习工具 Scikit-learn . .................................... 、. 、民 . .. .. ... . .... ..... ... · ···· kp .... ZE - -···· 4t .... El --·· 回来 .... 4· ,, “ 仇, “ 阶 … 均 … c … 实时机器学习综述 1.1 什么是机器学习 相信本书的读者都已经接触过一点机器学习了,或者听说过各种新奇的机器学习方 法, 或者通过相关新闻了解过机器学习的应用场景 。 那么,大家是否了解机器学习的定义呢 ? 事实上,对它的定义层出不穷,不同领域的大咖往往都会有一个从自己角度出发的特别 ‘ 机 灵”的定义 。 比如,吴恩达( Andrew Ng )是深度学习的先驱者之 一 ,他对机器学习的定 义 是从计算机从业者的角度出发的,他的定义是: 机器学习是一门科学,它旨在让计算机自主化工作,而不需要刻意编程 。 而从统计和数据分析的角度出发,世界领先的统计软件公司 SAS 对机器学习的定义 是: 机器学习是一种方法,它旨在用数据分析自动化模型的建立 。 笔者个人从学术和工业界应用的角度出发,认为机器学习的定义应该包括以下 三个 方面 。 q 用数据说话:在常规计算机编程中,所有的逻辑都是人为设定的 。 而机器学习方 法 是试图让观测到的数据和现象成为编撰逻辑的依据,不同模型之间的衡量标准也 试 图尽量达到标准化,以使得人为干预最小化 。 口高度自动化:机器学习模型往往会在工业应用中不断重复更新,所以机器学习建 模 生存期中的每个步骤往往都是可以高度自动化的 。 口鲁棒性:虽然教科书中很少提及,但鲁棒性(又称稳定性, Robustness )确实是机 器 第 1章实时机器学习综述 令 3 学习方法论中隐含的一个巨大要求。由于模型建立高度自动化,因此我们需要运用 的机器学习模型在面对极端数据的时候只会受到较少影响,不需要人为排错 。 根据笔者的经验,以上三点是一个组织成功运用机器学习的必要条件,但是一定要以 用户体验为出发点来进行均衡 。 在工业应用中,上面这三点的重要性总是在不断得到印证。下面就通过两个应用中的 有名案例来体会一下 。 1. 谷歌通过机器学习和人工干预进行网页筛查 谷歌等搜索引擎公司每天需要处理上百万个新网页信息 。 为了向用户快速提供这些信 息,谷歌多年来通过不懈的努力开发出了 Caffeine 平台,将提供实时新闻搜索结果的延迟 从一天缩短到了若干分钟 。 机器学习数据驱动、高度自动化的特点让谷歌用户受益不少 。 就连微软在通过记者发布会宣布发行 Windows IO 的时候,谷歌搜索引擎也比微软自有的必 应搜索引擎更快地呈现了与 Windows IO 相关的信息 。 同时为了满足鲁棒性的要求,谷歌通 过第三方人工服务,不断进行人工抽样审查了大量的网页内容 。 2.Yelp 机器学习模型的失败 Yelp 类似于国内的大众点评网,其内容多为用户生成,对餐馆、娱乐、家装等行业都 有很全面的覆盖 。 由于大量商家的成败都取决于 Ye l p ,因此市场上出现了 冒充消费者进行 刷点的评论师 。 评论师会按照商家的要求对商户进行不公正的点评,从而对消费者产生误 导 。 Yelp 意识到了这样的问题,并且建立了机器学习模型进行自动化侦测 。 但可能是建模 数据出现了问题(比如,建模的时候使用了评论师的数据),因此生成的模型并没有阻挡评 论师的进攻,真正的用户所产生的评论反而会被屏蔽掉,用户体验大打折扣 。 通过这样的案例,我们可以意识到基本数据采集对机器学习模型的重要性 。 如果数据 出现了 问题,那么后面的模型 、 架构再强大也没有办法产生效益 。 1.2 机器学习发展的前世今生 1.2.1 历史上机器学习无法调和的难题 早在 2011 年,笔者之一彭河森正在谷歌总部实习的时候,机器学习的应用还主要集中 在几个互联网巨头手里。当时,机器学习的大规模应用存在以下三个方面的限制 。 1 运维工具欠缺 就拿灵活开发流程来说吧,早在 2011 年,谷歌、亚马逊等公司开发了内部自有的协同 部署工具,而开源协同部署工具 Jenkins 才刚刚起步,不少公司对服务器集群的管理还停留 在 rsync 和 ssh 脚本阶段 。 机器学习的应用往往需要多台服务器各司其职、协同作业,这 也增加了机器学习开发 、 部署的难度 。 这也解释了为什么早期的机器学习软件包(如 Weka 、马 4 .》 第 1部分实时机器学习方法论 、 等)都是单机版的,因为服务器配置真的是太麻烦了 。 一个机器学习系统的上线运行,需要前端、后端多个组成部分协调工作 。 在缺乏运维 工具的年代,这样的工作量会大得惊人。人力物力的超高成本投入,有限而且不确定的回 报率,这些都让机器学习从业人员在实际应用中难以生存 。 另外一些机器学习专用工具(如 Hadoop )在早年是很少有人懂得其部署步骤的,一般的工程师都不愿意去主动接触它 。 在 这种情况下,两位笔者都曾经为自己的部门搭建过 Hadoop 平台 。 2. 模型尚未标准化 早在 2011 年,机器学习模型仍然是门派林立, SVM 、 神经网络等大家之作往往需要与 作者直接书写的 libsvm 等软件库相对应,而统一标准化语言的软件包才刚刚出现 。 当时已 经有很多线性模型的软件包,但是如果需要使用随机森林,那么还需要再安装其他软件包, 不同软件包的用法又是不一样的 。 这样的非标准化工作大大加重了开发的工作量,减缓 了 工作的进度 。 机器学习软件行业这种“军阅割据”的格局,导致机器学习从业人员必须对每个对应 的模型都要进行二次开发 。 理论上来说,再好的机器学习模型,在实际系统里面,其地位 也就应该是一个可以随时替换的小插件 。 可是实际上,由于二次开发,往往导致一个模型 很难替代和更新,只能与系统勃在一起。 3. 全桔人才欠缺 如果有了足够多的全找人才,那么上面的挑战就都不是问题了 。 可是由于机器学 习的 门槛比较高,往往需要拥有多年理论训练的人才能胜任相关工作 。 如果没有多年的工作经 验,那么这样的人员往往对系统运维等工作一窍不通 。 找到懂机器学习的人容易,找到懂 系统运维的人也不难,可是要找到两样都会的人就非常困难了,这样的情况直接导致全校 人才极度缺乏 。 如果大家有幸能够供职于一些积累了多年机器学习实战经验 的大公司, 对 机器学习系统架构进行“考古”,就会发现这个公司的机器学习系统架构设计大多取决于该 公司架构人员的学历背景,每个公司在重模型还是重架构方面都有自己的倾向性 。 1.2.2 现代机器学习的新融合 上面三个问题在 2012 年得到了转变,而这一年,也是两位笔者在亚马逊公司相遇的年 份 。 能站在机器学习应用的前线,目睹这一革命的发生,我们感到非常欣喜 。 我们有幸成 为这个大潮中的第一批用户,而且通过实际经历,了解了这一变化的来龙去脉 。 经过这几 年的历练,我们熟悉了机器学习架构应用的相关知识 。 更重要的是,我们通过广泛的实验 和讨论,总结出了对机器学习架构各个组成部分进行选择、预判的规律,让我们可以通过 关键点分析对机器学习的浪潮进行预测评估 。 这也是我们希望能够通过本书与大家进行分 享的经验 。 从 2012 年到 2016 年,机器学习领域主要发生了以下这些变化 。 第 1章实时机器学习综述 令 5 1. 轻量化运维工具成为主流 运维过于复杂,已经成为众多互联网企业的心头之患 。 这个痛点在 2012 年到 2016 年 这几年之间得到了革命性的解决,其中一马当先的急先锋是 Docker, Docker 是一款轻量化 容器虚拟机生态系统(本书的第 6 章会详细介绍 Docker ,并且其应用实例也会贯穿全书) 。 在 Docker 出现以前,调试部署的工作往往会占用开发人员大量的时间,例如在开发人员 电脑上能够成功运行的程序,部署好了之后却不能正常运行 。 Docker 的出现,使得开发人 员电脑上和生产服务器上面的虚拟机镜像内容完全相同,从而彻底杜绝了这种悲剧的发生, 大大缩短了开发部署 的周期 。 与此同时,新近出现的连续化部署( Continuous Integration, CI) 工具, 如 Jenkins ,自 动化了机器学习模型的训练和部署流程,大大提高了模型训练的效率 。 2 . 机器学习工具标准化 近几年机器学习软件的出现仍然呈现爆炸式增长的趋势,但是领军软件已经崭露头角 。 在单机机器学习处理方面,基于 Python 的 Scikit-learn 工具已经成为了监督式机器学习模型 的主流 。 Scikit-learn 具有丰富的机器学习模型模块,并且非常易于进行系统整合,我们在 本书 的第 4 章将对其进行详细介绍 。 与此同时,大数据机器学习方面, Spark 和 ML Lib 也 成为了主流, MLLib 几乎涵盖了所有的主流分布式机器学习模块,并且非常易于扩展 。 这 些新工具的出现,让开发人员不再需要对模型进行二次开发,从而大大提高了效率 。 3 . 全楼人才登上历史舞台 机器学习领域人才大战正酣,吸引了众多优质青年投身于这一领域 。 我们非常欣喜地 看到众多全樵型人才的出现 。 所谓全战型人才,即为上可建模型 、 调参数,下可搭集群、 做 部署,左可开讲座 、熬鸡汤,右可面风投、拉项目的“多才多艺”型人才 。 全校型人才在 组织中可以起到掌控技术全局的作用,可以大大缩短开发所需要的时间,减少系统反复修 改带来的浪费 。 1.3 机器学习领域分类 从方法论的角度来讲,机器学习分为监督式学习、非监督式学习和新兴机器学习课题 三大方面 。 1. 监督式学习 监督式机器学习的主要任务是通过机器学习模型和已有信息,对感兴趣的变量进行预 测,或者对相关对象进行分类 。 监督式机器学习的一些应用场景包括:对网页访问进行分 类 ,通过声音 、 文字 、 表情等信息对用户心情进行判断,对天气进行预测等 。 常用的监督 式机器学习方法包括线性模型 、 最近邻估计、神经网络、决策树等 。 最近特别火热的深度 学习在图像分类等场景的应用也是监督式学习的一种 。 飞、 6 .去 第 1 部分实时机器学习方法论 、 2 . 非监督式学习 非监督式学习的主要任务是对数据进行描述 。 在非监督式学习的应用场景中,所有 变 量几乎都处于同等地位,不存在一个需要进行预测和分类的目标 。 故此非监督式学习主要 用于机器学习建模前期对数据的分析和可视化处理,其在生产环境中的应用较少 。 非监督 式学习的主要方法包括聚类分析、隐含因子分析等 。 3 新兴的机器学习课题 最近五年,强化学习( reinforcem ent learning )领域在深度学习的带领下得到了飞速的 发展 。 强化学习旨在通过对实际事件的观察得到行为优化的结论,例如, AlphaGo 通过强 化学习优化下围棋的策略 。 到目前为止,强化学习暂时还主要停留在学院派研究中,实 际 应用暂时有限 。 本书将着重讲述机器学习方法在实时场景中的应用,我们将会简要介绍主流监督式 学 习的方法和应用 。 另外值得一提的是,在 IT 工业界应用中,自然语义处理 、 推荐系统和搜 索引擎由于其专业领域深度和应用的难度,在各种文献中它们往往被列为独立的大方向 。 本书的第 9 章和第 12 章会对自然语言的处理进行简单的介绍 。 1.4 实时是个“万灵丹” 成长会解决一切问题 。 如果一个企业正在飞速成长,大家步调一致、同心齐力,那 么 内斗或管理混乱等问题将是难以出现的 。 而当企业的成长受到了制约,停滞不前的时候 , 往往就会出现众多非技术性原因造成的悲剧 。 我们强调机器学习的实时性,就是为了保证应用机器学习的企业能够利用机器学习的 资源大踏步向前,而不会被早早地制约,徘徊不前 。 机器学习就已经够有挑战性的了, 为 什么还要采用实时机器学习?根据我们的经验,实时机器学习上马应该越早越好,原因 具 体有以下 三 点 。 1. 实时架构稳定性可以得到保证 Fail fast (快速失败)强调如果有问题,那么应让问题尽早出现,使得问题可以得到 尽 早修复,这是软件工程里面一个重要的思想 。 如果系统有问题,就应该让问题尽早暴 露, 而不是往后拖 。 实时机器学习架构强调连续运行,设计、实施中的任何问题 一 般都可以 在 部署上线后的几个小时内暴露出来,以及时得到更正 。 非实时架构往往会在每天的某一个固定时刻进行数据处理、建模等工作 。 如果前 一天 开发人员部署了问题程序,到了第二天运行的时候才发现,打好补丁就到了第 三 天,然 后 验证补丁是否正确又到了第四天……在流程的反复中,宝贵的时间就这样浪费下去了 。 2 . 代码、架构质量可以得到保证 与非实时架构不同,实时架构设计假设数据是无限量连续到来的 。 这时候系统的设 计 第 1 章实时机器学习综述 ·:· 7 和开发必须从一开始就设计好全局步骤,而不是走一步算一步,由 此可以大大提 高架构设 计的质量 。 与此同时,连续交付的要求需要代码能够事先考虑到所有边际情况,这样我们 所得 到的代码质量也会更高 。 3. 数据驱动的组织文化可以得到加强 由于机器学习具有实时性,因此所有有关业务效果的讨论都可以基于实时数据,而不 是凭空 根据大佬的主观臆断 。 与此相对的,没有采用实时机器学习的组织往往只会定期手 动 进行数据分析,得到真相的速度大大减慢,不利 于 商业决策的正确执行 。 另外,非实时 架 构企业的数据处理往往会经过相关人员之手,数据的原始性和真实性很难得到保证,最 终 用户拿到数据的时候,数据可能已经失去了使用的价值 。 1.5 实时机器学习的分类 按照实际应用中采用的方式不同,实时机器学习可以分为硬实时、软实时和批实时 三 种模式,下面将分别进行介绍 。 1.5.1 硬实时机器学习 硬实时的定义是:响应系统在接收到请求之后,能够马上对请求进行响应反馈,做出 处理。 硬实时机器学习的主要应用场景是网页浏览 、 在线游戏、高频交易等对时效性要求 非常高 的领域 。 在这些领域中,我们往往需要将相应延迟控制在若干毫秒以下 。 对于高频 交易等 场景,更是有不少计算机软件 、 硬件专家,开发出了各种专有模块以在更短的时间 内完成交易,获得超额利润 。 在本书写作之时,计算机网络的传输速度 仍然 是响应延迟的一大主要因素 。 硬实时机 器学 习的响应架构往往会试图尽量减少请求处理过程中的网络传输步骤 。 与此同时,为了 达 到硬实时的要求,在请求突然增加的时候,往往会采取负载均衡的方法,靠增加服务器 的数量来减少响应延迟 。 1.5.2 软实时机器学习 软实时的定义是:响应系统在接收到请求的时候,立即开始对响应进行处理,并且在 较短 时间内进行反馈 。 软实时机器学习只要求系统立即对请求开始进行处理,最后处理完 成所消耗的时间比较少,但是要求不如硬实 时严格 。 软实时机器学习的主要应用场景是物 流运输、较为频繁 的数 量金融交易等领域。 例如某物流企业在接到订单之后需要对运输时 间、物品风险进行预估,其中需要和多个系统 服务进行交互读取,这个时候我们需要系统 能够实时 地做出处理,但是处理结果可能需要经过数秒才能得到 。 由于软实时机器学习对响应延迟的要求有所放松,因此往往会在处理架构中加入分布 、 8 •!•第 1 部分实时机器学习方法论 、 式队列这一组成部件 。 处理的任务会被实时地传输到分布式队列中,而后端的处理程序能 响应式地对任务进行处理 。 与此同时,在请求增加的时候,可以通过分布式队列缓冲到达 的任务,也可以通过负载均衡的方法增加处理单元,以保证低延迟 。 1.5.3 批实时机器学习 硬实时机器学习和软实时机器学习都是针对具体的单个事件进行处理 。 与此相对应的, 批实时机器学习是指对成批到达的数据进行实时的处理 。 批实时机器学习的应用场景往 往 处于后端机器学习模型的训练和数据处理加工上 。 通过实时训练的模型将会被部署到硬 、 软实时机器学习架构中,对数据进行处理 。 由于批实时机器学习需要对一定时间窗口内的所有数据进行处理,因此批实时机器 学 习架构中往往也会有一个分布式队列,对时间窗口内的数据进行缓冲和加工 。 在数据流向 增加的时候,可以通过加大分布式队列的容量,提高分布式队列的处理能力;也可以通过 增加处理单元的方法来提高处理能力,以保证低延迟 。 1.6 实时应用对机器学习的要求 现今每年都会发表成千上万的机器学习相关的论文,其中不乏表现突出的方法论, 但 是并不是所有 的机器学习模型在实际 应用 中都适用 。 实时机器学习的应用主要有以下几个 方面的要求 。 1. 模型可扩展性 模型可扩展性需要整个机器学习应用 的各个部分均可以 轻易地根据实际需要进行扩展 。 这里的扩展可能是增加新的预测变量,也可能是在新的市场、人群和用户界面中进行使用 , 还有可能是加入新的架构部件,进行可视化等操作 。 2 模型运用低延迟性 低延迟性是实时机器学习应用区别于其他机器学习应用的核心 。 根据定的义的不同 , 低延迟的界定也会有所不同 。 对于网页、交互式游戏等应用场景 低延迟需要整个机器 学 习后台在少于 10 个微秒内完成反应;与此相对应的是,对于后台数据分析 、 作弊检测 等 场 景,低延迟要求整个 机器学习后台能在少于一分钟内完成作业即可 。 3 . 训练数据私密性 训练数据私密性是指,模型的用户能否通过逆向 工程的办法,倒推出模型训练数据 集的内容 。 如果训练数据集的内容可以被轻松倒推出来,那么可能会对训练 集数据提 供者的隐私和经济利益带来负面影响 。 这是近几年刚被机器学习业界意识到的 一 个重要 问题 。 第 1章实时机器学习综述 •!• 9 1.7 案例: Netflix 在机器学习竞赛中学到的经验 美国领先的付费视频公司 Net flix 在机器学习、系统推荐方面都做出了卓越的贡献,早 在 2007 年, Netflix 就率先提出了百万美元大奖,奖励在 Netflix Prize 竞赛中优胜的队伍 。 Netflix Prize 通过为期三年的竞赛,积累了机器学习宝贵的第一手资料,成为了机器学习中 的经典案例,这里我们介绍以下两个方面。 1.7.1 Netflix 用户信息被逆向工程 N etflix Prize 进行影片推荐预测时,使用的数据包括用户名、影片名、评价日期、评价 等级等信息,为了防止泄露用户个人的隐私信息, Netflix 对用户名进行了加密处理 。 尽管如此,德州大学的研究人员仍然通过逆向工程成功得到了一些用户的个人信息 。 他们是怎么做到的呢?原来 Netflix 用户在评价一个影片的时候,往往还会去互联网影片库 IMDB 上转载自己的评论 。 德州大学的研究人员将 N etflix 数据集中的评论和 IMDB 中的评 论按照评论日期进行配对,很快就发现了具有上面行为的若干用户,其中不乏具有隐秘性 取向的用户 。 这一研究结果一经发出之后,这些用户的生命安全直接受到了威胁,这也直 接导致了 Netflix 在 2010 年遭到了以上用户的起诉,并且取消了 2010 年以后的所有竞赛。 通过这一案例,我们意识到了在设计机器学习应用的时候一定要把用户隐私保护放在 第一位。一些社会边缘个体特别容易因为自己的行为特征与大众不同而被模型泄露 。 1.7.2 Netflix 最终胜出者模型无法在生产环境中使用 2009 年 Netflix 最终胜出的队伍为 BellKor ,该队伍是由四个队伍混合而成的 。 为什么 要混合 队伍呢?笔者曾有幸亲自向 Be UK or 成员之一的 Michael Jahrer 请教 。 故事是这样 的,在比赛进行到了白热化阶段之后,来自雅虎、贝尔实验室、 C ommendo Research and Consulting 和 Pragmatic Theory 这四个队伍得到的结果都不相上下,这个时候,往往要在进 行大量的参数调校后,模型才会有很少一点的提升 。 2009 年的时候,机器学习领域已经出现了 Emsemble 的概念 。 Emsemble 的意思是通过 混搭来源不同的模型的结果,取长补短,以得到更为强大的模型。很自然的,上面这四支 队伍先后决定合并成为一个大集体,最后取得了 Netflix 比赛的最终胜利 。 比赛确实是结束了,运用 Emsemble 过程带来的负面影响是,最终模型是由上百个 小模型组成的,每个小模型都可能是由不同的语言来写成的,需要自己特殊的预处理程 序,而且还需要独立的模型训练架构 。 虽然按照约定, Netflix 享有最终模型的使用权,但 是实际上由于训练和运用模型的复杂性, Netflix 至今也没有将上述模型运用到实际应用 中去 。 通过这一案例,我们可以学到,先进、前沿的机器学习模型固然很重要,得在运用的 时候仍然要考虑到训练、运用的复杂性 。 一切从实际出发,也是本书全文的贯穿思想 。 飞、 10 •!• 第 1部分实时机器学习方法论 肉、 1.8 实时机器学习模型的生存期 进行实时机器学习开发必须考虑生存期 。 生存期是指一个系统从提出 、 设计、开发 、测 试到部署运用、维护、更新升级或退役的整个过程 。 若在生存期设计上出现了数据,那么 在后面的使用中就会出现各种各样的瓶颈阻碍应用产生价值 。 从软件工程的角度上讲,开发实时机器学习也遵从构思、分析 、 设计 、实现和维护五 个步骤,这五个步骤可能会循环往复,随着业务的发展进行多次迭代 。 实时机器学习模型 的应用由于其技术的特殊性,也具有自己的小型生存期,其中包括数据收集 、 数据分析 、 离线手工建模评测 、 上线自动化建模评测这四个方面 。 如图 1-1 所示,离线手工建模评测 、 上线自动化建模评测这两个部分主要是靠监督式机器学习 。 而数据分析主要是依靠非监督 式机器学习和统计数据分析 。 :|数据收集 |卡本统计量h fifiimH玩了y - i I线叩酬 I r i 图 1-1 实时机器学习模型的生存期 值得一提的是,进行上面这四个步骤的前提是机器学习模型能够给组织和用户带来价 值 。 但是,众多开发人员甚至是领导层都不愿意面对的一个问题是:我的模型真的有用吗 ? 对于一些非机器学习大数据类的初创公司来说,在用户数量并不太多的情况下 , 用非 监督式机器学习进行少量数据分析,然后用人力进行反馈,反而有可能会取得更优良的投 资回报率 。 笔者道听途说得知国内一些门户视频网站,就算在公司都已经上市之后,仍然 还在使用人工选择的方式进行视频推介,甚至还取得了尚可的效果 。 如果机器学习不能给组织带来直接效果,就算有高层支持,对于机器学习从业人员来 说也不是很好的职业选择 。 在机器学习能为组织带来效益的情况下,让数据说话,从业人 员才能够不断进行深挖,并得到更多的锻炼和领域洞见;与此相反,如果所建立的系统昕 第 1重实时机器学习综述令 11 起 来很好,但是却没能带来相对应的效益,那么这样岗位上从业人员的工作重心就会像浮 萍一 样随波逐流,被公司政治利益驱动,长期来说这样很不利于从业人员的个人发展 。 机器学习实战的最高境界,就是知行合一,在创造科技前沿作品的同时,能够为个人、 组织 和社会带来效益,这也是本书写作的指导思想 。 在下面的章节里,我们将会从更实际的角度出发来探索实时机器学习的应用 。 其中, 第 2 章到第 4 章,我们将会介绍监督式机器学习模型,并且学习建模的工具 Pandas 和 Sci kit- arn ;第 6 章到第 9 章, 我们将会介绍实时机器学习的架构,并且学习使用 Docker 、 Rabb itMQ 、 Elasticsearch 及数据库等重要组成部分 。 、飞 、 . .. .. ... . .... ..... ... · ···· KR ·- ·· z 』 ... ·· 呵, h .... ·l ···· 援军 .... 4· J … ι· ·P H UT … 6 · vh u f · 实时监督式机器学习 2.1 什么是监督式机器学习 监督式机器学习旨在利用训练集数据,建立因变量和自变量之间的函数映射关系 。 如 果用 X 代表自变量, Y 代表因变量, f 代表映射函数, b 代表映射函数的参数,那么监督 式 机器学习的任务就是找到恰当的函数 f 和参数,让下面的映射尽量符合要求: Y气f(x;b,e) 这里 e 为实际情况中的随机扰动项 。 下面就来具体看看在监督式机器学习中,因变量、自变量和预测函数的含义 。 ( 1 )因变量 因变量是我们试图通过机器学习模型预测的变量,在实际应用中它往往无法在预测 之 时就能观测到 。 例如在实时股价波动方向预测中,未来股价的走向就是 一 个因变量,只有 等待时间流逝之后才能得知 。 我们进行预测时只能根据当前已有的历史交易数据、基 本面 信息等进行判断。这个时候就需要利用已有的变量对这一因变量进行预测 。 对于不同的 应 用场景,因变量可以是金额、收入等连续变量,也可以是性别 、状态等离散变量,还可以 是三围、经纬度等多维变量 。 ( 2 )自变量 自变量是我们在预测时就已经获得的,可以用于因变量预测的数据 。 例如在实时股价 走势预测的例子中,历史走势、历史成交量等数据都是在进行预测的时候就能够获得的 数 据,通过经验,我们还知道历史走势和未来走势可能具有一定的函数关系,于是历史走 势 就成了预测未来走势的自变量 。 在实际运用中,自变量往往具有实时 、廉价的特点。我们 第2章实时监督式机器学习 令 13 通过当前已有的、可以廉价获取的自变量数据,来预测更难观测到、更为珍贵的因变量数 据,其实也是一种低买高卖的技资。同样,自变量可以是连续、离散、多维的数据,甚至 是图片 、 文字等多媒体数据的集合 。 ( 3 )预测函数 预测函数是我们进行监督式机器学习的核心 。 理想的预测函数能够按照需求,将因变 量映射到自变量空间 。 例如在实时股价走势预测这一应用场景中,我们可以采用线性函数 等多种函数将历史数据映射到未来走势函数的空间中去。预测函数往往多种多样,其既可 能是线性、树状、 网格状函数,也可能是 Murmur Hash 等非线性二进制处理函数,还有可 能是前面提到的这些函数的组合和叠加 。 那么,什么样的机器学习模型才是适用于实际生产场景的呢?笔者根据自己的工作经 验总结了以下几点 。 0 低成本模型:对于腾讯、谷歌、阿里巴巴等航母型企业以外的用户,推荐采用尽量 低成本的模型 。 这里的低成本体现在两个方面:软件包尽量用现成的,且对软硬件 的要求要尽量低 。 q 模型易于解释:在实际应用中,我们往往需要对模型产生的结果进行解释和排错 。 如果模型太过复杂,难以排错,那么势必会影响到实际应用 。 口模型易于修改:建立的机器学习模型往往需要对未发生的事情进行预测 。 这个时候 需要将人为判断放入模型中,这就要求机器学习模型应该能够很容易地带人人工设 置的参数。 虽然近十年出现了成千上万的机器学习方法,其中不乏发表于顶级刊物上的名家大作, 但是如果按照上面三条逐个进行检查, 那么完全符合要求的机器学习方法也就所剩不多了 。 例如不少读者都昕说过深度学习这一众所周知的方法,可是仔细研究就会发现,深度 学习 的训练往往需要 GPU 硬件的支持,而且深度神经网络由于其过于复杂,几乎无法进行 解释排错。所以深度神经网络的应用往往也局限在图像、自然语言处理等特殊场景下,对 于风险分析等重要的应用场合完全无法涉足 。 我们在本书末尾将介绍深度学习的平台选择, 供有兴趣的读者参考。 笔者之一的彭河森,其博士论文是以高维非线性机器学习为主题,但是经过多年的观 察总结,发现还是线性模型和朴素贝叶斯模型在实际应用中最能满足上面这三点 。 因此本 书也将着重讲述线性模型在实时机器学习中的应用 。 2.1.1 “江湖门派”对预测模型的不同看法 具有深厚的技术功底只是能在工业界生存的一半因素,另外一半取决于门派站队是否 正确。 机器学习和统计中一直存在不同的门派,这些门派就像江湖中的各种高手一样,都 有着自己的独门绝技 , 很多文献和教程往往只会注重一方面门派,而忽略了很多其他门派 的贡献。尽信书不如无书,我们鼓励大家多阅读 、多思考,在实际应用中形成自己的知识 同比 14 •!•第 1部分实时机器学习方法论 、 架构体系 。 大家可能注意到了,第 1 章对机器学习的定义其实很模糊,比如:里面的模型参数 应 该是随机的还是实际固定存在的?是真的随机还是只是我们没有观测到而已 ?这些 我们 并 没有给出具体的回答 。 这是因为不同的门派对它的意义和看法都各不一样 。 下面就来 看看 都有哪些观点 。 在统计和计算机理论领域,势力非常强大的贝叶斯学派认为参数是一个随机变 量,因 为我们每次对因变量、自变量进行观测之时,看到的都是一个不可观测到的随机变量 产生 作用的侧影 。 与此相对应的,稍微低调一点的频率学派则认为参数是客观存在的固定数值 , 只是因为随机扰动的存在导致我们无法进行精确观测 。 大家不要小看上面看似微小的观点差别,这种基本世界观的差距,会直接影响 一个企 业的架构设计 。 对我们个人来说,最直接的影响就是不同门派的人往往会各自为政, 互不 往来 。 如果没弄清楚情况,频率学派的人去以贝叶斯学派为主的公司面试,往往会碰 一鼻 子灰,公司内部政治斗争往往也会按照这样的门派站队 。 所以及时认清派系也是我们 核心 技术人员生存的重要本领 。 说个最直观的例子, Linkedln 的一些机器学习高管是贝叶斯学派的忠实信徒, 自然, Linkedln 领导开发的几个项目也都是基于贝叶斯理论的模型,如果不是贝叶斯模型, 那 么先要将其贝叶斯化,才能得到首肯 。 而贝叶斯模型最擅长的当然是线性模型,所以致 使 Linkedln 几乎所有机器学习模型都是线性的 。 贝叶斯模型并没有什么不好,只是,如果 倾 全公司之力,只 做贝叶斯模型,就限制了深度学习等新 工具的加入,错过了进步的机会, 会比较可情 。 2.1.2 工业界的学术门派 以笔者在工业界摸爬滚打多年积累的经验来看,工业界的门派主要涉及了以下 三 个 方向 。 1. “重造轮子”学派 “重造轮子( reinvent the wheel) ” 学派 拥有非常强大的势力,“重造轮 子”学派的人员往 往都像是在世外山谷中修炼了千年的高人,其见地都会让人眼前一亮,他们大都具有独 当 一 面的技术能力 。 通常实力越是强大的公司,越有可能存在“重复造轮子”的情况,比 如, 阿里巴巴、百度 。 阿里巴巴有一个很有意思的例子 。 阿里巴巴某些业务组的技术能力非常出众 ,在 Hadoop 生态刚刚兴起的时候,其开发人员不满于 Hadoop 的运行效率,自己用 C 语 言开发 了 一 套自有分布式机器学习平台 。 后来 Spark 和 MLLib 的出现直接解决了 Hadoop 运 行效 率的问题,笔者也很好奇他们的那套系统后来怎么样了 。 百度也存在“重造轮子”的情况,深度学习盛行的时候,百度发布了自己的深度 学习 第 2 章实时监督式机器学习令 15 开源框 架 PaddlePaddle ,但两位笔者至今没有认识任何非百度的人士在任何场景中测试或应 用了该 框架 。 2. “参数调教”学派 “参数调教”门派比较类似于高位于庙堂之上的士大夫,具有出神入 化的理论功底 ,但 是作品 却很难接地气,微软 、 雅虎。都有这样的例子 。 在第一次互联网泡沫达到鼎盛的时候,微软、雅虎等公司都成立了自己的研究部门,如 微软 研究院 、 雅虎研究院等 。 这些部门的研究人员不需要像学术界的同僚那样寻找资金项目 支持,只需要专注 发表文章 。 就和科举一样,发文章的竞争也是非常激烈的,为了得到最好 的结果,往往需要 进行大量的参数调教 。 从微软、雅虎等公司出身的研究员,一般都特别热 衷于支 持向 量 机( SVM )和深度神经网络( Deep Neur al Network, DNN )两个方法,因为这 两个 方法特别适合“参数调教”,且往往能调出特别好看的结果,以利于文章的发表 。 当然 过度 的“参数调教”带来的后果就是模型过度拟合,纸面上非常惊艳的模型拿到实际应用中 可能 只会是 一筹莫 展 。 现在雅虎被 Verizon 低价收购,微软研究院现在也在向业务组转型 。 3. “拳打脚踢”学派 “拳 打脚踢”门派更像是江湖中的丐帮,看似灰头土脸,但是非常接地气,得到的结果 往往 也是非常好的,这 一 派的带头人首推亚马逊 。 笔者入职亚马逊的时候,亚马逊并没有专门的机器学习研究部门,当时,所有的研究 员都 分散在业务组,业务的快速驱动使得机器学习相关人员都适应了快速上线 、 抓主干的 开发模 式,这样的环境使得亚马逊的机器学习迭代非常快,而从来不会在参数调教上面浪 费精 力 。 另外一方面,由于亚马逊非常讲究以客户为中心,出现机器学习模型失败的应用时, 以 CEO 杰夫·贝索斯为首的领导团队会向下施压寻求解答 。 机器学习界有很多优秀的模 型, 如深度神经网络等复杂模型,它们虽然效果很好,但其解释和排错的难度也是非常大 的 。 这样对解释 、 排错的需求使得线性模型、决策树、随机森林等简单模型在亚马逊得到 了非常 广泛的应用 。 为了方便这样的用途,亚马逊内部还开发了多项可视化工具,方便人 工 排错 。 不同的公司具有不同文化,最后做出来的 机器 学习产品也是不 同的 。 介绍上面这些例 子,是 希望大家在设计实时机器学习系统的时候能够将公司的文化环境、需求考虑在内, 这样 设计出来的系统才是好用的、受欢迎的系统 。 2.1.3 实时机器学习实战的思路 本书的两位笔者都曾经供职于亚马逊和微软,横跨拳打 脚踢和参数调教两大门派,对 。现在雅虎已经被 Verizon 收购,改名 A ltaba ,雅虎已 经成为历史 。 、 16 令 第 1部分实时机器学习方法论 、 于实际的机器学习方法,我们是这么认为的 。 不要重复造轮子:重复造轮子昕起来是很酷 。 很多人喜欢吹毛求疵说 C 效率高, Ja v a 、 Python 不行,碰到这种情况,笔者往 往会反问, F ortran 更快,你为什么 不用 Fortran 写? 重复开发对开发人员的个人生活来说是非常不合适的 。 既然已经有了现成的 工 具,那 么为 什么不早点完成任务下班回家陪家人呢?现今主流开源软件的运行效率都还不错,只 是在 特殊情况下需要按照业务需求对软件运行环境进行配置,例如调节 Java Heap size 、 配 置线 程数量等 。 当然,这些操作昕起来并不是那么醋,但是可以让你早点下班锻炼身体, 为祖 国健康工作五十年 。 没有模型是完美的:教科书里的机器学习数据都假设用 户在同 一 个宏观环境中进 行操 作,但是实际应用中并不是这样的 。 在实际应用中,任何模型的效果都会随 着 时间的 流逝 而衰减;很多曾经成立的模型假设,也会随着时间的推移变为无效,而新生态的出现 需要 我们不断去抓取新数据 。 这就要求我们不断地去更新模型,不断地审视自己的模型和假 设, 不断做出改进 。 重视上下游生态: 实时机器学习系统往往只是一个大组织中小小的 一 环 。 取得优 秀的 成绩固然很重要,但是实时机器学习中产生的数据、知识也可能是整个组织不可或缺的 财 富 。 采取 一 些简单但是易于解读的模型,往往有利于组织进行分析学习,从组织层面 上达 到新的高度 。 2.2 怎样衡量监督式机器学习模型 本章前面对一个好的实时机器学习模型的衡量只提到了“优秀”“合适”这样的 字眼, 本节将会详细展开,讨论监督式实时机器学习模型的衡量标准 。 在实际应用中,监督式实时机器学习效果的好坏可以分为统计量是否优秀和应用业 绩 是否优秀两个方面 。 下面将按照这两部分分别进行介绍 。 在讨论技术细节之前,先进行一下符号的定义: 给定 n 组已知的自变量和因变量{(瓦, x;) }~= I 作为测试数据集,对于任 意 i ,我们 通过 自变量 X; 和模型 f (x;; b ) 预测自变量的数值,得到对因变量的估计写= f(X;;b ) 。 本节下面的所有内容都与讨论其和写的近似程度相关 。 2.2.1 统计量的优秀 一个监督式 机器 学习模型若取得 了 优秀的统计量成绩,则代表着其预测或分类的 误差 较小,精确度上比较优秀 。 对于分类和回归预测这两个问题,我们将定义 不 同的统计 量 。 这类统计量在现有机器学习软件包中往往具有完备的函数支持,例如 Scikit-learn 的 ski earn . metrics 模块中就含有数十种从统计 量角度衡量模型优劣的函数 。 这里我们选取 最 常用的 几 种进行介绍 。 第2章实时监督式机器学习令 17 1. 衡量回归预测的统计量 在回归、预测等场景中,因变量 Y 往往为连续变量。例如,我们可能会通过父母的身 高预测子女成年后的身高,也可能通过社交舆情数据预测当日股票收盘时期的涨跌幅 。 这 里的身高、 涨跌幅都是连续变量,我们对其的预测值需要尽量接近真实现测值 。 为了达到 这样的目的,常用的统计量有以下几种 。 ( 1 )均方误差 均方误差( Mean Square Error, MSE )是统计中最常见的误差衡量单位之一,其定义为: MSE =_!_艺(其- J".)2n t:l 在数学上,均方误差的估计可以追溯到正态分布方差的无偏估计。就算具实际上不服 从正态分布,均方误差仍然具有优良的统计性质 。 直观上来讲,我们希望通过机器学习模 型所得预测的均方误差应尽量小 。 用 E ( )代表对随机变量数学期望的计算,可以将其中 一个观测的均方误差分解为两部分: E(Y -Y)2 = Var(Y) + Bias(Y)2 这里的均方误差可以看作是 E(Y-Y)2 的估计量,等式右边部分可以分为如下两部分来 解读 。 估计的方差 估计的方差( variance )刻画的是对因变量预测的变化程度 。 真实世界里, 任何观测和度量都具有随机性,这样的随机性决定了我们对自变量的预测也具有客观存在 的随机性 。 这样的随机性随着机器学习模型估计方法的不同可能会有所不同 。 估计的系统性偏差 当我们的估计系统性地偏离真实数值的时候,系统性偏差(bias )就 会被包含在均方误差中 。 在理论情况下,如果我们使用了无偏估计,系统性偏差为零,这 时均方误差就只与方差有关 。 当然,在实际应用中,我们的模型或多或少都会有一定的系 统性偏差,理想情况就比较难以达到了 。 比较上面这两点的异同是所有数据科学家面试题目中的必考部分 。 为了便于大家理解, 这里以图 2-1 作为例子进行对比 。 图 2-1 对比了具有完全相同均方误差的两组数据的估计值 和真实值 。 图 2-la 为无偏估计,但是估计方差较大;图 2-lb 的估计方差较小,但是估计有 偏 。 当然,其实也是可以分别用方差和偏离程度来考量估计的优劣的。但是当我们具有多 个统计量的时候,就往往需要通过实际情况进行取舍了 。 有的时候我们宁愿牺性无偏估计, 以换取估计的稳定性;有的时候我们又需要不顾一切地保证估计的元偏性 。 ( 2 )绝对误差中位数 在实际应用中我们往往会遇到极端值( outlier )。例如通过父母身高预测小孩身高的时候 混入了姚明的身高,通过浏览行为预测网购金额的时候混入了王思聪的购买信息 。 这个时 候由于极端数值的存在,均方误差的计算会大受影响,从而致使我们得到的模型评价的结 论也并不贴近实际 。 V叫h 18 令 第 1部分实时机器学习方法论 ·,良 r、a r、』 〈 〉。 。沪剧 F 。。% 胁户 JO 。〈点乱飞 a 四篇“ FH 龟’ qtaF 恤’ 。曲曲 ,宫 J -H 〈〉网。 ’-fv ! 1 νιJV J’ AV < O-i v q啤鑫嘈始 I 〈 〉唱。 I l A- V ” I I 巾。 I 7~ y y 图 2-2 存在极端值(图 2-la )和不存在极端值(图 2-lb )的统计量对比 预测类别 阳性 阴性 表 2-1 预测标签和实际标签对比 阳性 真阳性 假阴性 实际类别 阴性 假阳性 真阴性 统计学家根据表 2-1 定义了数十个统计量,本节将介绍最常见的两个统计量,即准确 率和召 回率 。 ( 1 )准确率( precision) 准确率是指在 被机器学习判断为阳性的观测中, 真 阳性观测所占的比例: 真阳性 准确率= 真阳性+假阳性 准确率刻画的是喊“狼来了” 的孩子有多少次喊狼来了的时候是正确的 。 例如,在实 时股票走 势预测的场景中,我们假设股价上涨是阳性观测,股价 下跌是阴性观测 。 在通过 机器学习模型对其 进行分类预测时,准确率的定义就是被预测的走势中,被预测为会上涨 的这些观测点中,实际上真正上 涨的观测点所占的比例 。 、、 20 令第 1 部分实时机器学习方法论 、 ( 2 )召回率( recall) 召回率是指在真实的阳性观测中,被判断为阳性的观测所占的比例: 真阳性 召回率= 真阳性+假阴性 召回率刻画的是在所有狼来了的历史里面,有多少次牧羊小孩成功地发现了狼 。 例 如, 在实时股票走势预测的场景中,我们假设股价上涨是阳性观测,股价下跌是阴性观测 。 在 通过机器学习模型对其进行分类预测时,召回率的定义就是,对于所有 实 际上涨的这 些观 测点中,被预测为可能会上涨的观测点所占的比例 。 2.2 . 2 应用业绩的优秀 在回归预测的任务中,误差对业务产生的影响往往是不 一 样的 。 例如,想要通过 建模 预测航班售票的情况,若我们预测的乘客数量比实际超出太多,则可能会造成机场 安排过 多运力,造成浪费;但是当我们预测的乘客数量过少,又会造成超额售 票 ,机场运力 不足, 这就会对乘客的体验造成影响 。 这个时候对机器学习模型优劣的判断就 需要 将不对称 的收 益考虑进去 。 同样,在分类任务中,准确率和召回率是相互竞争的两个统计 量 。 例如,我们如 果 奉 行宁可错杀一百,不可放过 一 个的思想,将所有股价走势情况都预测为上涨,那么 这样我 们可以达到 100% 的召回率,但是准确率会变得很低 。 与此相对,若将所有观测都 预测为 下跌,这样我们可以达到 100% 的准确率,但是召回率又将 变 得非常低 。 所以, 真正应用 在实际之中时,我们往往需要对相互竞争的统计 量 进行权衡,选 一 个合适的中间 点 作 为最 终判断的准绳 。 例如,在股价走势预测建模数据中,我们最后的评判标准可能 是 : S=(假阳性* C1 +假阴性 * C2)/N 其中, N 为样本总量, C1 为每起假阳性事件(将下跌预测为上涨)带来的损 失 , C 2 为 每起假 阴性 事 件(将上涨预测为下跌)带来的损失 。 而最后我们决策的准绳,可能 是 通过机 器学习 建模,使得上面的损失函数 S 尽 量 小 。 2.3 实时线性分类器介绍 2.3.1 广义线性模型的定义 (广义)线性模型是机器学习发展几十年来理论和 工 具上最为完备的模型:不管 是分类 还是预测,线性模型都可以进行实时更新和预测;线性模型的解释性非常优秀,每个 变量 的回归系数都可以用于解释模型;最后,我们可以通过增减 变量 ,修改特 定 的回归 系数对 模型进行人为加工 。 :i$;PDF仅是将室,书籍版仪归著者和出版社所苔 , 未经允许不能在网上传锚, 如高需要, i音尽窒购买正版实体书,以表示对知识的尊重!实在育必要获 阪完整版本PDF,i青联系QQ:2415996420,谢谢! 2415996420
还剩35页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf

pdf贡献者

mozai

贡献于2018-06-19

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf