机器学习进阶书单

最近,有一些读者在后台和推送的文章中留言,希望我能推荐一些我自己学习机器学习的书籍和资源。这对我来说其实是一个很大的挑战。我觉得自己实在才疏学浅,还没有做这个推荐的资格,加之我阅读的书籍、论文不多,缺乏大局观。但是,既然答应了,我还是硬着头皮写一点自己的思考,希望对大家能有一点借鉴意义。

因为这是一个大工程,随着自己的积累慢慢加深,我会持续地贴出一些自己的学习路径,我觉得这样是一种对大家比较负责任的做法。非常希望大家能在文末留言聊一聊自己的学习方法和资源,我就先来抛砖引玉了。

在推荐书单和资源之前,我想先聊一聊一些自己的学习感受,我觉得这可能比书单本身更有意义。 在信息爆炸的今天,其实最不缺的就是资源,但我们的学习效率却没有因此而大大提高,反而有所下降。我说出这句话,很多人可能马上就要站起来用砖拍我了,但我觉得这是一个我们不得不承认的事实。我们每个人都拥有一个巨大的知识宝库,我们的云空间里存在多达数十GB的文本、视频学习资源,我们的kindle 上存放着数百本电子书籍。但是,诚实地问问自己,我们真正用心看过的能有多少呢?

这也是我想说的第一点感受,其实,你和机器学习之间,差的只是一个真正的开始! 写这篇推送,我希望达到的目的并不是“送给”大家一份完美的书单,而是希望大家能有一个真正的开始。真正的开始,并不是每天在微信中看那些所谓有满满干货的推送,而是真正去看一本教材,真正去写几行代码实现一些算法,看看这些模型到底是个什么玩意。不踏出这一步,你永远都只能活在羡慕之中。

第二点我想说的是,不要做一个盲目的追随者,在学习的过程中一定要有自己的判断。 有一句比较流行的话是这么说的:“身体总是随大流,意识却渴望不平凡”。我们总希望通过复制别人的路径来成为下一个传奇,然而,这几乎是不可能的,想要不平凡,就一定不能做一个行动上完全随大流的人

下面,我想说说我觉得在学习机器学习时最重要的几点。

  • **学习一些数学知识。**这是一个被无数人强调却依然被很多人忽视的方面。如果你的目标是对机器学习有深入的理解,甚至希望能做出一些创新的工作,那你必须深入地学习线性代数,数学分析,概率论,统计学和数值优化。虽然我正在攻读数学博士学位,但是我在这些领域离精通还有比较大的距离,需要不断学习。如果你的目标是在工作和生活中运用机器学习,那你需要对上述几个领域有一些基本的了解。如果之后有时间,我可能会写一些这方面的简短的文章,希望对大家有帮助。
  • **学习一门编程语言。**我个人的建议是学习python, 这应该是目前机器学习,特别是深度学习领域里最流行的语言。许多机器学习和深度学习的程序包和编程框架都很好地支持python. 编程其实学起来没有那么难,关键是得过自己心理这关,真正动手去做。我自己一开始也是很抗拒编程的。
  • **学英语!学英语!学英语!**重要的事情说三遍。强调这一点我是冒了很大风险的,搞不好就要被扣上一个崇洋媚外的帽子。但是,我想说的是,知识是没有国界的,目前,机器学习的优秀资料大多都是英文写成的,中文写成的真正优秀资源很少。注意,我并不是说中国人写的优秀的东西不多,而是,中国人写的很多书和论文用的也是用英文的。大家不要觉得这些人都罪大恶极,原因是目前科技传播中接受程度最广的是英文,如果论文要发表在顶级会议或者期刊上,必须用英文写。我希望能在这方面尽绵薄之力,尽量吸收一些英文资料中的精华再用中文在公众号上写一些文章,希望能表达其中的思想,方便大家阅读。我想说,学知识是不能有国界和偏见的,一定要吸收最优秀的知识来让自己变得更强,这样,其实是一种真正爱国的行为。

说了这么多了,下面进入正题,开始推荐一些好的资源。


“武功秘笈不可乱练,谨防走火入魔!”

1)如果你是机器学习的初学者,几乎没有接触过这个领域,或者接触的知识很有限,那我个人觉得,下面的两个资源是最好的入门学习资料。

  • 机器学习(吴恩达)

资源链接:

http://open.163.com/special/opencourse/machinelearning. html

这是吴恩达(andrew ng) 给斯坦福的学生开设的机器学习课程,网易公开课上有完整的中文翻译字幕。虽然画质不是特别好,但是这是很好的机器学习入门课程。很多人都是靠这个课程入门的,我也是其中之一,这个课程我几乎看了两遍,我公众号中的文章很多地方也参考了这门课程的内容。

建议大家花两到三个月时间完整地看完这个课程,更重要的是,尽量能做完这门课的作业,作业可以在下面的网址找到:

http://cs229.stanford.edu/materials.html

做作业的这个过程和看视频同等重要,只有做一些练习才能真正理解机器学习到底在干嘛。

  • 机器学习(周志华 著)

/pic/1_bOuFCFZ3ibqIic5xCiccUvibW12uRw.jpg

