线上的Python的机器学习资源如此丰富,从哪开始?如何修炼?这篇文章让你从零开始,七步之内成为Python机器学习的大师。
作者:Matthew Mayo, KDnuggets. 翻译:philo
”Getting started“,英语里最具激励性的两个词。然而万事开头难,尤其是当面前摆着太多选择的时候,这往往使初学者感到困惑。
从哪开始?
这篇文章意在七步之内让一只Python机器学习菜鸟成为一名合格的老司机,并且全部的秘籍都来自于网络的上的免费资源。其实“七步心经”的主要目的在于帮助学习者在海量的学习资源中明确方向:哪些资源是最好的?哪些文献可以相互补充?按怎样的既定路线学习最有效?
在开始之前,我假定读者们并非以下方面的专家:
▪ 机器学习
▪ Python
▪ Python的机器学习库、科学计算库、数据分析库
如果对前两点略有了解的话,对于这篇文章的理解会有帮助,但也并非必要。
七步心经之一:Python基础
如果我们用Python来玩转机器学习,那么了解一些Python语言的基础知识还是很重要的。幸运的是,它作为最广泛使用的通用编程语言,同时也是科学计算和机器学习领域的常用语言,它的初学者教程也是非常通俗易懂。你对Python和编程的经验对于机器学习领域的入门很重要。
首先,你得先安装好Python环境。因为我们将会用到科学计算和机器学习等功能,我建议你安装Anacoda。它是一款具备企业级性能的Python集成开发环境,支持Linux、OSX和Windows平台,同时预装科学计算常用扩展包,包括numpy、scikit-learn以及matpolotlib。它同时包含iPython Notebook,一种可以为本教程提供交互演示的环境。我推荐Python的版本是2.7,也并没有其它原因,只是因为这个版本是主流安装版本。
如果你是没有编程经验的自学者,我建议从下面这本在线免费电子书开始,之后再往后进行:
▪ Python The Hard Way by Zed A. Shaw
如果你有其它语言的编程经验,但不太懂Python或者仅仅入门,我建议你学习以下一或两项内容:
▪ Google Developers Python Course (特别推荐视觉学习型选手)
▪ An Introduction to Python for Scientific Computing (from UCSB Engineering) by M. Scott Shell (一个非常棒的科学Python简介,约60页)
对于那些喜欢30分钟速成班的同学,那就看看这本:
▪ Learn X in Y Minutes (X = Python)
当然,如果你是一名有经验的Python程序猿,可以直接跳过这些步骤。即便如此,我也同样建议你放一些常用易读的Python工具书在手边。
七步心经之二:基本机器学习技巧
KDnugget的Zachary Lipton认为人们对于“数据科学家”这个概念的理解相差很多。这确实是机器学习领域的一个侧面反映,因为数据科学家常常在不同程度上使用机器学习算法。对于一名数据科学家来说真的有必要深刻理解支持向量机模型的核心算法以便高效的挖掘数据的内涵吗?当然没必要。正如生活中的其它事情一样,对于理论的理解程度是相对于实践的。深入理解机器学习的核心算法已经超出本文的探究范围,那是一个需要在一个学术环境里花费很多时间才能取得成就,至少也需要一段高强度的自学才能实现。
好消息是如果仅仅为了实践,你并没必要再机器学习的理论研究方面获得博士学位,同样的道理,并不是所有的程序猿都需要深入理解计算机科学才能成为高效的码农。
Andrew Ng的Coursera在线课程经常好评如潮;然而我的建议是看一看之前上过这些课程的学生笔记。跳过那些代码段(因为那些代码跟Python没有什么关系)。注意这些笔记并不是官方的教材,但确实会抓住Andrew的课程梗概。当然,如果你有时间和兴趣,现在也许就是在Coursera上参加Andrew Ng's Machine Learning(https://www.coursera.org/learn/machine-learning)的时机。
▪ Unofficial Andrew Ng course notes(http://www.holehouse.org/mlclass/)
除了Coursera官方的课程外,还有其它很多相关视频讲座。我是Tom Mitchell的粉丝,这里也为大家提供了他近期的演讲链接(还有 Maria-Florina Balcan的):
▪ Tom Mitchell Machine Learning Lectur(http://www.cs.cmu.edu/~ninamf/courses/601sp15/lectures.shtml)
你并不需要现在就看完所有的笔记和视频。一个有效策略是边做边学,例如当你向后做到回归模型的时候,可以回到这一步翻看相关章节的笔记或者视频讲座。
七步心经之三:Python科学计算包概览
好啦!经过前两步,我们已经对Python编程和机器学习都有所了解啦。除了Python还有很多开源库被设计用来实现机器学习。一般来说,这些库就是所谓的科学Python计算库,我们常用来实现基本机器学习任务(作者认为):
▪ numpy - 主要用来实现N维矩阵相关计算
▪ pandas - Python数据分析库,包括一些特殊的数据结构如数据帧
▪ matplotlib - 2维绘图库,用于产生出版级图表
▪ scikit-learn - 数据分析和数据挖掘的机器算法库
一个很好的了解这些库的方法是阅读下面的材料:
▪ Scipy Lecture Notes(http://www.scipy-lectures.org/)作者: Gaël Varoquaux, Emmanuelle Gouillart, 和 Olav Vahtras
下面这个pandas的教程不错,直击要点:
▪ 10 Minutes to Pandas(http://pandas.pydata.org/pandas-docs/stable/10min.html)
在接下来的教程中,你还会遇到一些其它扩展包,如Seaborn,它是一个基于matpolotlib的数据可视化库。Afroementioned扩展包也是Python中大量机器学习任务的核心(同样,也是作者认为);理解它们应该让你对接下来教程中提到的其它相关扩展包的不再感到困惑。
现在,到好玩的啦
七步心经之四:牛刀小试
Python 搞定
机器学习基础 搞定
Numpy 搞定
Pandas 搞定
Matpolotlib 搞定
现在,让我们开始实践一些机器学习的算法,借助于Python的标准机器学习库————scikit-learn。接下来的教程和练习将会在iPython Notebook中进行,它是一个交互式Python执行环境。这些iPython Notebook既可以在线访问也可以下载到本地计算机。
▪ iPython Notebook(http://cs231n.github.io/ipython-tutorial/)Overview from Stanford
同时注意以下的教程来自于很多线上资源。全部的Notebooks著作权归作者所有,如果因为某些原因,你发现某人的工作并不完全来自于原创,请尽快告知我(https://twitter.com/mattmayo13),这种情况将会马上被修正。特别的,我向以下几位为贡献免费资源的人表达由衷的感谢,他们是Jake VanderPlas, Randal Olson, Donne Martin, Kevin Markham, 以及Colin Raffel。
我建议在开始后续步骤之前,应该有序的逐步掌握scikit-learn。
▪ An Introduction to scikit-learn(http://nbviewer.ipython.org/github/donnemartin/data-science-ipython-notebooks/blob/master/scikit-learn/scikit-learn-intro.ipynb) 作者:Jake VanderPlas
一个更深入更广泛的介绍,包含一个完整的初学者项目,从开始到结束:
▪ Example Machine Learning Notebook(http://nbviewer.ipython.org/github/rhiever/Data-Analysis-and-Machine-Learning-Projects/blob/master/example-data-science-notebook/Example%20Machine%20Learning%20Notebook.ipynb)作者:Randal Olson
下面是一个专注于验证scikit-learn中不同模型有效性的研究,包括训练/测试数据集:
▪ Model Evaluation(https://github.com/justmarkham/scikit-learn-videos/blob/master/05_model_evaluation.ipynb)作者:Kevin Markham
七步心经之五:机器之心
对于scikit-learn已有一定基础之后,我们可以更深入的探讨一些常用的算法。我们首先以最著名的机器学习算法————K近邻算法为例。它是一种解决无监督学习问题的简单高效的算法:
▪ k-means Clustering(https://github.com/jakevdp/sklearn_pycon2015/blob/master/notebooks/04.2-Clustering-KMeans.ipynb)作者:Jake VanderPlas
接下来,我们移步分类算法,历史上最流行的分类方法:
▪ Decision Trees(http://thegrimmscientist.com/2014/10/23/tutorial-decision-trees/)通过 The Grimm Scientist
从分类算法中引申出连续数值预测算法:
▪ Linear Regression(http://nbviewer.ipython.org/github/donnemartin/data-science-ipython-notebooks/blob/master/scikit-learn/scikit-learn-linear-reg.ipynb)作者 Jake VanderPlas
之后我们可以利用回归算法来解决分类问题,通过Logistics回归算法:
▪ Logistic Regression(http://nbviewer.ipython.org/github/justmarkham/gadsdc1/blob/master/logistic_assignment/kevin_logistic_sklearn.ipynb)作者:Kevin Markham
七步心经之六:机器之智
我们已经涉足scikit-learn扩展包,现在我们将把注意力转移到更高级一些的主题。首先是支持向零机,它是一种将数据经过复杂变换到高纬空间的非必要线性分类器。
▪ Support Vector Machines(https://github.com/jakevdp/sklearn_pycon2015/blob/master/notebooks/03.1-Classification-SVMs.ipynb)by Jake VanderPlas
之后,是随机森林算法,它是一种集成分类器,它是经过Kaggle的Titanic号幸存者实验论证过的:
▪ Kaggle Titanic Competition (http://nbviewer.ipython.org/github/donnemartin/data-science-ipython-notebooks/blob/master/kaggle/titanic.ipynb) 作者:Donne Martin
降维是一种通过减少问题中需要考虑的变量的算法。主成分分析就是一种非监督降维算法:
▪ Dimensionality Reduction(https://github.com/jakevdp/sklearn_pycon2015/blob/master/notebooks/04.1-Dimensionality-PCA.ipynb) 作者:Jake VanderPlas
在继续进入最后一步之前,我们可以对之前,在相对很短的一段时间里,学到的如此丰富的知识加以回顾。
使用Python和相关机器学习库,我们已经实现了最常用和著名的机器学习算法(k近邻, k均值集合, 支持向量机),研究了一种有效的集合技巧(随机森林),然后介绍了某些算法的实际应用方法(如降维和模型验证技巧)。经过学习这些基本机器学习技巧,我们已经开始积累属于自己的机器学习工具套装啦。
在收尾之前,我们将为这个工具套装再增加一件利器。
机器学习心境之七:机器之灵
深度学习已经遍布每个角落! 深度学习是基于神经网络的相关研究,而这种研究可以追溯到几十年前,但最近的发展是它大大提高了深度神经网络的理解能力。若果你对深度学习并不熟悉,KDnuggets有很多文章介绍这个领域的最新创新成果。
这最后一步,不打算详细介绍每一种深度学习的方法;我们将会以两种简单的神经网络实现为例介绍现代Python深度学习库。对于那些想进一步钻研深度学习的人,我建议从下面这本免费的在线电子书开始:
▪ Neural Networks and Deep Learning(http://neuralnetworksanddeeplearning.com/)作者:Michael Nielsen
Theano
Theano是第一个我们将要关注的Python深度学习库:Theano是一个允许使用者自己定义、优化并能高效计算多维数组的Python扩展库(作者注)
下面这本介绍基于Theano的深度学习的书有点冗长,但是它真的非常好,描述的很详尽,并且注释很充分:
▪ Theano Deep Learning Tutorial(http://nbviewer.ipython.org/github/craffel/theano-tutorial/blob/master/Theano%20Tutorial.ipynb) 作者:Colin Raffel
Caffe
另外一个我们将适用的深度学习包是Caffe:它是一套深度学习框架,由表达式、speed以及概念模块构成。它是由伯克利视觉和学习中心(BVLC)研发和社区贡献者共同研发的。(作者注)
这个教程是整篇文章的亮点所在。尽管我们已经在之前见识了些有趣的例子,但没有一个可以与此相匹敌,Google的DeepDream项目正是基于Caffe进行的。好好享受它吧!在学习了这个教程之后,玩玩里面提到的方法,让你的处理器也体会下做梦的快乐。
▪ Dreaming Deep with Caffe via Google's GitHub(https://github.com/google/deepdream)
我并没有承诺机器学习很好上手,但是如果你愿意花时间和按照上述七步心境认真修炼,那么你必将在机器学习算法以及它们的Python实现上达到合理的能力水平,并且能够理解那些前沿的深度学习研究。