您的位置:首页 > 编程语言 > Python开发

《python机器学习系统设计》笔记一:python机器学习入门

2014-10-28 10:58 423 查看
机器学习(数据挖掘或预测分析)

统计学

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://metaoptimaze.com/qa

http://stats.stackexchange.com

http://stackoverflow.com

http://www.twotoreal.com

博客

http://blog.kaggle.com

John Langford http://hunch.net 机器学习理论

http://textanddatamining.blogspot.de 文本与数据挖掘实用方法

Edwin Chen http://blog.echen.me

http://www.machinedlearnings.com 大数据学习

http://simplystatistics.org

http://andrewgelman.com 统计学建模

数据资源

UCI Machine Learning Repository http://archive.ics.uci.edu/ml
机器学习程序包

MDP http://mdp-toolkit.sourceforge.net 数据处理模块化工具箱

Pybrain http://pybrain.org

http://mloss.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 依赖于BoostCMake

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 —快速入门

/article/7014108.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 文档中的内容。






内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: