机器学习七:为什么要学Python

来源:互联网 发布:淘宝女装店铺公告范文 编辑:程序博客网 时间:2024/05/16 05:19


虽然吴恩达老师在视频中用的MATLAB,但是Python用得更顺手的AI菌还是决定用Python来向大家展示机器学习的实例。所以今天就要概述一下Python,同时介绍一下机器学习中常用的Python包。

为什么是Python

主要的原因可以参考一下七点,当然对于我们来说第五点是最重要的原因。

1. Python 易于学习

相较于其它许多你可以拿来用的编程语言而言,它“更容易一些”。Python 的语言没有多少仪式化的东西,所以就算不是一个 Python 专家,你也能读懂它的代码。我的经验是,通过实例来学习和教授 Python 要比采取同样的方式去接触比方说 Ruby 或者 Perl 更加容易,因为 Python 的语法里面条条框框以及特殊的处理场景要少得多。 它所专注的并非语言表现的丰富程度,而是你想要用你的代码完成什么。


2. Python 让你能用少量的代码构建出更多的功能

Python 能带给所有开发者一种快速的学习体验。通过实践,你可以在最多两天之内轻松实现一个具备基础功能的游戏 (而这还是在对编程完全不了解的情况下)。

另外一些让 Python 成为一门引人注目的编程语言的因素就是它的可读性和高效性。


3. Python 是一门多才多艺的语言,更是一个平台

Python 今年 28 岁了。尽管它比我的许多读者年纪还要大,但是仍然受到高度的关注,因为它可以被应用于如今你所能想得到的相当多的软件开发和操作场景。要管理本地或者云基础设施吗?Python可以。开发网站?OK,它也能行的。需要处理一个 SQL 数据库?可以。需要为 Hive 或者 Pig 定制一个功能?能做到。只是想为自己构建一个小工具?Python 就是最好的选择。需要一门支持面向对象设计的语言?Python 的特性就能满足啦。简而言之,将 Python 了解得更加深入一点点,就能让你具备可以适应范围更宽泛的工作角色的技能。


4. Python 拥有最成熟的程序包资源库之一

一旦你了解了该语言,就可以利用上这个平台。Python 以 PyPI (读作 Pie-Pie,可以从这里在线进行了解)为其后盾, 这是一个拥有超过 85,000 个 Python 模块和脚本的资源库,你拿过来就立马可以使用。这些模块向你的本地 Python 环境分发已经预先打包好的功能,可以用来解决各种诸如数据库处理,计算机视觉实现,像维度分析这样的高级数据分析的执行,或者是构建 REST 风格的 web 服务这些问题

5. Python 在数据科学领域被广泛使用

不管你从事的是什么工作,数据都会是其中的一部分。IT,软件开发,市场等等 —— 它们都深度地关乎数据且对于智慧求之若渴。很快数据分析技能就会像编码技能一样的重要,而 Python 在两个领域都占有重要的地位。Python 紧挨着 R 语言,都是现代数据科学中最常被使用的语言。事实上,在数据科学领域,Python 的职位职位需求超过了 R 语言。你在学习 Python 时发展出来的技能将会直接转换并被用来构建起自己的这些分析技能。


6. Python 是跨平台且开源的

Python 可以跨平台运行,并且已经开放源代码超过20年的时间了,如果你需要代码能同时在Linux,Windows 以及 macOS 上跑起来,Python 就能满足要求。此外,有数十年的修修补补以及不断完善做后盾,可以确保你能够随心所欲地运行自己的代码。


7. Python 是灵活的

有一些Python同其它编程语言集成在一起的稳定实现。

  1. CPython, 同 C 集成的版本

  2. Jython, 同 Java 集成的Python版本

  3. IronPython, 被设计用来兼容 .Net 和 C#

  4. PyObjc, ObjectiveC 工具下的 Python 写法

  5. RubyPython, 同 Ruby 集成的 Python 版本


Python常用机器学习包

