首页>参考读物>计算机科学与技术>人工智能

机器学习即服务:将Python机器学习创意快速转变为云端Web应用程序
作者 : [美]曼纽尔·阿米纳特吉(Manuel Amunategui)迈赫迪·洛佩伊(Mehdi Roopaei) 著
译者 : 刘世民 山金孝 史天 肖力 译
出版日期 : 2019-05-28
ISBN : 978-7-111-62703-6
定价 : 99.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 370
开本 : 16
原书名 : Monetizing Machine Learning:Quickly Turn Python ML Ideas into Web Applications on the Serverless Cloud
原出版社: Apress
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

图书特色

将机器学习、统计、通过Web应用程序进行原型设计三种不同的知识组合在一起,并与云服务提供商合作;提供了一个简单的、云相关的、技术无限的指南,帮助你尽可能快地将Python建模工作推广到世界各地;讨论了在Web上快速进行统计和建模工作原型设计的艺术。

图书前言

ASCIIApple IIGitHub是可下载的了,但我们还是在每一章的开头放了一个最终产品的屏幕截图,给你解决问题的动力并使你感受到完成后的兴奋之情。
进入门槛降低,市场变化加快
本书将指导你完成各种各样的项目,这些项目探索不同的Python机器学习创意,以及将这些创意转化为Web应用程序的各种方法。每一章都以一个无服务器计算的Web应用程序结尾,全世界任何人都可以通过Internet连接并访问该应用程序。这些项目基于经典和流行的Python数据科学问题,难度逐步增加。本书研究和设计了一个建模方案,有趣的是,最后该方案会被实现为交互式和诱人的Web应用程序。
数据科学家是一个了不起的职业,但在人们试图成长为一名数据科学家时,他们的学习材料千差万别。数据科学不是关于统计和建模的,而是用于满足人类需求和解决实际问题的。
我们不会把“成为一名数据科学家”作为本书的最终目标,关于这个主题的书籍已经很多了。相反,我们将专注于把机器学习产品快速、简单地推向市场,并始终关注客户!这是职业教育大纲所缺少的。如果先构建,然后再与客户沟通,那么你的解决方案将无法满足他们的要求。我重新绘制了Drew Conway的数据科学维恩图,将倾听客户的声音作为首要任务(图1)。

图1 经典的数据科学维恩图,右边是我更新的版本
我们为写作本书倾尽全力。我们花时间开发概念,确保它们对读者有实际价值(读者即我们的客户,应始终关注他们)。我撰写了初稿,然后Mehdi再修改它。这是一本涉猎广泛的书。工具在不断变化,当你阅读本书时,一些内容可能过时,但这永远不是问题(你可以去GitHub仓库查看更新)。毕竟,一切都在变化,但往往都是变得更好!因此,学习新技巧通常意味着学到更好、更快、更强大的方法来做事。本书不仅向你展示如何构建Web应用程序,还将为你指明正确的方向,以便你更深入地学习感兴趣领域的知识。
建议你通读本书,理解工具,然后复制它们,把它们变成你自己的。这些模板可以帮助你快速启动其他类似项目,为你的客户构建有效的工具。
什么是无服务器云计算
云提供商一直在努力改进Web托管解决方案并降低成本。最近出现的“无服务器计算”(serverless)服务抽象了大部分的配置过程,本书提到的四大云提供商中有三个提供这种服务。这意味着你可以在完全托管的平台上启动和运行项目,实现自动负载均衡、根据吞吐量弹性伸缩、快速部署等,而无须选择、配置和担心任何事情。你可自行决定架构上的定制程度和监控项。你可选择哪些自己控制,哪些由提供商控制。有一件事是可以保证的:网站将自动调整流量,并提供无与伦比的正常运行时间。
这使我们能专注于更重要的事情,而不会陷入实现目标时可能的陷阱之中。这些所谓的“陷阱”至关重要,需要我们认真对待。这就是我们找了这四家信誉良好的云提供商的原因,它们将让我们完全专注于Web应用程序,而不用担心网站崩溃或提供商倒闭。让我们专注于重要的事情,开始工作吧!
Web应用开发中的关键路径
如此多的机器学习模型在其最初编码阶段就让人停滞不前:这些模型很难理解,没有简单方法让人从其洞察中受益。这些模型注定要被遗忘,即使是那些设法摆脱集成开发接口限制的开发人员,在简化静态图表或为建模评分时,也无法发挥其潜力。本书旨在将扩展机器学习模型到通用的Web应用程序这一过程进行分解来避免这种陷阱。每一章都遵循以下三个关键步骤:
1. 以正确的方式建模。我们从最后的成果开始,首先理解用户想要看到什么,并将时间和精力投入到最终目标和用户体验上。我们使用适当的建模方法,以便快速且毫不意外地实现Web应用程序的目标(图2)。