这本书是南京大学周志华教授写的一本非常优秀的机器学习入门书籍,不夸张的说,这本书应该是用中文写的最好的一本机器学习入门书籍。虽然我没有仔细读过,但是这本书我已经被安利过很多次了。更为重要的是,这本书每章都提供了一些深入学习的建议,方便大家由浅及深。

唯一的缺点是这本书目前没有电子版,但是这本书应该是非常值得一买,我已经准备下单买一本备着!(这个安利我真的没收钱!!!)。如果大家想了解周志华教授的话,大家可以通过下面的网址访问其个人主页:

http://cs.nju.edu.cn/zhouzh/

对于周志华教授,我想我只能用“犇”来形容。

如果能做完这两步,对于机器学习,你毫无疑问就入门了!!!积累一些实战经验我觉得应该可以在一定程度上解决大多数生活和工作上碰到的问题了,同时,也可以具备了学习更深入的内容的基础了。

2)如果你已经有一定的机器学习基础了,希望对机器学习有深入的了解。那么你可以挑战一下下面两本书之一,实话实说,这两本书都非常地难,需要很多时间和精力,特别是毅力才能读下去。

  • Pattern Recognition and Machine Learing (Bishop etc.)

/pic/2_rF6SfOoGw9ykoAYW16ZxnajJWHu3XQ.jpg

贝叶斯学派机器学习的经典之作,可以算是经典中的经典了,这本书也是我目前正在看的书,其中的见解非常深刻,有志于深入研究机器学习的读者,这本书一定要读!!!

这本书网上可以找到高清的电子版,大家都是老司机,怎么找就不用我说了吧?嘿嘿。

另外提一句,这本书对于概率统计要求比较高!

  • The Elements of Statistical Learning (Trevor etc.)

/pic/3_cmsy0xL7SYewOsePxgdnDAiamRziaw.jpg

这本书侧重于统计学习,比较理论,虽然名字叫做 “elements”(大概是基础的意思),但是这本书非常非常地难,而且包含很多最新的成果。有雄心的读者可以试一试,我看过其中的一些内容(应该不到五分之一),内容很厉害,但是难度,你懂的。

我个人认为,上面的这两本,如果你能读完其中一本的绝大部分,已经可以算是半个专家了。对于机器学习,应该不需要再看别的书籍了,应该花时间在阅读一些论文和实践上了。如果对上面这两本书任何一本很有雄心的读者,大家可以一起来读一读,大家多交流交流,几个志同道合的人一起阅读一些比较难的书比单打独斗效率高不少,这也是为什么博士和研究生喜欢搞一些研讨班的原因。


Python

python 上手是很快的,关键是要动手。资源的话,我推荐可以看廖雪峰的python 教程:

http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000

看这个的目的是了解一些基本的语法,动手才是关键。建议大家用 python 把吴恩达的机器学习的作业中的编程题都做一遍。这样,基本上就可以用python 实现一些不是特别复杂的机器学习算法了。

关于 python 的学习,可以稍微看看知乎上的一个回答:

https://zhuanlan.zhihu.com/p/19959253

据说很多人按照这个指南自学转行找到了计算机中的软件工程师的工作。

关于python, 我也不精通,但是我想说两点:

  • 一定要多实践,编程靠看书是学不会的,一定要多写。
  • 对于机器学习来说,只会python 的语法是不够的,要花一大部分时间研究 numpy, scipy 这些数值计算的算法库。能否很好的应用这些库,直接影响你的代码的运行效率。

写在这篇推荐的最后

这是书单推荐的第一篇推送,之后每隔大概三个月我可能会根据我自己的学习体验更新一些内容。希望这样的分享对大家有帮助。

希望大家能在留言中聊聊自己的学习体会和资源,帮助别人的同时,你也会得到别人的帮助。

最后,希望大家能真正踏出学习的第一步,不要让你对于不平凡的渴望只停留在意识之中。

倘若有一天,你真的变成了你想要成为的那个自己,回首,你一定会感谢那个踏出第一步的今天的你。

既然选择了远方,便只顾风雨兼程。——共勉!

更多阅读

如何向你奶奶解释机器学习是什么

机器学习进阶之最短路线图

机器学习进阶路上的五个境界

/pic/4_IFWdfRk2Zibj20icKSNEOY5l01OmUg.jpg

天上有月2016-12-21 09:56:21

目前只看过Ng的机器学习[捂脸],不过是在Coursera上的,感觉那里比网易公开课讲的更清晰,简单。/微笑

Arthur2016-12-26 02:08:56

机器学习和计算机基础知识有什么关系吗数据结构与算法,计算机组成原理,操作系统,计算机网络,离散数学等等。没有这些领域的基础知识学习机器学习有障碍吗

作者

不需要这些知识的,只需会一门高级编程语言

费费费费费2016-12-21 07:35:26

给学英语那段话点赞!

伊丽莎白白2016-12-21 12:59:11

刚学完andrew ng的课,看到他最后的thank you视频有点泪目。。接下来想尝试udacity的ml engineer课程 不知道大家有没有试过呐

潇2017-01-06 07:41:10

极力推荐李航教授的<统计学习方法>,然后再看周教授的<机器学习>,效果更佳/呲牙

陈太初2016-12-21 20:59:55

书已经买了,python也开始学了,准备攻克英语