scikit-learn

scikit-learn如果不是最流行的,那么也算得上是所有语言中流行的机器学习库之一。它拥有大量的数据挖掘和数据分析功能,使其成为研究人员和开发者的首选库。


其内置了流行的NumPy、SciPy,matplotlib库,因此对许多已经使用这些库的人来说就有一种熟悉的感觉。尽管与下面列出的其他库相比,这个库显得水平层次略低,并倾向于作为许多其他机器学习实现的基础。

擅长:非常多



Tensorflow

Tensorflow是高级神经网络库,可以帮助你设计你的网络架构,避免出现低水平的细节错误。重点是允许你将计算表示成数据流图,它更适合于解决复杂问题。


此库主要使用C++编写,包括Python绑定,所以你不必担心其性能问题。它灵活的体系结构,允许你使用相同的API将其部署到一个或多个CPU或GPU的台式机、服务器或者移动设备。有此功能的库并不多,如果要说有,Tensorflow就是其一。

它是为谷歌大脑项目开发的,目前已被数百名工程师使用,所以无须怀疑它是否能够创造有趣的解决方案。


尽管和其它的库一样,你可能必须花一些时间来学习它的API,但花掉的时间应该是很值得的。

擅长:神经网络



Theano

Theano是一个机器学习库,允许你定义、优化和评估涉及多维数组的数学表达式,这可能是其它库开发商的一个挫折点。与scikit-learn一样,Theano也很好地整合了NumPy库。GPU的透明使用使得Theano可以快速并且无错地设置,这对于那些初学者来说非常重要。然而有些人更多的是把它描述成一个研究工具,而不是当作产品来使用,因此要按需使用。


Theano最好的功能之一是拥有优秀的参考文档和大量的教程。事实上,多亏了此库的流行程度,使你在寻找资源的时候不会遇到太多的麻烦,比如如何得到你的模型以及运行等。

擅长:神经网络和深度学习

 


Caffe

Caffe是面向视觉应用领域的机器学习库。你可能会用它来创建深度神经网络,识别图像中的实体,甚至可以识别一个视觉样式。

Caffe提供GPU训练的无缝集成,当你训练图像时极力推荐使用此库。虽然Caffe似乎主要是面向学术和研究的,但它对用于生产使用的训练模型同样有足够多的用途。

擅长:神经网络/视觉深度学习



 Gensim 

被定义为“人们的主题建模工具(topic modeling for humans)”。它的主页上描述,其焦点是狄利克雷划分(Latent Dirichlet Allocation, LDA)及变体。不同于其他包,它支持自然语言处理,能将NLP和其他机器学习算法更容易组合在一起。如果你的领域在NLP,并想进行聚集和基本的分类,你可以看看。目前,它们引入了Google的基于递归神经网络(Recurrent Neural Network)的文本表示法word2vec。这个库只使用Python编写。


Pylearn2

大多数Pylearn2的功能实际上都是建立在Theano之上,所以它有一个非常坚实的基础。


Pylearn2不同于scikit-learn,Pylearn2旨在提供极大的灵活性,使研究者几乎可以做任何想做的事情,而scikit-learn的目的是作为一个“黑盒”来工作,即使用户不了解实现也能产生很好的结果。


记住,Pylearn2在合适的时候会封装其它的库,如scikit-learn,所以在这里你不会得到100%用户编写的代码。然而,这确实很好,因为大多数错误已经被解决了。像Pylearn2这样的封装库在此列表中有很重要的地位。

擅长:神经网络



 Statsmodels

Statsmodels 是一个聚焦在统计模型上的强大的库,主要用于预测性和探索性分析。如果你想拟合线性模型、进行统计分析,或者预测性建模,那么Statsmodels非常适合。它提供的统计测试相当全面,覆盖了大部分情况的验证任务。对于不同类型的数据和模型估计,都有描述性统计,统计测试,绘图功能和结果统计的详细列表可用。