图2 在构建之前,始终检查你的想法是否有受众(来源:Lucas Amunategui)
2. 设计和开发本地Web应用程序。此步骤需利用各种Web前端技术来实现所需的交互性和动态性,以突出模型的洞察力,从而让用户感兴趣。此阶段的最终产品与下一阶段的产品是完全一样的,只是它托管在你的本地计算机上,而不是云上。
3. 部署到流行且可靠的无服务器计算云平台上。每个云提供商都有独特的要求、优点和缺点,需要充分理解这些问题。这是全世界享受和学习你的工作成果的最后一个环节。
我们从提供智能交互性的简单方法入手(比如调整模型的系数或利用保存好的训练过的模型),然后转向复杂方法(比如使用数据库跟踪参与性,或依赖开放源码的训练过的模型进行图像识别)。案例研究1是一个关于股票市场预测的虚构案例,它在后面的章节中会被反复提及,并添加新功能,直到它最终成为一个带有付费使用门槛的复杂仪表板,为付费用户提供可定制的智能化功能。
通过关注经典的数据科学问题,再加上流行的开源技术(如Python、Flask、Ajax、Bootstrap、JavaScript和HTML),你会发现自己已经了解了一些基础知识;即使你还不了解,你的学习曲线也会大大缩短。我们专注于使用简单的工具和简单的技术,去可靠、快速地将机器学习创意付诸实践。工具和方法在每一章都会被重新提及,所以如果你对某些东西一开始还不太清楚,也不用担心,只要继续下去,事情就会越来越清晰。
我们还在每章中轮流提到云提供商,因此你将接触到最受欢迎的云提供商。这将为“给未来项目选择提供商”提供丰富经验。建议仔细阅读所有章节,因为每个章节都会展示不同的项目及其实现方式,在强调提供商优势的同时,也展示快速完成工作的独特技巧。
致读者
本书是为那些有兴趣将统计模型、机器学习流水线、数据驱动项目或任何独立Python脚本扩展到任何人都可以通过Web浏览器访问的交互式仪表板的人编写的。互联网是最强大的媒体,进入门槛极低,任何人都可以访问它,本书是为那些想要利用它的人准备的。
本书假设你有Python编程经验,你需有一个代码编辑器和解释器来实现你的创意。你应该具有测试、排除故障、安装Python库以及熟悉流行的包(如NumPy、Pandas和Scikit-learn)的能力。本书没有介绍这些基本知识。这里给出的代码仅适用于Python 3.x,尚未对较低版本进行测试。此外,你还需要有关于Web脚本语言的基本知识。
本书的目标读者是:想把创意发布到网上的有创业精神的人;没有IT团队的小公司;想接触和接受真实世界培训的学生;数据科学专业人士。
如何使用本书
每章都以最终实现的Web应用程序的截图开始,并描述了它将做什么。这种方法有多个目的:
它可以是吸引你投入工作的动力。
它直观地解释了项目的内容。
更重要的是,它告诉我们,在处理项目时对最终结果有明确的以客户为中心的理解是多么重要。
书中只显示源代码的重点部分,完整版本放在相应的存储库中。当涉及数据探索和Web应用程序的压缩文件夹时会用到Jupyter Notebook。
本书介绍的实际项目简单明了,可以用作模板来启动许多其他类型的应用程序。无论是围绕数字性或分类性预测创建Web应用程序,分析文本,创建强大的交互式演示文稿,提供对受限数据的访问,还是利用Web插件接受订阅付款和捐赠,本书都将帮助你快速实现项目并将其交付给世界各地的人们。
提示 有关编辑/错误的信息,请登录www.apress.com/9781484238721并提交报告。
交互工具
下面简要介绍将机器学习创意快速、简单和漂亮地转换为Web应用程序的工具。这并不是一个完整列表,如果你想了解更多(我希望你愿意),可以尝试使用的不同技术,并且需要遵循我们的提示。
Jupyter Notebook
本书只显示了代码片段,因此每一章中你都需要下载并运行Jupyter Notebook,以便自己尝试各种特性和不同的参数。Jupyter Notebook是基于Web的交互式Python解释器,非常适合构建、调整和发布任何使用Python脚本的东西。它被附加到一个功能完整的Python内核(将其设置为Python 3.x),并且可以像其他解释器一样加载和运行库及脚本。要安装Jupyter Notebook,请参考http://jupyter.readthedocs.io/en/latest/install.html上的官方文档。
安装方式多种多样,包括使用“pip3”命令,如果这种方法不适合你,则请查看官方文档,了解不同的方法(代码清单1)。
代码清单1 安装Jupyter

Jupyter Notebook使用起来既简单又强大。你只需将它下载到本地计算机(它是带有* .ipynb扩展名的文件),打开命令/终端Shell窗口,导航到该文件夹,然后运行“notebook”命令(代码清单2)。
代码清单2 运行Notebook(查看官方文档,了解启动Notebook的其他方法)

此命令将打开一个网页,显示它从中启动的文件夹的内容(图3)。你可以通过单击文件列表正上方的文件夹图标向下导航文件夹结构。
要打开Jupyter Notebook,只需单击任何带有“ * .ipynb”扩展名的文件。如果要创建全新Notebook,请单击紧接刷新按钮的仪表板右侧的“New”按钮。
提示 有关其他信息、Jupyter Notebook问题以及附加内核的信息,请参阅http://jupyter-notebook-beginner-guide.readthedocs. io/en/latest/execute.html。

图3 Jupyter Notebook登录页面
Flask
Flask是一个轻量级但非常强大的服务器端Web框架。它是本书中所有应用程序背后的“大脑”,也是Python数据生成函数和网页之间的黏合剂。我喜欢使用Flask的原因之一是,它允许我们在不离开Python语言的情况下将独立的Python脚本链接到服务器端Web框架,使得在对象之间传递数据更加容易!
Flask附带了发布网页的最低要求。如果你需要其他支持,例如数据库、表单控件等,则必须安装其他库,这就是它被称为轻量级微框架的原因。这也是它易于使用的原因,因为你只需学习一些技巧,其他一切都可使用熟悉的经过验证的Python库。
遗憾的是,我们只能使用Python至此,最终你需要进入前端Web脚本。但是不要有困扰—互联网上有很多很棒的例子(Stackoverflow.com、w3schools.com)和令人难以置信的GetBootstrap.com模板,可以让你尽快到达目的地。
提示 有关Flask的更多信息,请参阅http://flask.pocoo.org/上的官方Flask文档。
HTML
HTML(超文本标记语言)是网络技术方面最基本的东西之一。它已存在多年,用于创建几乎所有的网页和Web应用程序。
对于那些想要了解这一主题的人来说,网上的免费资料浩如烟海。要了解HTML,推荐w3schools.com网站,这个网站的学习材料组织良好、全面,而且通常是交互式的。
CSS
CSS(Cascading Style Sheet,层叠样式表)使大多数网站看起来很棒!我们在这里使用两种类型的CSS文件:大多数网页(最常见)的“”部分中加载的CSS链接和代码清单3中显示的自定义CSS。
代码清单3 自定义CSS脚本块

