机器学习(数据挖掘或预测分析)
统计学
Python语言是一门完全面向对象的编程语言,在很多领域有成功的应用,为Google公司三大编程语言之一(C++,Java,Python),在数据挖掘、数据分析与处理、数据可视化、网络编程等方面,具有非常大的优势。
工作流程
(1)读取和清洗数据
(2)探索和理解输入数据
统计学和基础数学
你的数据能够更多的机器学习算法
(3)分析如何最好地将数据呈现给学习算法
特征工程
(4)选择正确的模型和学习算法
(5)正确地评估性能
相关资源
在线资源
Andrew Ng http://www.coursera.org
参考书
Christopher M.Bishop 《Pattern Recognition and Machine Learning 》
K.Murphy 《Machine Learning:A Probabilistic Perspective》
问答网站
http://stats.stackexchange.com
博客
John Langford http://hunch.net 机器学习理论
http://textanddatamining.blogspot.de 文本与数据挖掘实用方法
Edwin Chen http://blog.echen.me
http://www.machinedlearnings.com 大数据学习
http://andrewgelman.com 统计学建模
数据资源
UCI Machine Learning Repository http://archive.ics.uci.edu/ml
机器学习程序包
MDP http://mdp-toolkit.sourceforge.net 数据处理模块化工具箱
Pybrain http://pybrain.org
libsvm http://www.csie.ntu.edu.tw/~cjlin/libsvm/ 支持向量机界最牛的
WEKA http://www.cs.waikato.ac.nz/ml/weka/ 基于java的机器学习算法最全面最易用的开源软件;java的机器学习库也十分流行,主要体现在大数据下的jvm的本质和算法并行化的优势
Mallet http://mallet.cs.umass.edu/ 基于JAVA实现的机器学习库,主要用于自然语言处理方面,特色是马尔可夫模型和随机域做得好,可和WEKA互补
lucene http://lucene.apache.org/ 基于java的包括nutch,solr,hadoop,mahout等全套,是做信息检索和搜索引擎的同志们必学的开源软件了,学JAVA的必学
OpenCv http://opencv.willowgarage.com/wiki/ 最牛的开源计算机视觉库了,前途无可限量,做图像处理与模式识别的一定要用,总不能整天抱着matlab做实验和工业界脱节吧,但是有一定难度
Orange http://orange.biolab.si/ 基于c++和python接口的机器学习软件,界面漂亮,调用方便,可以同时学习C++和python,还有可视化的功能
NLTK http://nltk.org/ python自然处理开源库,非常易用,也强大,还有几本orelly的经典教程
milk http://pypi.python.org/pypi/milk python机器学习工具包,主要是针对监督学习,包括svm/knn/决策树
Octave http://www.gnu.org/software/octave/ NG课上推荐使用的,类似matlab
Shark 是一个快速、模块化、功能丰富的开源 C++ 机器学习库,提供了各种机器学习相关技术,比如线性/非线性优化、基于内核学习算法、神经网络等, Shark 依赖于Boost 和CMake
MLPACK 是一个 C++ 的机器学习库,其重点是可伸缩性、速度和易用
Python 2.7或 Python(x,y)
NumPy 1.67
SciPy 0.11
Scikit-learn 0.13 基于python的机器学习软件,代码写得非常好,而且官方的文档非常全,所有都有例子,算法也齐全,开发也活跃
matplotlib
dateutil The dateutil module provides powerful extensions to the standard datetime module, available in Python 2.3+.
pyparsing The pyparsing module provides a library of classes that client code uses to construct the grammar directly in Python code.
SciPy工具包
scipy.cluster、scipy.stats、scipy.interpolate、scipy.signal、scipy.constants、scipy.fftpack、scipy.integrate、scipy.io、scipy.linalg、scipy.maxentropy、scipy.ndimage、scipy.odr、scipy.optimize、scipy.sparse、scipy.special、scipy.spatial
数值计算库
NumPy为Python提供了快速的多维数组处理的能力,而SciPy则在NumPy基础上添加了众多的科学计算所需的各种工具包,有了这两个库,Python就有几乎和Matlab一样的处理数据和计算的能力了。
NumPy和SciPy官方网址: http://www.scipy.org
NumPy为Python带来了真正的多维数组功能,并且提供了丰富的函数库处理这些数组。它将常用的数学函数都进行数组化,使得这些数学函数能够直接对数组进行操作,将本来需要在Python级别进行的循环,放到C语言的运算中,明显地提高了程序的运算速度。
SciPy的核心计算部分都是一些久经考验的Fortran数值计算库,例如:
- 线性代数使用LAPACK库
- 快速傅立叶变换使用FFTPACK库
- 常微分方程求解使用ODEPACK库
- 非线性方程组求解以及最小值求解等使用MINPACK库
符号计算库
SymPy是一套进行符号数学运算的Python函数库,可以帮助我们进行公式推导,进行符号求解
界面设计
Traits库分为Traits和TraitsUI两大部分,Traits为Python添加了类型定义的功能,使用它定义的traits属性具有初始化、校验、代理、事件等诸多功能。
TraitsUI库基于Traits库,使用MVC结构快速地定义用户界面,在最简单的情况下,你甚至不需要写一句关于界面的代码,就可以通过traits属性定义获得一个可以工作的用户界面。使用TraitsUI库编写的程序自动支持wxPython和pyQt两个经典的界面库。
绘图与可视化
Chaco和matplotlib是很优秀的2D绘图库,Chaco库和Traits库紧密相连,方便制作动态交互式的图表功能。而matplotlib库则能够快速地绘制精美的图表、以多种格式输出,并且带有简单的3D绘图的功能。
matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。它的文档相当完备,并且 Gallery页面 中有上百幅缩略图,打开之后都有源程序。因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定。
TVTK库在标准的VTK库之上用Traits库进行封装,如果要在Python下使用VTK,用TVTK是再好不过的选择。Mayavi2则在TVTK的基础上再添加了一套面向应用的方便工具,它既可以单独作为3D可视化程序使用,也可以快速地嵌入到用户的程序中去。(视觉化工具函式库VTK, Visualization Toolkit是一个开放源码,跨平台、支援平行处理的图形应用函式库)
此外,使用Visual库能够快速、方便地制作3D动画演示,使你的数据结果更有说服力。Visual官方网址: http://vpython.org
图像处理与计算机视觉
OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。OpenCV提供的Python API方便我们快速实现算法,查看结果并且和其它的库进行数据交换。
scikit-learn —快速入门
http://www.cnblogs.com/daniel-D/p/3700830.html
准备
sklearn 快速入门的官方文档在这里。这个文档主要描述机器学习的概念,以及如何加载数据,训练模型,保存模型。
这里提供另外一个更加详细的材料,这份材料基于ipython notebook
,可以在浏览器里运行代码,功能强大,演示效果非常好,github下载地址。如果电脑上没有安装git,请参考这篇博客进行设置。
- 将材料下载到本地:
git clone git@github.com:jakevdp/sklearn_pycon2013.git
- 安装 ipython-notebook
sudo easy_install "ipython>=0.13" jinja2 "tornado>=3.1.0" pyzmq sudo apt-get install ipython-notebook
- 打开材料
cd PATH/TO/sklearn_pycon2013/notebook ipython notebook --pylab inline
--pylab inline 参数可以使 notebook 在浏览器里面直接画图效果
数据
sklearn 中的数据一般存放为二维数组,形状为 [n_samples, n_feartures]。比如著名的 iris 数据集(鸢尾花)包含了三种类别的花(target),共 150 组数据(samples),每组数据由 4 个特征组成,具体来说就是:萼片的长度、萼片的宽度、花瓣的长度、花瓣的宽度。那么,iris 数据集的 data 就由 150*4 的二维数组组成。
sklearn 提供了很多数据集,一类比较小,直接打包在库中,可以通过 datasets.load_ + Tab
来查看,另一类比较大,需要下载,可以通过datasets.fetch_ + Tab
查看,下载的目录可以通过sklearn.datasets.get_data_home()
查看。
更详细的信息请参考 notebook 中的 02_sklearn_data.ipynb
文件。
接口
创建一个机器学习的模型很简单:
from sklearn.linear_model import LinearRegression
model = LinearRegression()
print model
所有模型提供的接口有:
- model.fit(): 实际上就是训练,对于监督模型来说是 fit(X, y),对于非监督模型是 fit(X)。
监督模型提供:
- model.predict(X_new): 判别新样本
- model.predict_proba(X_new): 某些模型可以输出概率,比如 LR,上一个输出的就是概率最大的 target
- model.score(): 得分越高,fit 越好
非监督模型提供:
- model.transform(): 从数据中学到新的“基空间”。
- model.fit_transform(): 从数据中学到新的基并将这个数据按照这组“基”进行转换。
下面这个图展示了这些接口在机器学习模型中的位置:
更多信息请查看 ipython notebook 文档中的内容。