如果你是R或者S的用户,它也提供了某些统计模型的R语法。它的模型同时也接受Numpy数组和Pandas数据帧,让中间数据结构成为过去!


Shogun 

Shogun是个聚焦在支持向量机(Support Vector Machines, SVM)上的机器学习工具箱,用C++编写。 这个工具箱允许多个数据表达,算法类和通用工具无缝组合。


它正处于积极开发和维护中,提供了Python接口,也是文档化最好的接口。但是,相对于Scikit-learn,我们发现它的API比较难用。而且,也没提供很多开箱可用的诊断和求值算法。但是,速度是个很大的优势。



Chainer 是一个基于 Python 的独立的深度学习模型开源框架。Chainer 提供了灵活、直观且高性能的方法实现全方位的深度学习模型,包括循环神经网络 (recurrent neural networks) 和变分自编码器(variational autoencoders)这些最新的模型 



NuPIC

Nupic是另一个库,与标准的机器学习算法相比,它提供了一些不同的功能。它基于一个称作层次时间记忆(HTM)的新皮层理论,。HTMs可以看作是一类神经网络,但在一些理论上有所不同。

从根本上说,HTMs是一个分层的、基于时间的记忆系统,可以接受各种数据。这意味着会成为一个新的计算框架,来模仿我们大脑中的记忆和计算是如何密不可分的。对于理论及其应用的详细说明,请参阅 白皮书。

擅长:HTMs



 Neon 

 Neon 是 Nervana 公司一个基于 Python 的深度学习库。它易于使用且具有超高的性能。



Nilearn

Nilearn 是一个 Python 模块,用于在神经成像 (NeuroImaging) 数据上进行快速简单的统计学习。它利用 scikit-learn Python 工具箱来处理多变量统计信息,包括预测建模,分类,解码或连接分析.



Orange3

Orange3 是一个同时适用于新手和数据专家的机器学习和数据可视化开源软件,支持拥有大型工具箱的交互式数据分析工作流程。



Pymc

Pymc 是一个Python 模块,它能实现贝叶斯统计模型和拟合算法,包括马尔科夫链蒙特卡罗(Markov chain Monte Carlo)算法。它非常灵活,具有可扩展性,适用于处理一系列大规模问题。如果想进行贝叶斯分析,你应该看看。



PyBrain

PyBrain 是一个模块化的 Python 机器学习库。它致力于为机器学习任务提供灵活易上手但功能强大的算法,和一系列用于测试和比较算法的预定义环境。



 Fuel

 Fuel 是一个数据管道框架(data pipeline framework),它为机器学习模型提供所需的数据。Blocks 和 Pylearn2 这两个神经网络库都有计划使用 Fuel。



PyMVPA 

PyMVPA 是一个 Python 包,旨在简化大型数据集的统计学习分析。它提供了一个可扩展的框架和一个用于分类,回归,特征选择,数据导入导出等算法的高级接口。

API上与Scikit-learn很像。包含交叉验证和诊断工具,但是没有Scikit-learn全面。



 Annoy

 Annoy (Approximate Nearest Neighbors Oh Yeah) 是一个带有 Python 绑定的 C++ 库,用于在空间中找到和已知的查询点临近的点。它还可以创建大型的基于文件的只读数据结构,并映射至内存,以便多个进程能共同使用相同的数据。



Deap 

Deap 是一个创新的,仍在发展中的计算框架,用于快速构建原型和测试方法。它旨在使算法和数据结构更加清晰透明。它与并行机制(如多进程和 SCOOP 模块)完美协调。



 Pattern

 Pattern 是一个 Python 的网络挖掘模块。它绑定了数据挖掘(Google + Twitter + Wikipedia API, 网络爬虫, HTML DOM 解析器),自然语言处理 (词性标记, n-gram 搜索, 语义分析, WordNet),机器学习(向量空间模型, k-means 聚类, Naive Bayes + k-NN + SVM 分类器) 和网络分析(图核心性 graph centrality 和可视化)等工具。

