声明

本文摘自网络,并做了些修改。写的不错,分享给大家。

前言

背景:一直有朋友希望我能介绍下自学机器学习、数据挖掘的经历,然而当我认真回首研究生这两年半,发现浪费掉的时间居多,学习的时间太少,积累还不够(虽然校招季收获比较多的数据挖掘相关offer,其实人脉、运气、面试经验等其他因素占了很大比重)。所以在此只能聊聊一些浅显的认识,各位姑妄听之。

本文受众:有兴趣自学机器学习、数据挖掘的学生或程序员(也欢迎科班研究生、业界大拿拍砖,多多提出批评建议,先行谢过)

如何利用资源

数据挖掘这个领域可供自学的资源很广泛:MOOC(网络公开课)及课程相关讲义、书籍、博客、paper等等。鉴于学习资源浩如烟海,对资源进行过滤是非常重要的,这里谈谈我对资源利用的几点看法:

1、只用经典资源 对于公开课:参考果壳MOOC上学员的评价,coursera的学员讨论区;对于书籍:主要参考亚马逊(美国/中国)、豆瓣上的书评以及Google Scholar中的引用数,CSDN、当当、京东上的书评也可略做参考;对于博客:只看那几个大牛的个人博客或者专业的社区;对于论文:Google Scholar的引用数是重要指标,但当你要follow一个新领域时,建议先turtorial再自己看新论文、做评价(因为新论文的引用数一般都不高)

2、通读和略读的取舍 在筛选出经典资源的基础上,对于公开课:入门级的课程要坚持上完,进阶的课程选择性听一听;对于书籍:砖头书当参考手册看(如 PRML、模式分类、统计学习理论、数据挖掘导论、数字图像处理、C++ Primer),实践书、小而美的导论书建议通读(如数学之美、统计学习方法、机器学习实战、推荐系统实践、半监督学习导论、applied predictive model、essential C++)

我的自学之路

13年之前

数学类课程,只学过微积分、线性代数、信号处理,零碎地了解和使用过神经网络,不了解机器学习,只听说过模式识别(以为就是人脸识别),也正因为对模式识别的不了解,保研的时候放弃了中科院自动化所和计算所两位牛导伸出的橄榄枝,选择离家更近的浙大,读我自己不太感兴趣的控制理论,研究电路。。。现在想来仍是有些遗憾(但不后悔),所以准备读研但没确定方向的同学,一定要抓紧时间多了解研究方向,争取选择自己感兴趣的,让遗憾最小化

13年

1、入学前的暑假,在网易公开课上刷了Andrew Ng的《机器学习》(对应 stanford CS229,很老的课程,大概是09年的),那时候coursera还没火,果壳mooc也没创办。这个课程难度比现在coursera上Ng的同名课程要难一些,几乎全是公式推导,而且这门课的SVM是重点,但并未提及神经网络,后来coursera上Ng的课程则是基本删掉了SVM,加进去神经网络(也能理解,因为深度学习火起来了)。当时因为对优化理论、矩阵理论还不够了解,所以留下不少疑惑

2、同样暑假,自学了C++,几乎是把《essential C++》从头看到尾,然后选了书中一些作业去实现,因为本科一直用C写嵌入式,所以这本书看得比较顺。这本书实乃Lippman的良心之作啊,短小精悍,建议配合他的另一本大部头《C++ primer》一起看,作为辅助阅读。虽然后来一直没怎么用到C++,不过看C++库的时候不至于看不懂了

3、入学后在coursera上看了Ng的机器学习的神经网络部分,本来想再看下Hinton的《神经网络》,但要看自己研究领域的论文,就放弃了

4、买了吴军的《数学之美》,科普性质的书,也有推导,深入浅出,引人入胜,非常棒,对搜索和NLP领域的算法有了较多认识

5、买了李航的《统计学习方法》,纯推导,把几大类经典模型背后的理论刻画得淋漓尽致,看了之后对SVM的VC维理论、EM算法等有了深刻认识

6、选修了模式识别,教材用的是Duda的《模式分类》,一本砖头书,建议看前三章,主要涉及贝叶斯参数估计,另外LDA、PCA的推导也可以看看,讲的不错

7、选修了英文版矩阵论,用的教材是老师的讲义,其实国内戴华的《矩阵论》就讲的非常好,国外的推荐看Roger的《Matrix analysis》(大部头,选择性看)

