使用Python进行机器学习


53

我正在考虑使用Python库进行机器学习实验。到目前为止,我一直依靠WEKA,但总体上还是很不满意。这主要是因为我发现对WEKA的支持不太好(很少有例子,文档稀疏,而社区支持在我的经验中不够理想),并且发现自己处在棘手的情况下没有任何帮助。我考虑此举的另一个原因是因为我真的很喜欢Python(我是Python的新手),并且不想回到Java编码中。

所以我的问题是,还有什么

  1. 全面
  2. 可扩展性(10万个功能,1万个示例)和
  3. 很好的受支持的库,可以在那里用Python进行ML?

我对进行文本分类特别感兴趣,因此想使用一个库,该库具有良好的分类器集合,功能选择方法(信息增益,Chi-Sqaured等)以及文本预处理功能(词干,停用词删除) ,tf-idf等)。

到目前为止,根据过去和其他地方的电子邮件线索,我一直在研究PyML,scikits-learn和Orange。关于我提到的上述三个指标,人们的感受如何?

还有其他建议吗?


非常感谢大家的评论。我想现在我将与NLTK + scikit-learn一起去看看事情的发展。
安迪

1
我不禁建议您看一下R,它具有更大的ML库,并且(特别是为这项工作而制作的)提供了更加统一的环境。R的文本挖掘程序包在此处提供

@mbq:是的,我非常了解R,但是由于在进行实际的文本挖掘之前我必须做很多“非统计”编程,所以我认为我现在会坚持使用Python。
安迪

1
您可以同时使用Python和R。一种选择是使用语言中立的存储方法(如数据库)将结果保留在数据处理步骤之间。
Faheem Mitha

:您可以使用Weka的从你的Python代码dimitri-christodoulou.blogspot.com/2012/03/...

Answers:


40

关于scikit-learn选项:100k(稀疏)功能和10k样本足够小以适合内存,因此可以与scikit-learn(与20个新闻组数据集大小相同)完美配合。

这是我在PyCon 2011上提供的教程,其中包含有关文本分类以及练习和解决方案的章节:

我还就该主题进行了演讲,该主题是我在PyCon FR上发布的版本的更新版本。这是幻灯片(以及注释中的嵌入式视频):

至于功能选择,请看一下quora上的答案,其中所有示例均基于scikit-learn文档:

在scikit-learn中我们还没有搭配特征提取。同时使用nltk和nltk-trainer进行此操作:


谢谢。这似乎是前进的特别好方法。我会试试。
安迪

@ogrisel,前三个链接腐烂了(链接四中的视频也丢失了)。这是新的Scikit域scikit-learn.org
xtian

14

在处理文本方面,请看一下NLTK。非常非常好的支持和记录(甚至有在线书籍,如果您愿意,也可以是纸质书),并且可以进行您需要的前期准备。您可能会发现Gensim也很有用;重点是向量空间建模,如果有兴趣的话,它还提供了可扩展的LSI和LDA(我认为也是pLSI)的实现。它也可以通过tf-idf进行选择-我不确定NLTK是否可以。我在大约50k的语料库上使用了这些片段,没有太多困难。

NLTK:http://www.nltk.org/

Gensim:http://nlp.fi.muni.cz/projekty/gensim/

不幸的是,关于您的问题的主旨,我对您所引用的特定库不熟悉(尽管我以前使用过scikits-learn的知识)。


3
NLTK +1。从事机器学习研究和自然语言处理的Olivier Grisel在网络上有一些不错的教程和幻灯片。例如,我可以想到使用NLTK和scikit-learn进行统计学习和文本分类(PyCON FR 2010)。
chl

@chi感谢您的指导,我一直在闲逛一点,看来他那里有很多不错的资料。在他的幻灯片中还显示了带有热图的混乱矩阵;)
JMS

9

Python有各种各样的ML库(也请查看mloss.org)。但是,我总是觉得它对ml研究人员的使用要比ml实践人员的使用更多。

