大规模机器学习 - Python 还是 Java?

34

我目前正在开始一个项目,涉及大量数据的抓取和处理(数百吉字节),并从中进行结构化数据提取、命名实体识别、去重、分类等挖掘。

我熟悉Java和Python两个世界的机器学习工具:Lingpipe、Mahout、NLTK等。但是,在选择这样一个大规模问题的平台时,我缺乏足够的经验来决定使用Java还是Python。

我知道这听起来像一个模糊的问题,但我正在寻求关于选择Java或Python的普遍建议。JVM在性能上是否比Python更好?但是像Lingpipe等库是否能与Python生态系统相匹配呢?如果我选择Python,那么在多台机器上扩展和管理会有多容易呢?

我应该选择哪一个,并为什么选择它?


3
Jython 是一种在 Java 平台上运行的 Python 实现,它允许开发人员使用 Python 语言编写代码,并将其转换为 Java 字节码来执行。 - Andre Holzner
1
所使用的算法在大规模机器学习任务中与语言一样重要(甚至更重要);例如,在处理大量数据时,基于特征向量的技术可能是不可行的。因此,虽然值得考虑每种语言可用的大规模问题工具,但所使用的机器学习算法可能会主导性能。 - Junier
1
你的问题非常有趣,但也非常非常广泛,我甚至不知道该怎么回答。一个建议是使用Mahout(Hadoop项目),它直接解决了你的问题。试着让你的问题更加明确和详细,否则即使有潜力,它也可能会被关闭。 - Charles Menguy
3个回答

18

Apache目前正在开发出色的产品,如搜索相关的Lucene/Solr/Nutch, 大数据机器学习的Mahout, Map Reduce 的Hadoop, 自然语言处理(NLP)的OpenNLP,以及许多NoSQL相关产品。最好的部分是大写字母“I”,代表着整合(Integration),这些产品可以很好地相互整合,当然在大多数情况下它们(这些产品)互补彼此。

Python也很棒,不过如果您考虑Apache软件基金会提供的以上内容,我会像Sean Owen一样选择Java。Python将始终可用于上述内容,但主要是作为插件而非实际的核心产品。例如,您可以使用流式处理等方式使用Python来完成Hadoop。

我部分地从C++转向Java,以利用一些非常流行的Apache产品,例如Lucene、Solr和OpenNLP,以及其他流行的开源NoSQL Java产品,如Neo4j和OrientDB。


11

我认为Java具有的一个重要优势是Hadoop。如果你真正意味着大规模,你将想要能够使用类似的东西。一般来说,Java具有性能优势,并且拥有更多的库可用。所以:Java。


5
如果您正在寻找适用于机器学习任务的NoSQL数据库,那么Neo4J是更为成熟(相对)且能够处理大数据的其中之一。它是JAVA原生的,但是它自带一个漂亮的REST API,因此可以与您选择的平台集成。在这里,JAVA将为您提供性能优势。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接