Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 3

前言

数据,数据,数据!想必在新闻、报刊、白皮书、电视等媒介的持续冲击下,人们无法摆脱大数据和数据科学的
洗礼。现实需求推动了对数据的学习、分析和应用,这些数据来自于社交媒体、智能手机、硬件设备(亦称作
“物联网”)、传感器等任何可以产生数据的设备。
大多数数据挖掘的宣传着重于数据规模和处理速度上。数据洪水(data flood)的预言告诉人们我们无法实时处
理这些数据,硬件推销人员会进一步卖给我们需要的服务,以期能够满足处理速度的要求。从某种程度上来说,
他们是对的,但是我们值得停下来思考片刻,并对手边的任务进行适当的再认识。
近年来,数据挖掘和机器学习在我们周围持续火爆,各种媒体也不断推送着海量的数据。仔细观察就能发现,实
际应用中的那些机器学习算法与多年前并没有什么两样;它们只是在应用的数据规模上有些不同。历数一下产生
数据的组织,至少在我看来,数目其实并不多。无非是 Google、Facebook、Twitter、NetFlix 以及其他为
数不多的机构在使用若干学习算法和工具,这些算法和工具使得他们能够对数据进行测试分析。那么,真正的问
题是:“对于其他人,大数据框架下的算法和工具的作用是什么呢?”
我承认本书将多次提及大数据和机器学习之间的关系,这是我无法忽视的一个客观问题;但是它只是一个很小的
因素,终极目标是如何利用可用数据获取数据的本质内涵。请记住我是在探讨工具,关键点是选择哪个工具来胜
任我们尝试完成的工作。迫于技术上的压力,可能会选择 Hadoop,但是 Hadoop 并不一定总是完成任务最好的选
择。

本书目的
本书是关于机器学习而非大数据的,书中会介绍多种用于分析数据本质的技术。读完本书,您将掌握许多有用的
机器学习方法的实际运用,并分析、解释算法实现中如此组织代码的原因。本书针对具体实际问题选择哪种恰当
的方法会提供推荐的建议。
本书没有固定的阅读顺序。您可以从头读到尾,或者选择性阅读您需要的内容。

“实践”意味着亲自动手
过去的几年里,我读过的许多关于机器学习的书都非常重视理论,这并不是什么坏事。如果您正在看一本使用复
杂公式、深入讲解数学理论的书,我要为您的严谨喝彩。对于我而言,我更加关注使用何种机器学习方法及其工
程实践。我的信条很简单:
 在头脑中思考一个问题;
 找到我需要学习的理论;
 找到和我要学习的理论最相关的例子;
 在我的实践工程中让它们发挥作用。
作为软件开发人员,我个人喜欢看很多示例。作为一名老师,我喜欢尽可能多的亲自实现它并且尽可能简单的将
内容传授给我的学生:大概过程是指出关键点,在 IDE 环境中敲完正确的代码,然后让它产生作用。这是令人振
奋并且很有成就感的事情,并且我在本书中也希望传达这样的思想。
每个人都有自己的学习方式。我相信本书涵盖了大多数的通用方法,所以,相信每个人都能从中获益。

“如何对待数学?”
就像论您最喜欢哪支足球队?吉他手吉米•佩奇(Jimmy Page)和杰夫•贝克(Jeff Beck)哪个更帅气(嘿,本
人更喜欢贝克)?有些话题是没有标准答案的。比如这个问题:在开始做机器学习之前,我需要知道多少数学知
识?
做机器学习和学习机器学习的理论是两个不同的概念。为了学习理论,显然需要一个好的数学背景。本书讨论机
器学习的实践方法。现在已经有了很多可被开发者利用的机器学习工具,当前的重点不是为什么这些工具有用,
而是如何让这些工具为我所用。前人已经完成了艰难的工作,他们值得我们给予尊重和掌声。

“但是您需要一个博士!”
同行的一些言语或许会葬送您的研究之路。在您开始做数据分析或者敢于声称自己是“数据科学家”的时候,会
长期充斥着关于您应该具备什么样的知识层次这样的争论(我将马上剖析“数据科学家”这个术语)。个人而言,
我相信如果您能够花费多年去完成一个学位,追求硕士学位然后是博士学位,您应该会在那条路上感到自由。我
对待事情更加注重实用性,并且喜欢边阅读资料边动手实践。
学术环境很关键;现在有大量的在线课程、论文、网站以及关于数学、统计、数据挖掘方面的书籍,足够让您跟
上最新最热的思想。我从中获取了很多资源。
但是,对于我,最直接的莫过于甩开袖子,获得书籍,尝试一些方法,并且检验它们的结果。如果您想重温一下
线性回归的理论,我再次向您保证有很多资料可以阅读,本书也将涉及它们。
最后,大家能够成为“数据科学家”吗?或许本书更有可能的结果是:带给大家更多的机器学习实践技能。我将
在第二章再次讨论这个话题。
所以,当办公室的其他人还在争论是否需要在项目组中增加几个博士的时候,您已经开始用代码实现一个决策树
并且检验它是否切实可行了。

最终您会学到什么?
假定您将本书从头读到尾,您将学到机器学习的常用策略、机器学习的不同方法、以及如何将它们应用在实时和
批处理的环境下。
或者,您也可以直接参考您需要的某一个章节。本书各章节之间联系并不紧密,每一章的内容和实例和其他章节
并无太多相关性。
本书的目的是以实例的方式讲述通用的机器学习概念。在各种工具和软件库中选择适合您的那个,借助已有工具
的方式能够让您快速学习掌握相关知识,同时对于深刻分析、理解当前数据不会有太大影响。