Numpy / SciPymatplotlib是使用Python进行科学工作的出色工具。如果您不害怕自己动手使用大多数数学公式,那么您将不会感到失望。此外,将GPU与cudamatgnumpy配合使用非常容易-之前花费数天的实验现在只需数小时甚至数分钟即可完成。

最新的孩子可能是Theano。它是数学表达式的象征性语言,它带有优化,GPU实现和über功能自动微分,这对于基于梯度的方法来说真是棒极了。

而且,据我所知,JMS提到的NLTK基本上是那里排名第一的开源自然语言库。

Python是机器学习的正确工具。


8

我建议橙色

全面

可扩展(100k功能,10,000个示例)

很好的受支持的库,可以在那里用Python进行ML?

库,其中包含大量的分类器,特征选择方法(信息增益,Chi-Sqaured等),

所有这些工作都是橙色的

和文本预处理功能(删除,停用词,tf-idf等)。

不过,我从未使用Orange进行文字处理


+1表示橙色。他们有很好的文档,显示了如何快速入门,您可以使用其可视化编程GUI或来自Python的调用库。
乔什·赫曼

4

不知道这是否特别有用,但是有一个可供程序员在线学习Python的统计信息的指南。http://www.greenteapress.com/thinkstats/

从我的简短扫描看来,这似乎还不错,并且似乎在谈论一些机器学习方法,因此它可能是一个不错的起点。


3

检出libsvm


4
libsvm不能很好地扩展到大量功能和示例。同一作者最好使用liblinear。线性模型通常在高维空间中足够好。
ogrisel

libsvm是scikits-learn和Orange的svm引擎吗?还是在线性情况下它们真的退回到liblinear?
约翰·罗伯逊

3

将军(SHOGUN )是一个大型的机器学习工具箱,似乎很有前途。



1

正如@ogrisel强调的那样,scikit-learn是适用于Python的最好的机器学习软件包之一。它非常适合于小至100k(稀疏)特征和10k样本的数据集,甚至适合于可能包含超过200k行的稍大的数据集。基本上,任何适合内存的数据集。

但是,如果您正在寻找高度可扩展的Python机器学习框架,我强烈建议您使用Pyspark MLlib。由于这几天的数据集可以成倍地增长(考虑到大数据和深度学习浪潮),因此您经常需要一个可以很好地扩展并快速运行的平台,不仅在模型训练阶段而且在特征工程阶段(特征转换) ,功能选择)。让我们看一下您感兴趣的Spark Mllib平台的所有三个指标:

  1. 可扩展性: 如果您的数据集可以容纳在内存中,那么scikit-learn应该是您的选择。如果太大而无法容纳在内存中,Spark是必经之路。这里要注意的重要一点是,Spark仅在分布式设置中才能更快地工作。

  2. 全面性:与 Spark mllib相比,Sklearn在大量常用算法的正确实现方面要丰富得多。在scikit-learn中,对数据操作和转换的支持也更加丰富。Spark Mllib具有足够的数据转换模块,可在大多数情况下发挥作用。因此,万一您由于可扩展性问题而使用spark mllib仍然可以完成工作。它具有对相关性分析,特征提取(tf-idf,word2vec,CountVectorizer),特征转换(Tokenizer,StopWordsRemover,nn-gram,Binarizer,PCA等)的所有支持。有关详细列表,请参见下面的链接:

在Spark mllib中提取,转换和选择功能

  1. 分类: Spark mllib具有大多数情况下您会使用的所有主要算法的实现(包括对文本分类有效的算法)。有关可通过mllib使用哪些算法的详细概述,请参见下面的链接。

Mllib分类和回归

奖励: Apache Spark支持Python,R,Java和Scala。因此,如果明天您决定尝试使用其他语言(作为个人选择或出于专业原因),则不必学习全新的框架。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.