虽然吴恩达老师在视频中用的MATLAB,但是Python用得更顺手的AI菌还是决定用Python来向大家展示机器学习的实例。所以今天就要概述一下Python,同时介绍一下机器学习中常用的Python包。

为什么是Python

主要的原因可以参考一下七点,当然对于我们来说第五点是最重要的原因。

1. Python 易于学习

相较于其它许多你可以拿来用的编程语言而言,它“更容易一些”。Python 的语言没有多少仪式化的东西,所以就算不是一个 Python 专家,你也能读懂它的代码。我的经验是,通过实例来学习和教授 Python 要比采取同样的方式去接触比方说 Ruby 或者 Perl 更加容易,因为 Python 的语法里面条条框框以及特殊的处理场景要少得多。 它所专注的并非语言表现的丰富程度,而是你想要用你的代码完成什么。


2. Python 让你能用少量的代码构建出更多的功能

Python 能带给所有开发者一种快速的学习体验。通过实践,你可以在最多两天之内轻松实现一个具备基础功能的游戏 (而这还是在对编程完全不了解的情况下)。

另外一些让 Python 成为一门引人注目的编程语言的因素就是它的可读性和高效性。


3. Python 是一门多才多艺的语言,更是一个平台

Python 今年 28 岁了。尽管它比我的许多读者年纪还要大,但是仍然受到高度的关注,因为它可以被应用于如今你所能想得到的相当多的软件开发和操作场景。要管理本地或者云基础设施吗?Python可以。开发网站?OK,它也能行的。需要处理一个 SQL 数据库?可以。需要为 Hive 或者 Pig 定制一个功能?能做到。只是想为自己构建一个小工具?Python 就是最好的选择。需要一门支持面向对象设计的语言?Python 的特性就能满足啦。简而言之,将 Python 了解得更加深入一点点,就能让你具备可以适应范围更宽泛的工作角色的技能。


4. Python 拥有最成熟的程序包资源库之一

一旦你了解了该语言,就可以利用上这个平台。Python 以 PyPI (读作 Pie-Pie,可以从这里在线进行了解)为其后盾, 这是一个拥有超过 85,000 个 Python 模块和脚本的资源库,你拿过来就立马可以使用。这些模块向你的本地 Python 环境分发已经预先打包好的功能,可以用来解决各种诸如数据库处理,计算机视觉实现,像维度分析这样的高级数据分析的执行,或者是构建 REST 风格的 web 服务这些问题

5. Python 在数据科学领域被广泛使用

不管你从事的是什么工作,数据都会是其中的一部分。IT,软件开发,市场等等 —— 它们都深度地关乎数据且对于智慧求之若渴。很快数据分析技能就会像编码技能一样的重要,而 Python 在两个领域都占有重要的地位。Python 紧挨着 R 语言,都是现代数据科学中最常被使用的语言。事实上,在数据科学领域,Python 的职位职位需求超过了 R 语言。你在学习 Python 时发展出来的技能将会直接转换并被用来构建起自己的这些分析技能。


6. Python 是跨平台且开源的

Python 可以跨平台运行,并且已经开放源代码超过20年的时间了,如果你需要代码能同时在Linux,Windows 以及 macOS 上跑起来,Python 就能满足要求。此外,有数十年的修修补补以及不断完善做后盾,可以确保你能够随心所欲地运行自己的代码。


7. Python 是灵活的

有一些Python同其它编程语言集成在一起的稳定实现。

  1. CPython, 同 C 集成的版本

  2. Jython, 同 Java 集成的Python版本

  3. IronPython, 被设计用来兼容 .Net 和 C#

  4. PyObjc, ObjectiveC 工具下的 Python 写法

  5. RubyPython, 同 Ruby 集成的 Python 版本


Python常用机器学习包

scikit-learn