托管在外部服务器上的CSS文件无法自定义,但通常是同类最佳的。有时你只需要在页面上自定义功能,即在HTML页面中直接创建本地CSS文件或样式标签,然后使用“class”参数将其应用于特定标签或区域(代码清单4)。
代码清单4 将CSS标签应用于HTML标签

CSS非常详细地定义了所有的尺寸、颜色、字体。它还允许你创建所见即所感的Web门户。只需创建一次,即可让所有页面调用它来继承该特定样式。
提示 有关CSS的其他信息,请访问w3schools.com。
Jinja2
Jinja2用于生成标记和HTML代码,并与Flask变量紧密配合。它由Armin Ronacher创建,广泛用于处理Flask生成的数据以及直接在HTML模板中的if/then逻辑。
在此HTML模板示例中,使用Jinja2将名为“previous_slider_ value”的Flask生成的值注入滑块的“value”参数。注意使用双花括号(代码清单5)。
代码清单5 Jinja2将数据传递给HTML输入控件

提示 有关Jinja2的其他信息,请参阅http://jinja.pocoo.org/docs/2.10/。
JavaScript
JavaScript本身就是一种真正的编程语言,它可以为你的任何前端控件添加极其强大的行为。JavaScript为网页带来了很高的交互性,本书中将大量使用它。
这是一个有趣的示例,我们捕获HTML滑块控件的鼠标按钮松开(mouse-up)事件,以将表单提交到Flask服务器。这个想法是,每当用户更改滑块值时,Flask需要使用新的滑块值进行一些服务器端处理并重新生成网页(代码清单6)。
代码清单6 JavaScript捕获滑块onmouseup事件

提示 有关JavaScript的其他信息,请访问w3schools.com。
jQuery
jQuery是一个定制的JavaScript库,可以帮助处理复杂的前端和行为事件,并确保不同浏览器版本之间的兼容性。
jQuery帮助优化按钮、下拉动态行为,甚至Ajax交互(在本书的许多项目中大量使用的关键技术)。
提示 有关jQuery的更多信息,请查看jQuery.com上的官方文档。
Ajax
Ajax是一种出色的前端脚本技术,可以为网页添加动态服务器端行为。它允许发送和接收数据,而无须像表单提交那样重建或重新加载整个页面。一个常用领域是地图网页,例如Google地图,它允许拖动和滑动地图,而无须在每次移动后重新加载整个页面。
提示 有关Ajax的其他信息,请访问w3schools.com。
Bootstrap
Bootstrap是一个非常强大、近乎神奇的前端Web工具。根据BuiltWith Trends的说法,它几乎占据了Web的13%。它包含大多数Web标签和控件的各种外观及行为。通过简单地将你的网页链接到最新的Bootstrap,CSS将为任何无聊的HTML页面提供即时和专业的改造!
如果你查看本书中的任何HTML文件,那么首先要注意的是页面顶部的LINK和SCRIPT标签中包含的链接。这是构建网页的最佳捷径(代码清单7)。
代码清单7 链接标签以继承Bootstrap CSS样式