8、买了《数据挖掘导论》(作者Ping-Ning Tan,不建议买Jiawei Han的那本),翻了翻,发现里面讲的算法大多已经了解了,讲的比较浅,适合入门,用来建立数据挖掘领域的知识体系结构

14年

1、跟俩基友水了一下阿里的推荐算法大赛,是真的水,我跟另一个基友半途而废浪掉了,后来就剩队长一人苦苦坚持。。。

2、选修了优化课程,自己课余读了读Forst的《Optimization_Theory and Practice》,偏应用一点,读完之后对理解LR、SVM等模型的优化方法,帮助非!常!大!

3、买了Harrington的《机器学习实战》,开始接触python,同时买了张若愚的《Python科学计算》(后来证明没必要买,作者在网上放了网页版,方便索引和查找),Harrington这本书里的代码只调用了两个包:numpy,scipy,还有个matplotlib用来画图,然后造了一些算法的轮子。现在看来scikit-learn包已经包含了几乎所有常见算法,所以这本书看看代码、选几个实现一下就好,没必要从头到尾实现

4、偶然接触了谱聚类,一发不可收拾,把领域相关的paper几乎扫了一遍,包括Ng2002年那篇、还有个很经典的turtorial,然后follow到了大神林达华的博客,看了他写的谱聚类与图论、马尔科夫链的联系,醍醐灌顶,自己用matlab实现了一下算法

5、开始躲着老师在支付宝搬砖,一开始蛮无聊的,跟着数据分析师纯写SQL,后来接触了新业务,有向网络的关键节点发现,自然而然联想到之前搞过的谱聚类,于是啃了一本20多页的turtorial,得出结论:有向图的谱聚类不适合用在该业务。。。后来又有个业务,主管建议用半监督学习,于是啃了Xiaojin Zhu的《Introduction to semi-supervised learning》,以及周志华的一些讲义和论文。朱晓进(音译)的这本导论书简单易懂,一下子就让读者catch到了半监督方法的精髓(还有一本偏理论一点的Chapelle的《Semi-supervised learning》可作为扩展阅读)。后来自己在用Python实现算法的过程中,遇到一个不小的障碍,于是follow到了大神pluskid的博客,一下子解决了我的问题

15年

1、买了项亮的《推荐系统实践》,大赞,国人难得有这样一本经典问世,虽然有瑕疵,但对于我等初学者来说,非常受益。读完之后对推荐系统用到的模型、整个知识体系都有深刻认识。用网上公开的数据集做了一个toy project

2、看了下coursera上明尼苏达两位老师的《Recommender system》,简单易懂,很快pass完这门课

3、把SVD++、Factorization machine相关的paper翻出来看了一遍,发现理论不难,而且早就有成熟的开源库了

4、最近看到一本好书,Kuhn的《Applied predictive model》,正在看,偏应用,讲了很多trick,在正统的机器学习理论书上不太提及,但是实际非常有用。不过是用R写的,像我这样不会R的童鞋,跳过代码就好了,或者自己用Python实现以下

额外的补充

对上面提到的资源再做一个补充,有些我看过但是忘了何时看的,有些过于基础的我自己不太会看了,还有些是我还没来得及看的

1、林轩田老师的《机器学习基石》和《机器学习技法》,在MOOC上评价相当高
2、Hinton的《神经网络》,我目前做的东西还不涉及深度学习,以后也许会follow
3、Vapnik的《Statistical Learning Theory》,实在是砖头书而且偏理论,国内有张学工老师的译本
4、Bishop的《PatternRecognitionandMachineLearning》,理由同上
5、Segaran的《Programming Collective Intelligence》,国内译本,叫《集体智慧编程》,蛮好的实践书,Python代码,适合入门,我暂时不需要了
6、大牛的博客,除了上面说的林达华、pluskid,还有jerrylead,LeftNotEasy,注意,不要被一个叫“研究者July”的人坑了!不懂的搜知乎对他的评价
7、问答社区,首推 Stackexchange,其次 Quora,还有知乎

目前的遗憾

1、没有真正坚持过一个比赛,对比赛中常用的trick,比如造特征、模型融合等,不是很熟练
2、没有真正上线过一个实际项目,所以实践能力还有待提高

最后我想说的是,虽然网上有很多对如何自学机器学习、数据挖掘话题的讨论,但本文是我基于我自己认识,一字一句写完的,若有雷同之处,希望各位包涵,也希望提出批评指正意见,毕竟作为一个自学者,难免有理解不当之处。