scikit-learn如果不是最流行的,那么也算得上是所有语言中流行的机器学习库之一。它拥有大量的数据挖掘和数据分析功能,使其成为研究人员和开发者的首选库。


其内置了流行的NumPy、SciPy,matplotlib库,因此对许多已经使用这些库的人来说就有一种熟悉的感觉。尽管与下面列出的其他库相比,这个库显得水平层次略低,并倾向于作为许多其他机器学习实现的基础。

擅长:非常多



Tensorflow

Tensorflow是高级神经网络库,可以帮助你设计你的网络架构,避免出现低水平的细节错误。重点是允许你将计算表示成数据流图,它更适合于解决复杂问题。


此库主要使用C++编写,包括Python绑定,所以你不必担心其性能问题。它灵活的体系结构,允许你使用相同的API将其部署到一个或多个CPU或GPU的台式机、服务器或者移动设备。有此功能的库并不多,如果要说有,Tensorflow就是其一。

它是为谷歌大脑项目开发的,目前已被数百名工程师使用,所以无须怀疑它是否能够创造有趣的解决方案。


尽管和其它的库一样,你可能必须花一些时间来学习它的API,但花掉的时间应该是很值得的。

擅长:神经网络



Theano

Theano是一个机器学习库,允许你定义、优化和评估涉及多维数组的数学表达式,这可能是其它库开发商的一个挫折点。与scikit-learn一样,Theano也很好地整合了NumPy库。GPU的透明使用使得Theano可以快速并且无错地设置,这对于那些初学者来说非常重要。然而有些人更多的是把它描述成一个研究工具,而不是当作产品来使用,因此要按需使用。


Theano最好的功能之一是拥有优秀的参考文档和大量的教程。事实上,多亏了此库的流行程度,使你在寻找资源的时候不会遇到太多的麻烦,比如如何得到你的模型以及运行等。

擅长:神经网络和深度学习

 


Caffe

Caffe是面向视觉应用领域的机器学习库。你可能会用它来创建深度神经网络,识别图像中的实体,甚至可以识别一个视觉样式。

Caffe提供GPU训练的无缝集成,当你训练图像时极力推荐使用此库。虽然Caffe似乎主要是面向学术和研究的,但它对用于生产使用的训练模型同样有足够多的用途。

擅长:神经网络/视觉深度学习



 Gensim 

被定义为“人们的主题建模工具(topic modeling for humans)”。它的主页上描述,其焦点是狄利克雷划分(Latent Dirichlet Allocation, LDA)及变体。不同于其他包,它支持自然语言处理,能将NLP和其他机器学习算法更容易组合在一起。如果你的领域在NLP,并想进行聚集和基本的分类,你可以看看。目前,它们引入了Google的基于递归神经网络(Recurrent Neural Network)的文本表示法word2vec。这个库只使用Python编写。


Pylearn2

大多数Pylearn2的功能实际上都是建立在Theano之上,所以它有一个非常坚实的基础。


Pylearn2不同于scikit-learn,Pylearn2旨在提供极大的灵活性,使研究者几乎可以做任何想做的事情,而scikit-learn的目的是作为一个“黑盒”来工作,即使用户不了解实现也能产生很好的结果。


记住,Pylearn2在合适的时候会封装其它的库,如scikit-learn,所以在这里你不会得到100%用户编写的代码。然而,这确实很好,因为大多数错误已经被解决了。像Pylearn2这样的封装库在此列表中有很重要的地位。

擅长:神经网络



 Statsmodels

Statsmodels 是一个聚焦在统计模型上的强大的库,主要用于预测性和探索性分析。如果你想拟合线性模型、进行统计分析,或者预测性建模,那么Statsmodels非常适合。它提供的统计测试相当全面,覆盖了大部分情况的验证任务。对于不同类型的数据和模型估计,都有描述性统计,统计测试,绘图功能和结果统计的详细列表可用。


如果你是R或者S的用户,它也提供了某些统计模型的R语法。它的模型同时也接受Numpy数组和Pandas数据帧,让中间数据结构成为过去!