理论和实践学习的平衡
现在已经有很多关于机器学习和数据挖掘的书籍,难点在于如何找到理论和实践的平衡点。当筹划本书时,我会
将重点放在实际和易用的例子上,提供逐步的指导,并且让您能看到如何把这些技术组合在一起。
我并没有说要轻视理论,恰好相反,理论是极其重要的。清楚您想学什么,或者更重要的是您想怎么学,将决定
您如何阅读本书。
前两章介绍机器学习和数据挖掘的定义、实践中所使用的相关工具以及它们产生的效果,为接下来真正的机器学
习算法做准备。主要章节(3 到 8 章)聚焦于不同类型的机器学习理论上,类似游戏攻略,每章将给出代码片段的
解释,再配合其他方法,保证您能够从中获得需要的知识。
最后,您将对比实时和批处理两种环境下的方法,并且考察如何将它们整合在一个大的算法框架中;您还将了解
到 Apache Spark 和 R 语言,它是统计的根本语言。

章节概述
第 1 章阐述“什么是机器学习”,考察机器学习的定义和用途,并且指出您将遇到的算法方面的挑战。同时还讨
论人类自身的“机器学习”过程,探讨下人类建立的模型是如何在将来产生作用的。
在任何实际编程之前,都应该做好计划。第 2 章“为机器学习做好计划”的重点就是完成这一步。计划包括一组
分析和展示方法、数据处理过程、确定存储空间、数据私有性、数据质量和清洗(data cleaning);须知,没
有任何一种方法能够胜任所有任务。第 2 章将通过一些简单的 Linux 命令帮助您整理需要处理的数据。
决策树是机器学习中的常用方法。在模型中使用观测结果或者样本标签以及众多的输入数据(信号、特征),机
器学习的算法就能够预测新数据的可能结果。第 3 章考察决策树的设计,并使用 Weka 实现一个决策树实例。
贝叶斯网络表示了一组随机变量的条件独立性。第 4 章将构造一个简单的例子,展示贝叶斯网络是如何工作的,
并且提供一些可用的代码。
受生物领域中枢神经系统工作方法的启发,神经网络模型被应用在深度学习系统中。第 5 章将考察机器学习的这
一分支是如何起作用,并且阐述把输入样本传递给网络结构的具体过程。
如果您关注购物篮分析(basket analysis),您将会喜欢第六章涉及的关联规则学习,从而找到大数据集之间
的联系。本章将细致的考察 Apriori 算法以及它是如何应用在当前的超市行业的。
支持向量机(SVM)是一个监督学习方法,用于分析数据和模式识别。第 7 章将给出文本分类等实例,展示 SVM
是如何工作的。
第 8 章讲解聚类——对象间的分组;例如,聚类能够在市场细分分析(Market Segmentation Analysis)的
应用中工作的很好。在初始学习阶段,聚类算法是最好的逐步迭代减少分类误差的机器学习方法。
第 9 章和第 10 章是实例攻略。第 9 章的例子关注实时处理。您将使用 Spring XD——它甚至可以称作“数据吸收
引擎”(data ingesting engine),同时利用流式的推特应用程序接口(streaming Twitter API),只要
有新的推特消息(Twitter),就把它们收集起来,从而准备好数据,在第 10 章做进一步处理。
第 10 章考察机器学习的批处理过程。使用第九章获得的数据,您可以搭建 Hadoop 的聚类模型并且运行多个作业。
本章介绍使用 Sqoop 获得数据库中数据的常用方法,如何使用 Mahout 执行用户推荐, 以及如何使用 Hadoop
和 Pig 分析个性化用户数据。
第 11 章介绍机器学习舞台上的新成员。这一章考察 Apache Spark,并且介绍 Scala 语言,它可以针对内存数
据执行类似于 SQL 的查询语句。
R 语言是世界范围内统计工作的重要语言,第 12 章将介绍和分析 R 语言。您可以使用它来实现本书前面章节涉及
的机器学习算法。

本书的源代码
本书每一章阐述的所有代码都保存在 Github 库上供大家下载调试。Github 的地址是 https://
github.com/jasebell/mlbook。您也可以访问 Wiley 个人网站找到代码:
www.wiley.com/go/machinelearning。
本书的例子是使用 Java 实现的,如果您想使用其他语言实现,可以搜索下 Github 网站,或许能找到很多有趣的
例子。
代码已经按照章节分好了,代码包中每章都有各自的文件夹。如果某一部分需要额外的库,文件夹中会有一个
README 注释文件。

使用 Git
Git 是一个在业界和开源软件社区广泛使用的版本控制系统。如果软件是团队开发,Git 将非常重要。您可以使
用它在代码的各个分支上工作,最后将分支合并在一起。
本书使用 Git 并不多,但是如果您希望使用本书的代码库,您需要克隆一份实例。
为了克隆本书的实例,可以使用下面的命令:
$mkdir mlbookexamples
$cd mlbookexamples
$git clone https://github.com/jasebell/mlbook.git
您可以看到克隆进度,当它完成的时候,您能够改变文件夹,在新下载的目录中查阅代码实例。

You might also like