机器学习通过将数据转化为可操作的智能而对学术界和工业界产生了巨大影响。另一方面, Scala在过去几年中,特别是在数据科学和分析领域,其使用率稳步上升。本书是为数据科学家、数据工程师和深度学习爱好者编写的,他们具有复杂数值计算的扎实背景,但想了解更多可以实际操作的机器学习应用开发方法。
因此,如果读者精通机器学习概念并希望通过使用 Scala的强大功能深入研究实际实现来扩展知识,那么本书就是读者所需要的!通过书中 11个端到端项目,读者将熟悉如 Spark ML、H2O、Zeppelin、DeepLearning4j和 MXNet等流行的机器学习库。
阅读本书并练习所有项目后,读者将能够驾驭数值计算、深度学习和函数式编程来执行复杂的数值任务,并可以在生产就绪的环境中开发、构建和部署研究商业项目。
本书并不要求从封面一页页地阅读到封底,读者完全可以从感兴趣的任何页面来开始阅读,同时欢迎任何类型的改进反馈。
快乐阅读!
本书面向的读者如果想利用 Scala及 Spark ML、Deeplearning4j、H2O、MXNet和 Zeppelin等开源库的强大功能来理解大数据,那么本书非常适合。同时建议对 Scala和 Scala Play Framework有深入的了解,如果基本熟悉 ML技术将更好。
本书涵盖的内容第 1章 保险赔偿程度分析,讲解如何运用一些广泛使用的回归技术开发用于分析保险赔偿程度的预测模型,将演示如何在实际生产环境中部署该模型。
第 2章 电信客户流失分析与预测,将使用 Orange Telecoms Churn数据集,包括清洗后的客户活动和流失标签、指定客户是否取消订阅,以开发真实的预测模型。
第 3章 基于历史和实时数据预测高频比特币价格,展示了如何开发收集历史和实时数据的真实项目。项目预测即将到来的几周、几个月等时段的比特币价格,此外还将演示如何在比特币中生成用于在线交易的简单信号,最后本章使用 Scala Play框架将整个应用程序打包为 Web应用程序。
第 4章 人口规模聚类与民族预测,使用来自 1000 Genome项目的基因组变异数据,将 K均值聚类方法应用于可扩展的基因组数据分析,目标是聚集大规模人口的基因型变异,最后通过训练深度神经网络和随机森林模型来预测民族。
第 5章 主题建模:更好地洞察大型文本,展示了如何利用基于 Spark的 LDA算法和 Stanford NLP处理大规模原始文本来开发主题建模应用程序。
第 6章 开发基于模型的电影推荐引擎,展示了如何通过奇异值分解、 ALS和矩阵分原书前言解之间的互操作来开发可伸缩的电影推荐引擎,movie lens数据集将用于此端到端项目。
第 7章 使用 Q-learning和 Scala Play 框架进行期权交易,将在实际 IBM公司股票数据集上应用强化 QLearning算法,开发一个由批评和奖励驱动的期权交易应用程序,并使用Scala Play框架将整个应用程序打包为 Web应用程序。
第 8章 使用深度神经网络进行银行电话营销的客户订购评估,将展示如何解决称为客户订阅评估的现实问题,使用银行电话营销数据集训练 H2O深度神经网络,并评估了这种预测模型的性能。
第 9章 使用自动编码器和异常检测进行欺诈分析,将使用自动编码器和异常检测技术进行欺诈分析,使用 Worldline和布鲁塞尔自由大学( Université Libre de Bruxelles,ULB)机器学习小组在研究合作期间收集和分析的欺诈检测数据集。
第 10章 使用递归神经网络识别人类活动,该项目展示了如何使用名为 LSTM的RNN实现来使用智能手机传感器数据集进行人类行走、上楼等活动的识别。
第 11章 使用卷积神经网络的图像分类,演示了如何在称为 Yelp的真实图像数据集上使用卷积神经网络开发预测分析应用程序,如图像分类。
如何充分利用本书本书的目标人群是开发人员、数据分析师和深度学习爱好者,他们没有太多的复杂数值计算背景,但却想知道深度学习的相关内容,所以建议读者对 Scala及其函数式编程概念有深入的了解。此外,掌握本书的全部内容还需要对 Spark ML、H2O、Zeppelin、DeepLearning4j和 MXNet的一些知识有所了解,对构建工具 Maven和 SBT等有基本的了解。
书中所有示例都是在 Ubuntu 16.04 LT 64位和 Windows 10 64位系统上使用 Scala语言实现的,同时还需要如下组件(最好是最新版本):
. Apache Spark 2.0.0(或更高版本);. MXNet、Zeppelin、DeepLearning4j和 H2O(请参阅本章和附带的 pom.xml文件中的详细信息);. Hadoop 2.7(或更高版本);. Java(JDK和 JRE)1.7 + / 1.8 +;. Scala 2.11.x(或更高版本);. 带有 Maven插件( 2.9+)、Maven编译器插件( 2.3.2+)和 Maven assembly插件(2.4.1+)的 Eclipse Mars或 Luna(最新版本);. IntelliJ IDE;. SBT插件和 Scala Play框架安装。
对于处理器而言,至少是 Core i3以上,推荐使用 Core i5,当然使用 Core i7更好,这将获得最佳的性能,同时多核处理可以提供更快的数据处理和可扩展性。对于内存而言,独立模式下至少使用 8GB内存,单个虚拟机至少使用 32GB内存,对于集群使用更高内存。对于存储空间而言,应该根据将要处理的数据集的大小来使用足够的存储空间,以运行繁重的作业,推荐至少有 50GB的可用磁盘存储空间用于独立存储器和 SQL仓库。
操作系统可以使用 Linux的 Debian、Ubuntu、Fedora、RHEL、CentOS等发行版,例如如果使用 Ubuntu,建议使用 14.04(LTS)64位或更高版本的完整安装,虚拟机采用 VM-Ware player 12或 VirtualBox,当然也可以在 Windows (XP/7/8/10)或 Mac OS X (10.4.7+)系统上运行 Spark作业。
下载示例代码文件可以使用账户登录 www.packtpub.com网站,然后下载本书的示例代码文件,如果在其他地方购买了本书,可以访问 www.packtpub.com/support并注册,示例代码文件将直接发送到注册邮箱中。
下载代码文件的步骤如下:
1)在 www.packtpub.com网站上登录或注册。
2)选择SUPPORT选项卡。
3)点击Code Downloads& Errata。
4)在搜索框中输入图书的名称,然后按照屏幕上的说明进行操作。下载文件后,请使用最新版本的压缩解压软件来解压缩文件夹,具体软件如下:
. 适用于 Windows系统的 WinRAR / 7-Zip;. 适用于 Mac系统的 Zipeg / iZip / UnRarX;. 适用于 Linux系统的 7-Zip / PeaZip。
下载彩色图片下面网址中的 PDF文件包含本书中使用的截图 /图表的彩色图片,读者可以在这里下载:http://www.packtpub.com/sites/default/.les/downloads/ScalaMachineLearningProjects_Col-orImages.pdf。
使用约定本书中使用了许多文本约定。
CodeInText:表示文本中的代码、数据库表名、文件夹名称、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter句柄。这是一个例子:“将下载的 WebStorm-10*.dmg磁盘映像文件挂载为系统中的另一个磁盘。
代码块设置如下:
val cv = new CrossValidator().setEstimator(pipeline).setEvaluator(new RegressionEvaluator).setEstimatorParamMaps(paramGrid).setNumFolds(numFolds)Scala函数代码块如下:
原书前言def variantId(genotype: Genotype): String = {val name = genotype.getVariant.getContigNameval start = genotype.getVariant.getStartval end = genotype.getVariant.getEnds"$name:$start:$end"}当希望引起读者对代码块的特定部分的注意时,相关的行或项目以黑体显示:
var paramGrid = new ParamGridBuilder() .addGrid(dTree.impurity, "gini" :: "entropy" :: Nil) .addGrid(dTree.maxBins, 3 :: 5 :: 9 :: 15 :: 23 :: 31 :: Nil) .addGrid(dTree.maxDepth, 5 :: 10 :: 15 :: 20 :: 25 :: 30 :: Nil) .build()所有命令行输入或输出的写法如下:
$ sudo mkdir Bitcoin$ cd Bitcoin黑体:表示在屏幕上出现的新术语、重要词语。例如菜单或对话框中的单词就像下面例子中一样出现在文本中,例子:“从管理面板中选择系统信息”。
警告或重要注意事项以这种方式给出。
提示和技巧以这种方式给出。
译者序
随着物联网、云计算和大数据的快速发展,人工智能基础理论、技术在此基础上日益成熟且迅速发展,目前人工智能技术广泛应用于各个领域并取得了令人满意的结果,呈现出全面进入商用阶段、冲击传统产业、改变全球经济生态的趋势,其广阔的应用前景和重大的战略意义,引起了世界的广泛关注,而机器学习是人工智能领域里最为重要的研究分支之一。
Scala语言是 Martin Odersky在 2004年研发的一门多范式编程语言,它跟 Java语言类似,它将面向对象和函数式编程结合在一个简洁的高级语言中,它的静态类型有助于避免复杂应用程序中的错误,且可以在 JVM和 JavaScript运行时构建高性能系统,同时可以轻松访问数量庞大的库生态系统。和 Java语言相比, Scala语言所具有的优势正如其名字全称 scalable所描述的那样,具有可伸缩性,可应对简单或者复杂的场景。在简单的应用场景中,可以像使用 Python语言一样当脚本语言使用;当面对复杂的应用场景时,可以使用其大量的原生方法和数据结构来完成较复杂的操作;当有性能要求时,可以通过重构来获取数十倍或者上百倍的速度提升。此外, Scala语言含有专为大规模数据处理而设计的快速通用计算引擎 Spark。目前 Twitter后台的很多应用就是使用 Scala语言编写的。
本书每一章使用一个项目来介绍目前十分流行的机器学习算法,相关代码采用 Scala语言描述,在相关章节描述了 Scala语言编程环境的配置和在不同平台中使用的注意事项。书中主要介绍了机器学习的学习过程、机器学习模型的超参数调优和交叉验证、 Scala Play框架、 H2O和 Apache Zeppelin的使用等相关内容。通过“保险赔偿程度分析”“电信客户流失分析与预测”“基于历史和实时数据预测高频比特币价格”“人口规模聚类与民族预测”“主题建模:更好地洞察大型文本”“开发基于模型的电影推荐引擎”“使用 Q-learning和 Scala Play框架进行期权交易”“使用深度神经网络进行银行电话营销的客户订购评估”“使用自动编码器和异常检测进行欺诈分析”“使用递归神经网络识别人类活动”和“使用卷积神经网络进行图像分类”等项目实现了线性回归,梯度提升树,随机森林, Logistic回归, SVM,决策树, K均值、 H2O民族预测,基于 LDA、Spark MLlib和 Standard NLP的主题建模,基于物品的电影协同过滤和相似性推荐,基于 Q-learning的期权交易算法,基于深度神经网络的客户订购评估,基于自动编码器和异常检测的欺诈分析,识别人类活动的 LSTM模型和能够进行图像分类的卷积神经网络等多个目前流行的机器学习模型或算法,并讨论了各个模型或者算法的调试方法以及在生产环境中的部署步骤。总之,本书涵盖了目前机器学习中大部分流行算法,通过对本书的学习,可以掌握机器学习的工作过程和不同算法的使用技巧,提高工程实战能力,能深入理解各种机器学习模型的基本原理。
本书主要由重庆工商大学人工智能学院张世勇老师翻译,重庆工商大学人工智能学院刘波老师参与了部分翻译工作,并负责全书的技术审稿,对本书的翻译提出了很多宝贵意见。
翻译本书的过程也是译者们不断学习的过程。为了保证专业词汇翻译的准确性,我们在翻译过程中查阅了大量相关资料。但由于时间和能力有限,书中内容难免出现差错,恳请读者批评指正。