Shogun 

Shogun是个聚焦在支持向量机(Support Vector Machines, SVM)上的机器学习工具箱,用C++编写。 这个工具箱允许多个数据表达,算法类和通用工具无缝组合。


它正处于积极开发和维护中,提供了Python接口,也是文档化最好的接口。但是,相对于Scikit-learn,我们发现它的API比较难用。而且,也没提供很多开箱可用的诊断和求值算法。但是,速度是个很大的优势。



Chainer 是一个基于 Python 的独立的深度学习模型开源框架。Chainer 提供了灵活、直观且高性能的方法实现全方位的深度学习模型,包括循环神经网络 (recurrent neural networks) 和变分自编码器(variational autoencoders)这些最新的模型 



NuPIC

Nupic是另一个库,与标准的机器学习算法相比,它提供了一些不同的功能。它基于一个称作层次时间记忆(HTM)的新皮层理论,。HTMs可以看作是一类神经网络,但在一些理论上有所不同。

从根本上说,HTMs是一个分层的、基于时间的记忆系统,可以接受各种数据。这意味着会成为一个新的计算框架,来模仿我们大脑中的记忆和计算是如何密不可分的。对于理论及其应用的详细说明,请参阅 白皮书。

擅长:HTMs



 Neon 

 Neon 是 Nervana 公司一个基于 Python 的深度学习库。它易于使用且具有超高的性能。



Nilearn

Nilearn 是一个 Python 模块,用于在神经成像 (NeuroImaging) 数据上进行快速简单的统计学习。它利用 scikit-learn Python 工具箱来处理多变量统计信息,包括预测建模,分类,解码或连接分析.



Orange3

Orange3 是一个同时适用于新手和数据专家的机器学习和数据可视化开源软件,支持拥有大型工具箱的交互式数据分析工作流程。



Pymc

Pymc 是一个Python 模块,它能实现贝叶斯统计模型和拟合算法,包括马尔科夫链蒙特卡罗(Markov chain Monte Carlo)算法。它非常灵活,具有可扩展性,适用于处理一系列大规模问题。如果想进行贝叶斯分析,你应该看看。



PyBrain

PyBrain 是一个模块化的 Python 机器学习库。它致力于为机器学习任务提供灵活易上手但功能强大的算法,和一系列用于测试和比较算法的预定义环境。



 Fuel

 Fuel 是一个数据管道框架(data pipeline framework),它为机器学习模型提供所需的数据。Blocks 和 Pylearn2 这两个神经网络库都有计划使用 Fuel。



PyMVPA 

PyMVPA 是一个 Python 包,旨在简化大型数据集的统计学习分析。它提供了一个可扩展的框架和一个用于分类,回归,特征选择,数据导入导出等算法的高级接口。

API上与Scikit-learn很像。包含交叉验证和诊断工具,但是没有Scikit-learn全面。



 Annoy

 Annoy (Approximate Nearest Neighbors Oh Yeah) 是一个带有 Python 绑定的 C++ 库,用于在空间中找到和已知的查询点临近的点。它还可以创建大型的基于文件的只读数据结构,并映射至内存,以便多个进程能共同使用相同的数据。



Deap 

Deap 是一个创新的,仍在发展中的计算框架,用于快速构建原型和测试方法。它旨在使算法和数据结构更加清晰透明。它与并行机制(如多进程和 SCOOP 模块)完美协调。



 Pattern

 Pattern 是一个 Python 的网络挖掘模块。它绑定了数据挖掘(Google + Twitter + Wikipedia API, 网络爬虫, HTML DOM 解析器),自然语言处理 (词性标记, n-gram 搜索, 语义分析, WordNet),机器学习(向量空间模型, k-means 聚类, Naive Bayes + k-NN + SVM 分类器) 和网络分析(图核心性 graph centrality 和可视化)等工具。

原创粉丝点击