译者序

译者序

有一天,忽然想到自己整天面对着52个英文字母、9个数字、32个符号1和一个空格,经常加班没有双休日,好傻。时间不断被各种噪声碎片化,完全就是毛姆在《月亮和六便士》里写的,“If you look on the ground in search of a sixpence, you don't look up, and so miss the moon”,整天低头刷手机,却不记得举头望明月。生活也愈发无序,感觉渐渐被掏空。薛定谔的《生命是什么》给我提了个醒,他在“以‘负熵’为生”(It Feeds On ‘negative Entropy’)一节指出:“要活着,唯一的办法就是从环境里不断地汲取负熵。”在介绍了熵的概念及其统计学意义之后,他紧接着在“从环境中引出‘有序’以维持组织”(Organization Maintained By Extracting ‘Order’From The Environment)一节进一步总结:“一个有机体使本身稳定在较高的有序水平上(等于熵的相当低的水平上)的办法,就是从环境中不断地吸取秩序。”这个秩序(负熵、k_log(1/_n))可以是食物,也可以是知识,按主流叫法就是“正能量”(有些所谓正能量却碰巧是增加系统无序水平的正熵)。于是,我开始渐渐放弃那些让人沮丧的老梗,远离那些引发混乱的噪声,重新读书,试着翻译,学会去爱。这几年最大的收获就是明白了“隔行如隔山”的道理,试着循序渐进,教学相长,做力所能及之事,让编程变简单。

1见文末Python示例代码。

一般人都不喜欢编程,更不喜欢动手编程(时间消耗:编写 & 测试 40%、重构 40%、风格 & 文档 20%),却喜欢在心里、嘴上编程:“先这样,再那样,如果要XX,就YY,最后就可以ZZ了。”分分钟就可以说完几万行代码的项目,水还剩大半杯。一旦大期将近,即使要亲自动手Copy代码,也会觉得苦堪搬砖,键盘不是红与黑、屏幕不能左右推、小狗总是闹跑追,不断在数不清的理由中增加自己的熵。偶尔看编程书的目的也很明确,就是为了快速上手,找到答案。当然也是在Google、StackOverflow、GitHub网站上找不到答案之后,无可奈何之举。编程书把看着复杂的知识写得更复杂,虽然大多篇幅不输“飞雪连天射白鹿,笑书神侠倚碧鸳”等经典,且纲举目张、图文并茂,甚至有作者爱引经据典,却极少有令人拍案的惊奇之处。为什么同样是文以载道,编程书却不能像武侠小说一样简单具体,反而显得了无生趣,令人望而却步?虽然编程的目的就是用计算机系统解决问题,但是大多数问题的知识都在其他领域中,许多作者在介绍编程技巧时,又试图介绍一些并不熟悉的背景知识,显得生涩难懂,且增加了书的厚度。

有时我们真正需要的,就是能快刀斩乱麻的代码。(Talk is cheap, show me the code.)编程与研究数理化不同,没有任何假设、原命题、思维实验,并非科学;与舞剑、奏乐、炒菜相似,都是手艺,只要基础扎实,便结果立判。编程技巧也可以像剑谱、乐谱、食谱一般立竿见影,这本《Python机器学习经典实例》正是如此,直接上代码,照着做就行,不用纠结为什么。

机器学习是交叉学科,应用广泛,目前主流方法为统计机器学习。既然是以统计学为基础,那么就不只是计算机与数学专业的私房菜了,机器学习在自然科学、农业科学、医药科学、工程与技术科学、人文与社会科学等多种学科中均可应用。如果你遇到了回归、分类、预测、聚类、文本分析、语音识别、图像处理等经典问题,需要快速用Python解决,那么这本菜谱适合你。即使你对机器学习方法还一知半解,也不妨一试。毕竟是Python的机器学习,还能难到哪儿去呢?目前十分流行的Python机器学习库scikit-learn2是全书主角之一,功能全面,接口友好,许多经典的数据集和机器学习案例都来自Kaggle3。若有时间追根溯源,请研究周志华教授的《机器学习》西瓜书,周教授啃着西瓜把机器学习调侃得淋漓尽致,详细的参考文献尤为珍贵。但是想当作菜谱看,拿来就用,还是需要费一番功夫;若看书不过瘾,还有吴恩达(Andrew Ng)教授在Coursera上的机器学习公开课4,机器学习入门最佳视频教程,吴教授用的工具是Matlab的免费开源版本Octave5,你也可以用Python版6演示教学示例。

2scikit-learn网址:http://scikit-learn.org/stable/

3Kaggle是一个2010年成立的数据建模和数据分析竞赛平台,全球数据科学家、统计学家、机器学习工程师的聚集地,上面有丰富的数据集,经典的机器学习基础教程,以及让人流口水的竞赛奖金,支持Python、R、Julia、SQLite,同时也支持jupyter notebook在线编程环境,2017年3月8日被谷歌收购。

4分免费版和付费版(购买结业证书),学习内容一样,https://zh.coursera.org/learn/machine-learning

5Octave下载地址:https://www.gnu.org/software/octave/

6GitHub项目:https://github.com/mstampfer/Coursera-Stanford-ML-Python

学而时习之,不亦乐乎。学习编程技巧,解决实际问题,是一件快乐的事情。希望这本Python机器学习经典案例,可以成为你的负熵,帮你轻松化解那些陈年老梗。如果再努努力,也许陆汝钤院士在《机器学习》序言中提出的6个问题7,你也有答案了。

7陆院士的6个问题分别是:1. 机器学习早期的符号机器学习,如何在统计机器学习主流中发展;2. 统计机器学习算法中并不现实的“独立同分布”假设如何解决;3. 深度学习得益于硬件革命,是否会取代统计机器学习;4. 机器学习用的都是经典的概率统计、代数逻辑,而目前仅有倒向微分方程用于预测,微分几何的流形用于降维(流形学习,Manifold learning,科普见博文http://blog.pluskid.org/?p=533),只是数学领域的一角,其他现代数学理论是否可以参与其中;5. 机器学习方法仍不够严谨,例如目前流形学习直接将高维数据集假设成微分流形,需要进一步完善;6. 大数据与统计机器学习是如何互动的。

示例代码:

"""打印ASCII字母表、数字、标点符号"""

import string

for item in [string.ascii_letters,
             string.digits,
             string.punctuation]:
    print('{}\t{}'.format(len(item), item))

输出结果:

52 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
10 0123456789
32 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

目录

  • 版权声明
  • 译者序
  • 前言
  • 第 1 章 监督学习
  • 第 2 章 创建分类器
  • 第 3 章 预测建模
  • 第 4 章 无监督学习——聚类
  • 第 5 章 构建推荐引擎
  • 第 6 章 分析文本数据
  • 第 7 章 语音识别
  • 第 8 章 解剖时间序列和时序数据
  • 第 9 章 图像内容分析
  • 第 10 章 人脸识别
  • 第 11 章 深度神经网络
  • 第 12 章 可视化数据