本书中的所有HTML文件(更可能是你将来要创建的任何网页)都将使用这些链接来下载预制的Bootstrap和JavaScript脚本,并自动继承流行的字体、颜色、样式和行为。通过互联网,你可轻松且快速地获得最佳外观和行为。
提示 有关Bootstrap的其他信息,请查看GetBootstrap.com上的官方文档。
Web插件
Web插件(plugin)具有巨大的优势:将大量硬件、数据和安全管理推送给专门从事该领域的人。没有理由重新发明轮子,浪费宝贵时间或引入安全风险。让其他人顾好这一点,而你专注于最擅长的事情。这就是本书的全部内容!
遗憾的是,我们只能探索其中一部分,这里列出了我过去用过的好东西或者从别人那里听来的好东西(还有成千上万可能同样好的东西—寻找那些为小型企业提供良好支持的人,在成交之前他们往往会提供演示和测试账户)。
会员平台
有几个平台可用。
Memberful(www.memberful.com)
Memberful是将在本书中使用和实现的插件。我个人非常喜欢Memberful.com,并认为对于任何想要轻松管理网站付费功能的人来说,它是一个很好的选择。它通过Stripe.com提供信用卡支付,以及用户管理功能,并紧密集成在你自己的Web应用程序中。
Patreon(www.patreon.com)
Patreon是艺术家和内容创作者的会员平台与插件。
Wild Apricot(www.wildapricot.com)
Wild Apricot是小型和非营利组织的会员平台。
Subhub(www.subhub.com)
Subhub是一个为企业家、专家和组织设计的会员平台。
Membergate(www.membergate.com)
Membergate是企业通信、新闻通讯、协会和受限访问站点的平台。
付款平台
有几个平台可用。
Paypal Donations(www.paypal.com/us/webapps/mpp/donation)
我过去使用过Paypal插件,它易于安装和使用。你所需要的只是一个信誉良好的Paypal账户,剩下的事情都很简单。
Paypal Express(www.paypal.com/us/webapps/mpp/express-checkout)
Paypal Express仍然属于Paypal,能快速简便地结账。
Stripe(http://stripe.com/)
Stripe是一种付款选项,可让网站轻松接受在线信用卡付款。它是Memberful.com背后的支付引擎,我们将在本书的最后一章中看到。
分析
构建自己的Web使用跟踪器需要在每个页面上添加大量的Flask自定义代码,以及用于保存这些交互的数据库和用于理解它的分析引擎。这个工作量很大!相反,使用Google Analytics,我们所要做的只是在每个页面顶部添加JavaScript代码段。基本分析可以免费使用,这对我们非常有利。
留言板
我过去曾使用https://disqus.com向静态网站添加留言板。它直接在你的网站上创建具有专业外观的留言板,同时在其他地方进行管理。
邮件列表
我已经使用formspree.io很多年了,我很喜欢它!可以很容易地将它添加到任何静态网页、文本框和提交按钮。用户可以在你的网页上添加他们的电子邮件地址,https://formspress.io将通过电子邮件向你发送已提交的信息。如果你正在托管静态站点或者不想自己管理数据库,那么这是一个很好的选择。
Git
Git是一个很棒的版本控制工具,它能保存存储库中发生的任何代码创建、更改、更新以及删除。它与GitHub紧密集成,这对于代码保护和协作来说至关重要。它也集成在大多数云提供商那里。我们将在一些章节中使用它。如果你需要处理大型应用程序或与他人协作,那么强烈建议你使用它。
大多数云提供商都支持GitHub、BitBucket等在线代码库。这些在线代码库利用Git,因此学习基础知识将对你很有帮助。在Microsoft Azure上部署Web应用程序的过程与Git紧密集成,因此有必要学一些入门知识或在线获取一些很棒的教程,例如try.github.io:
git init:创建本地存储库。
git clone https://github.com/...:将GitHub存储库克隆到本地驱动器。
git status:列出已更改并等待提交(commit)和推送(push)至存储库的文件。
git add.:添加所有文件(注释期间)。
git add '*.txt':添加所有文本文件。
git commit:提交等待中的文件。
git log:查看提交历史记录。
git push(或git push azure master):将分支推送到远程主站。
git pull:将远程更改拉取到本地仓库。
git reset *:撤销git。
gitrm --cached :停止跟踪文件。
虚拟环境
使用虚拟环境能带来许多优势:
创建没有安装Python库的环境。
准确了解应用程序运行所需的Python库。
使计算机系统的其余部分与在此环境中安装的任何Python隔离开。
鼓励尝试。
要启动虚拟环境,请使用“venv”命令。如果你的计算机上没有安装它,建议安装一下(可以通过常见的安装程序,如pip、conda、brew等)。有关为操作系统安装虚拟环境的更多信息,请参阅“venv-Greation of virtual environments”用户指南:https://docs.python. org/3/library/venv.html。
打开命令窗口并在命令行上调用Python 3“venv”函数以创建沙箱环境(代码清单8和代码清单9)。
代码清单8 创建Python虚拟环境

代码清单9 激活环境

完成后,可以使用代码清单10中的命令停用虚拟环境。
代码清单10 停用虚拟环境

创建requirements.txt文件
大多数云提供商使用requirements.txt文件列出托管Web应用程序所需的所有Python库。在大多数情况下,它与Web文件一起打包并发送到其“无服务器计算”云上进行设置。
你可以创建自己的requirements.txt文件,并将其放在与Flask Python主脚本相同的文件夹中。让我们看看如何使用虚拟环境创建一个完整的requirements.txt文件。使用虚拟环境时,你将创建一个不含任何Python库的安全沙箱。这允许你仅安装所需内容并运行“pip freeze”命令以获取库和当前版本号的快照。请注意,如果你已经知道需要哪些库、依赖项和版本号,则不需要执行此操作。事实上,你也可以使用随本书内容打包的requirements.txt文件。
第1步 在Python中创建虚拟环境,以从干净的平台开始,如代码清单11所示。
代码清单11 启动虚拟环境

第2步 使用“pip3”安装运行本地Web应用程序所需的库,如代码清单12所示。
代码清单12 安装一些库作为示例

第3步 冻结环境及所有已安装的Python库,包括requirements.txt文件中的版本号,如代码清单13所示。
代码清单13 已安装的必需库

第4步 停用虚拟环境,如代码清单14所示。
代码清单14 停用venv

通过上面这些步骤,创建了一个requirements.txt文件。使用“vi”查看其内容(按下ESC和Q键退出)。requirements.txt的内容可能看起来非常不同,但这没关系(代码清单15)。
代码清单15 检查requirements.txt文件的内容
输入:

输出:

在requirements.txt文件中,可以使用“==”符号来要求特定版本(代码清单16)。
代码清单16 准确分配

还可以要求大于等于或小于等于某版本(代码清单17)。
代码清单17 定向分配

或者可以简单地指定为安装程序可以找到的最新版本(代码清单18)。
代码清单18 使用最新版本

上面这些只是对本书中所用到的工具的简单介绍。以这些为起点,请在你特别感兴趣的领域进行进一步的探索。

上架指导

计算机\人工智能

封底文字

本书由浅入深地介绍了一系列常见的Python数据科学问题。书中介绍的实践项目简单明了,可作为模板快速启动其他类似项目。通过本书,你将学习如何构建一个Web应用程序以进行数值或分类预测,如何理解文本分析,如何创建强大的交互界面,如何对数据访问进行安全控制,以及如何利用Web插件实现信用卡付款和捐赠。
每章都遵循三个步骤:以正确的方式建模,设计和开发本地Web应用程序,部署到流行且可靠的无服务器计算云平台(亚马逊、微软、谷歌和PythonAnywhere)上。本书各章之间是独立的,你可以根据需求跳转至特定主题。你还可以访问Jupyter Notebook和代码存储库GitHub,以获取本书代码。
通过阅读本书,你将能够:
使用简单的技术扩展你的机器学习模型,以创建引人注目的交互式Web仪表板。
利用Flask Web框架快速地构建Python模型和创意的原型。
创建由回归系数、逻辑回归、梯度提升、贝叶斯分类等驱动的动态内容。
通过将训练好的模型导入Web应用程序来利用TensorFlow的强大功能。
创建内容丰富的Web界面,使用JavaScript和Ajax处理复杂的实时用户输入,以生成交互式和定制的内容。
在界面中使用付费墙以提供基于订阅的访问。
访问API数据,如谷歌地图、OpenWeather等。
使用各种方法来理解文本数据并定制智能系统。
构建一个直观且实用的推荐网站,为用户增值,并吸引他们成为回头客。
利用Google Analytics的免费增值服务来分析结果。
通过顶级公有云供应商将你的创意呈现给客户。

译者序

The Translator's Words 1
译者序1
近几年来,人工智能(AI)一直在飞速发展着,它正在开启一个全新的创新时代。从智能音箱到各种机器人,从人脸识别到语言翻译,从智能推荐到自动驾驶,人工智能在各行各业应用得越来越广泛。
人工智能技术是引领未来的创新性技术,它将拥有非常光明的前景。译者对这一点深信不疑。于是,大概半年前,为了学习AI,译者买来了大学时期曾经学过的《概率论》《微积分》《线性代数》等数学书籍,以及几本讲述各种算法和模型的大部头。尽管很努力地学习,但是自我感觉效果不太理想。一来要学习的内容非常多,二来各种算法非常枯燥,三来没有太多使用机会,因此很难在短时间内就理解得比较透彻,有时甚至有了打退堂鼓的念头。
直至看到Apress出版的《Monetizing Machine Learning》,我才知道学习AI还有如此轻松有趣的方法。书中实现了多个包含AI能力的完整Web应用程序,包括利用Python、Flask、Google Analytics、Google Maps、PythonAnywhere、Memberful等编程工具和云服务,在GCP上实现一个交互式画布并利用TensorFlow来对手写数字进行预测,在GCP上使用奇异值分解算法来向用户推荐电影,在AWS上使用朴素贝叶斯算法来为高尔夫球手实时预测天气,在Azure上利用云端回归系数来预测共享单车租赁需求等。从这些例子可以看出,本书另辟蹊径,不从各种算法和模型推理入手,而是一步一步从产品设计开始,到代码实现,再到云上部署,让读者学习如何利用AI来实现这些Web应用程序中的智能能力。
本书的顺利出版是各位编辑和我们四人翻译团队通力合作的结果。感谢机械工业出版社对我们的信任和支持,以及各位编辑的专业和细心,感谢四人小组的互相支持和鼓励。还要感谢我的妻子和儿子,谢谢你们对我的默默支持。
最后,由于本人水平有限,书中难免会出现错误或者不妥之处,欢迎批评指正。希望本书能给大家带来一个轻松、有趣、有成就感,甚至还能赚到钱的AI学习奇妙之旅。

刘世民(Sammy Liu)




The Translator's Words 2
译者序2
人工智能的崛起经历了半个多世纪,从20世纪五六十年代AI概念的提出,到近些年AI热潮的此起彼伏,都与基础设施的进步和技术的革新密不可分。回顾半个多世纪,与其说AI技术在兴起,不如说AI在复兴!在信息技术领域,硬件架构经历了大型机、小型机、X86和云计算,软件架构经历了单体、多层、分布式集群、微服务和无服务器计算。历史上,没有任何一个时代计算资源的获取如此便利,应用软件的实现如此简单,而这一切,都意味着AI复兴的时代已然到来!
从技术层面来看,AI的复兴取决于两大要素:一是计算力,二是数据量。计算力越强,数据量越大,AI的发展时机就越成熟。分布式云计算技术解决了AI对计算力的需求,移动互联网让数据不断自我繁衍,大数据技术解决了海量数据的处理问题,AI复兴的道路已经铺平。相比云计算和大数据技术,AI更多表现为算法的最终呈现,或者说是机器学习在不同领域的应用,而机器学习是AI的核心和基础。提到机器学习或者算法,多数人的第一反应就是深奥难懂的数学知识和高深莫测的函数模型。必须承认,在提出AI概念后的半个多世纪,其一直难以在实际场景中得以应用的原因,除了基础设施和场景数据的匮乏外,还有就是其脱离技术领域的理论难度。译者曾经从事过计算机视觉和模式识别领域的研究工作,深知在算法理论和应用场景之间存在着巨大差距。如何把机器学习和人工智能应用到实际场景中,从而解决特定领域的问题,也是译者一直在思索的问题,因为即使我们花费大量时间来学习并理解算法背后的实际意义,但如果没有相应的实验数据,那么我们对于机器学习的研究也仅仅是停留在理论阶段。
当再次决定迈向机器学习的旅途时,译者有幸接触了Apress出版的《Monetizing Machine Learning》一书,这是一本完全从应用场景出发,讲解如何将各种机器学习算法以一种简单明了的方式应用到不同领域以解决特定问题的书籍。书中不仅有实现各种机器学习算法的代码,还提供了相应的实验数据集以供读者进行算法验证,更难能可贵的是这些代码完全可复现作者在书中的结论!与机器学习和人工智能相关的理论书籍很多,但正如我们一直强调的,把机器学习和算法理论应用到实际场景中,进而解决特定领域问题,才是我们学习的最终目的,我相信这也是机器学习和人工智能的最终目的。
在此,我们把这本书翻译并推荐给各位读者,希望本书能为大家带来一个轻松愉快的机器学习之旅,能让大家发现机器学习原来也是件很有趣的事情!有志者,事竟成,祝各位朋友心想事成!

山金孝




The Translator's Words 3
译者序3
近年来人工智能的发展正处在黄金时期,随着这个行业的持续升温,也引发了一波又一波的学习和创业热潮。但是目前市面上存在的与人工智能和机器学习相关的书籍或者在线学习课程,其内容往往侧重理论知识,实践内容则相对偏少,或者缺少场景化示例。但实际上,在读过本书原著后,我发现作者写作时非常用心,尽可能地结合理论和实践,为读者呈现出一个“平易近人、和蔼可亲”的人工智能。
本书的核心是帮助读者快速实现人工智能和机器学习工程化、产品化,简单、高效地推向市场,每章都会实现一个机器学习的创意项目(基于经典的数据科学问题),解决一个实际问题,并在开始时先进行活泼生动的项目结果展示,然后再循序渐进地指导读者完成项目的每个步骤。
本书的另一个特色是充分利用AWS等公有云资源,几乎每个章节都会先实现一个本地版本的Flask应用程序,然后再将这个应用程序部署到云端,并且尽可能选用托管解决方案。这里补充说明下,本书中提到的Serverless概念和目前流行的诸如AWSLambda等无服务器框架有些不同,其介绍的内容更贴近PaaS(平台即服务),但作者的主要意图是建议大家充分利用公有云的资源优势,尽量释放诸如弹性伸缩、负载均衡、持续部署等的运维工作压力,将更多的精力投入到机器学习的目标上来,这一点希望大家能够理解。
本书翻译的完成是团队协作的成果,翻译过程中团队针对每个细节进行在线会议的讨论和研究,精益求精,希望能尽量为读者呈现出原著的核心和灵魂。这里,感谢世民兄、今孝兄和力哥的支持和鼓励,他们的态度和专业性持续引领着整个团队。感谢编辑们的悉心指导,他们对本书做了大量的校对和编辑工作,保证了本书的顺利出版。最后,感谢我的家人,是他们在背后给予我默默的支持,让我可以专心地投入到本书的翻译工作中。由于本人水平有限,书中难免会出现错误或者不妥之处,欢迎批评指正,谢谢。

史天

图书目录

译者序1
译者序2
译者序3
关于作者
关于技术审校者
前言
第1章 无服务器计算介绍1
1.1 一个简单的本地Flask应用程序1
1.2 在微软Azure上使用无服务器计算4
1.2.1 操作步骤5
1.2.2 结论和附加信息12
1.3 在谷歌云上使用无服务器计算12
1.3.1 操作步骤13
1.3.2 结论和附加信息18
1.4 在Amazon AWS上使用无服务器计算19
1.4.1 操作步骤19
1.4.2 结论和附加信息24
1.5 在PythonAnywhere上托管应用程序24
1.5.1 操作步骤25
1.5.2 结论和附加信息26
1.6 本章小结26
第2章 在Azure上进行共享单车回归模型智能预测27
2.1 共享单车租赁需求回归系数分析28
2.2 探索共享单车原始数据集28
2.2.1 下载UCI机器学习库数据集29
2.2.2 Jupyter Notebook配置使用29
2.2.3 数据集探索31
2.2.4 预测结果变量分析33
2.2.5 量化特征与租赁统计34
2.2.6 分类特征研究35
2.3 数据建模准备工作36
2.3.1 回归建模37
2.3.2 简单线性回归37
2.3.3 简单线性回归模型37
2.4 特征工程试验39
2.4.1 多项式建模39
2.4.2 创建分类数据虚拟特征40
2.4.3 非线性模型试验41
2.4.4 使用时间序列复杂特征42
2.5 简约模型44
2.5.1 简单模型中的回归系数提取44
2.5.2 R-Squared44
2.5.3 基于回归系数的新数据预测46
2.6 共享单车租赁需求交互式Web应用设计48
2.6.1 代码可读性与扩展性摘要48
2.6.2 构建本地Flask应用49
2.6.3 下载运行GitHub共享单车代码50
2.6.4 Web应用程序调试最佳实践51
2.7 在微软Azure上运行Web应用程序54
2.7.1 使用Git托管项目代码54
2.7.2 微软Azure命令行接口工具使用56
2.7.3 资源清理59
2.7.4 故障排查60
2.7.5 步骤回顾62
2.8 Web应用程序脚本及技术分析62
2.8.1 main.py文件分析63
2.8.2 /static/文件夹分析64
2.8.3 /templates/index.html文件及脚本分析64
2.9 本章小结66
2.10 附加资源66
第3章 在GCP上基于逻辑回归实现实时智能67
3.1 规划Web应用68
3.2 数据处理68
3.2.1 处理分类型数据71
3.2.2 从分类型数据创建虚拟特征75
3.3 建模75
3.3.1 训练和测试数据集拆分76
3.3.2 逻辑回归77
3.3.3 预测幸存率78
3.4 准备上云78
3.4.1 函数startup()79
3.4.2 函数submit_new_profile()79
3.4.3 使用HTML表单实现交互79
3.4.4 创建动态图像80
3.4.5 下载Titanic代码81
3.5 部署到谷歌云上82
3.5.1 Google App Engine82
3.5.2 在Google App Engine上进行部署83
3.5.3 问题排查86
3.5.4 收尾工作87
3.6 代码回顾87
3.6.1 main.py87
3.6.2 app.yaml88
3.6.3 appengine_config.py文件与lib文件夹89
3.6.4 requirements.txt89
3.7 步骤回顾90
3.8 本章小结90
第4章 在AWS上使用Gradient Boosting Machine进行预训练91
4.1 Web应用程序规划92
4.2 探索葡萄酒品质数据集92
4.3 处理不平衡的类别95
4.4 使用Gradient Boosting Classifier97
4.4.1 评估模型98
4.4.2 持久化模型101
4.4.3 新数据预测101
4.5 设计Web应用程序以交互评估葡萄酒品质103
4.6 Ajax—服务器端动态Web渲染104
4.7 在虚拟环境中工作:一个方便实验、更加安全和纯净的沙箱104
4.8 AWS Elastic Beanstalk105
4.8.1 为Elastic Beanstalk创建一个访问账户106
4.8.2 Elastic Beanstalk108
4.8.3 EB Command Line Interface108
4.8.4 修复WSGIApplication-Group110
4.8.5 创建EB应用程序111
4.8.6 查看应用程序111
4.9 资源清理112
4.10 步骤回顾114
4.11 故障排查115
4.11.1 查看日志115
4.11.2 SSH登录到实例115
4.12 本章小结116
第5章 案例研究1:在Web和移动浏览器上预测股票市场117
5.1 配对交易策略118
5.2 下载和准备数据119
5.2.1 准备数据120
5.2.2 股票代码透视121
5.3 价格市场数据扩展121
5.4 绘制价差122
5.5 交易理念123
5.5.1 寻找极端案例123
5.5.2 提供交易建议124
5.6 计算交易股数125
5.7 设计一个移动友好的Web应用程序提供交易建议127
5.8 运行本地Flask应用程序128
5.9 表单验证130
5.10 在PythonAnywhere上运行应用程序130
5.11 修复WSGI文件133
5.11.1 源代码133
5.11.2 WSGI配置133
5.11.3 重新加载网站134
5.12 PythonAnywhere故障排查135
5.13 本章小结136
第6章 基于Azure和Google地图的犯罪行为预测137
6.1 Web应用程序规划138
6.2 探索旧金山犯罪热图数据集138
6.2.1 数据清洗139
6.2.2 数据重分布140
6.2.3 周数据探索142
6.3 数据特征工程142
6.3.1 创建年度月份汇总数据特征143
6.3.2 创建时段数据特征144
6.3.3 时段特征数据集探索145
6.4 地理数据可视化146
6.4.1 地理坐标位置绘制146
6.4.2 地理坐标近似值区块创建147
6.5 基于历史数据的犯罪预测149
6.6 Google地图152
6.7 热力图层153
6.8 犯罪数据在Google地图上的应用154
6.9 犯罪预测数据自定义提取155
6.10 设计Web应用程序156
6.10.1 添加Google API密钥157
6.10.2 本地运行Web应用程序157
6.10.3 Azure公有云Git准备157
6.10.4 Azure命令行接口工具160
6.10.5 故障排查164
6.10.6 资源清理166
6.11 本章小结166
第7章 在AWS上使用朴素贝叶斯和OpenWeather进行预测167
7.1 探索数据集167
7.2 朴素贝叶斯169
7.3 Sklearn中的GaussianNB170
7.4 实时天气预报OpenWeatherMap171
7.4.1 使用天气预测服务173
7.4.2 数据转换174
7.5 设计Web应用程序177
7.6 在AWS Elastic Beanstalk上运行应用程序179
7.6.1 修复WSGIApplication-Group180
7.6.2 查看应用程序181
7.6.3 记得终止实例182
7.7 本章小结184
7.7.1 访问OpenWeatherMap数据184
7.7.2 捕获异常184
7.7.3 处理用户输入的数据185
第8章 在GCP上基于TensorFlow实现交互式绘画和数字预测186
8.1 MNIST数据集186
8.2 TensorFlow189
8.3 使用TensorFlow和卷积网络建模189
8.3.1 构建建模层190
8.3.2 损益函数191
8.3.3 实例化会话191
8.3.4 训练191
8.3.5 准确度191
8.3.6 运行脚本192
8.4 准备上云193
8.4.1 运行一个保存的TensorFlow模型193
8.4.2 保存模型194
8.4.3 画布194
8.4.4 从画布到TensorFlow195
8.4.5 测试新的手写数字195
8.4.6 设计Web应用程序196
8.4.7 下载Web应用程序197
8.5 部署到谷歌云上198
8.5.1 谷歌云Flexible App Engine198
8.5.2 在Google App Engine上部署199
8.5.3 问题排查201
8.5.4 收尾工作202
8.6 本章小结203
8.6.1 HTML5 标签203
8.6.2 TensorFlow203
8.6.3 设计203
第9章  案例研究2:动态股票图表显示205
9.1 使用Matplotlib创建股票图表205
9.2 探索配对交易图表207
9.3 设计Web应用程序210
9.4 具有移动友好性的表格211
9.5 上传Web应用程序到PythonAnywhere213
9.6 本章小结215
第10章 在GCP上使用奇异值分解实现推荐系统216
10.1 规划Web应用216
10.2 推荐系统简介217
10.3 探索MovieLens数据集217
10.3.1 MovieLens数据集概况218
10.3.2 探索ratings.csv和movies.csv219
10.3.3 理解评级和评级文化221
10.3.4 给出推荐224
10.4 协同过滤226
10.4.1 相似性和距离测量工具227
10.4.2 欧几里得距离227
10.4.3 余弦相似距离228
10.5 奇异值分解228
10.5.1 将电影评级集中到零周围229
10.5.2 观察SVD的行为229
10.6 准备上云232
10.6.1 下载并在本地运行“下一部电影看什么?”232
10.6.2 代码解释234
10.7 部署到谷歌云上236
10.7.1 在Google App Engine上部署236
10.7.2 问题排查240
10.7.3 收尾工作240
10.8 本章小结241
第11章 在Azure上使用NLP和可视化技术简化复杂概念242
11.1 Web应用规划242
11.2 数据探索243
11.3 文本清理244
11.4 基于文本的特征工程245
11.5 TFIDF文本数据清理247
11.6 NLP与正则表达式247
11.7 使用外部垃圾邮件关键字列表248
11.8 使用Sklearn库TfidfVectorizer提取特征250
11.9 输出变量准备250
11.10 使用Sklearn库随机森林分类器建模251
11.10.1 模型性能测量252
11.10.2 模型阈值交互255
11.11 Web图形化交互256
11.12 构建本地Flask Web应用257
11.13 将应用程序部署到Azure公有云259
11.13.1 在Azure上部署Git259
11.13.2 Azure命令行接口工具262
11.13.3 资源清理265
11.13.4 故障排查266
11.14 本章小结与附加资源268
第12章 案例研究3:使用基础财务信息使内容更丰富269
12.1 访问股票上市公司名单269
12.2 使用维基百科API获取公司信息271
12.3 构建动态FinViz链接272
12.4 基础消息探索273
12.5 设计Web应用程序274
12.6 上传Web应用程序到PythonAnywhere276
12.7 本章小结281
第13章 使用Google Analytics282
13.1 创建Google Analytics账户282
13.2 JavaScript跟踪器283
13.3 阅读分析报告284
13.4 流量来源286
13.5 页面286
13.6 本章小结与附加资源287
第14章 在PythonAnywhere上使用A/B测试和MySQL数据库288
14.1 A/B测试289
14.1.1 用户跟踪290
14.1.2 通用唯一标识符290
14.2 MySQL290
14.2.1 使用命令行启动和停止服务292
14.2.2 MySQL命令行监视器293
14.2.3 创建数据库293
14.2.4 创建数据表294
14.2.5 创建数据库用户295
14.3 Python库:mysql.connector295
14.3.1 SELECT SQL语句296
14.3.2 INSERT SQL语句296
14.3.3 UPDATE SQL语句297
14.4 将代码抽象为函数298
14.5 设计Web应用程序300
14.6 在PythonAnywhere上设置MySQL300
14.7 在PythonAnywhere上进行A/B测试302
14.8 A/B测试结果304
14.9 本章小结304
第15章 从访问者到订阅者306
15.1 基于文本的身份验证306
15.1.1 Flask-HTTPAuth硬编码账户307
15.1.2 摘要式身份验证示例308
15.1.3 使用外部文本文件的摘要式身份验证示例309
15.2 简单订阅插件系统311
15.2.1 用Memberful进行销售311
15.2.2 用PayPal进行捐赠315
15.2.3 用Stripe进行购买317
15.3 本章小结321
第16章 案例研究4:使用Memberful构建订阅付费墙322
16.1 升级Memberful和Python-Anywhere支付账户323
16.1.1 升级Memberful323
16.1.2 升级PythonAnywhere326
16.1.3 使用pip安装Flask-SSLify326
16.2 Memberful用户验证327
16.2.1 两步流程和Flask会话机制327
16.2.2 身份验证第1步328
16.2.3 身份验证第2步328
16.2.4 调用Memberful函数330
16.3 设计Web应用程序331
16.3.1 在Memberful.com上设计一个订阅计划331
16.3.2 将Web应用程序上传到PythonAnywhere333
16.3.3 在Memberful和MySQL中替换你自己的凭据335
16.4 代码解释336
16.4.1 main.py336
16.4.2 welcome.html336
16.4.3 index.html337
16.5 本章小结338
第17章 关闭所有资源339

教学资源推荐
作者: (加)David L. Poole, Alan K. Mackworth 著
作者: (新西兰)Ian H.Witten 怀卡托大学 Eibe Frank 怀卡托大学 Mark A. Hall 怀卡托大学 著
作者: [英]伯纳黛特·夏普(Bernadette Sharp) [法]弗洛伦斯·赛德斯(Florence Sèdes)[波兰]维斯拉夫·卢巴泽斯基(Wiesław Lubaszewski) 编著
作者: [美]安德鲁·J. 库迪拉(Andrew J. Kurdila) [美]平哈斯·本-茨维(Pinhas Ben-Tzvi) 著
参考读物推荐
作者: (美)乌黛·卡马特(Uday Kamath)克里希纳·肖佩拉(Krishna Choppella)著
作者: 南京大学人工智能学院 著
作者: [意]保罗·佩罗塔(Paolo Perrotta) 著
作者: [印] 纳温·库马尔·马纳西(Navin Kumar Manaswi) 著