我经常被问到这样一个问题:
哪种编程语言最适合机器学习?
我已经回答过这个问题很多次了,现在是时候在一篇博客文章中深入探讨一下了。
归根结底,你用于机器学习的编程语言应该考虑你自己的需求和偏好。没有人能为你妥善解决这些问题。
没有人能为你妥善解决这些问题。
正在使用的语言
在我给出我的意见之前,最好先看看数据分析和机器学习专业人士自选社区中流行的语言和平台。
KDnuggets 一直有语言调查。最近的一项调查标题是“2013 年您用于分析/数据挖掘/数据科学工作的编程/统计语言”。趋势与前一年几乎相同。结果显示,R、Python 和 SQL 被大量用于数据访问。SAS 和 MATLAB 的排名比我预期的要高。我预计 SAS 适用于大型企业(财富 500 强)数据分析,而 MATLAB 适用于工程、研究和学生使用。
Kaggle 提供机器学习竞赛,并已对其用户群进行调查,以了解参赛者使用的工具和编程语言。他们在 2011 年发布了题为Kagglers 的最爱工具的结果(另请参阅论坛讨论)。结果表明 R 被大量使用。结果还显示 MATLAB 和 SAS 被很好地使用,而 Python 的代表性则低得多。我个人可以证明,在竞赛工作中我更喜欢 R 而不是 Python。它只是感觉在数据分析和算法选择方面提供了更多功能。
Ben Hamner,Kaggle 管理员和 Kaggle 博客上上述博客文章的作者,在一篇题为“人们通常使用哪些工具来解决问题”的论坛帖子中,更详细地阐述了机器学习编程语言的选择。
Ben 评论说 MATLAB/Octave 是一种用于矩阵操作的好语言,在处理定义明确的特征矩阵时可能很有用。Python 被全面的库所碎片化,除非你使用 C 语言,否则可能会非常慢。他更喜欢在不处理定义明确的特征矩阵时使用 Python,并使用 Pandas 和 NLTK。Ben 评论说:“通常,如果统计学家发现它有趣,它就会在 R 中实现”(说得好)。他还抱怨该语言本身很难看且难以使用。最后,Ben 评论了 Julia,它在库方面没有太多可提供的东西,但它是他最喜欢的语言。他评论说,它具有 MATLAB 和 Python 等语言的简洁性以及 C 语言的速度。
Kaggle 首席执行官 Anthony Goldbloom 于 2011 年向湾区 R 用户组发表了关于 R 在 Kaggle 竞赛中受欢迎程度的演讲,题为预测建模竞赛:让数据科学成为一项运动(参见 PowerPoint 幻灯片)。演讲幻灯片提供了更多关于编程语言使用的详细信息,并提出了一个“其他”类别,其使用量与 R 的使用量几乎一样大。如果能获得收集到的原始数据就更好了(他们为什么不将它发布到他们自己的数据社区,真的!?)。
John Langford 在他的博客 Hunch 上发表了一篇关于机器学习算法编程语言特性的优秀文章,题为“机器学习实现编程语言”。他将这些特性分为速度和可编程性(编程容易度)方面。他指出了一些强大的行业标准算法实现,所有这些都用 C 语言编写,并评论说他没有使用 R 或 MATLAB(这篇文章写于 8 年前)。花些时间阅读一下学术界和行业专家的评论。这是一个深刻而细致的问题,最终归结为你正在解决的问题的具体情况以及你解决问题的环境。
机器学习语言
我从我想要执行的机器学习活动的上下文中考虑编程语言。
MATLAB/Octave
我认为 MATLAB 在表示和处理矩阵方面表现出色。因此,我认为它是一种出色的语言或平台,可用于深入了解给定方法的线性代数。我认为它适合初次粗略地学习算法,以及在尝试理解或深入研究该方法时深入学习算法。例如,它在大学入门课程中很受欢迎,例如 Andrew Ng 的 Coursera 机器学习课程。
R
R 是统计分析的主力,推而广之,也是机器学习的主力。人们对学习曲线议论纷纷,我倒没觉得有什么问题。它是使用统计方法和图表理解和探索数据的平台。它拥有大量的机器学习算法,以及由算法开发人员编写的高级实现。
我认为您可以使用 R 进行探索、建模和原型设计。我认为它适合一次性项目,其成果如一套预测、报告或研究论文。例如,它是 Kaggle 等机器学习竞赛中最受欢迎的平台。
Python
Python 作为一门流行的科学语言,在机器学习领域冉冉升起。它能否取代 R 在数据分析领域的地位,我对此表示怀疑,但 NumPy 中的矩阵处理可能会挑战 MATLAB,而像 IPython 这样的通信工具非常吸引人,是迈向可复现性未来的一步。
我认为用于机器学习和数据分析的 SciPy 栈可用于一次性项目(如论文),而像 scikit-learn 这样的框架已足够成熟,可用于生产系统。
Java 家族/C 家族
实现一个使用机器学习的系统与任何其他工程挑战一样。你需要良好的设计和完善的需求。机器学习是算法,而不是魔法。在进行严肃的生产实现时,你需要一个健壮的库,或者根据你的需求定制算法实现。
有健壮的库,例如,Java 有 Weka 和 Mahout。另外,请注意,回归 (LIBLINEAR) 和 SVM (LIBSVM) 等核心算法的深度实现是用 C 语言编写的,并被 Python 和其他工具包所利用。我认为,如果你是认真的,你可能会在 R 或 Python 中进行原型设计,但出于执行速度和系统可靠性等原因,你将使用更重量级的语言进行实现。例如,BigML 的后端是用 Clojure 实现的。
其他注意事项
- 非程序员:如果你不是程序员(或者不是自信的程序员),我建议通过图形用户界面(GUI),例如 Weka 来学习机器学习。
- 研究和运营使用同一种语言:您可能希望在原型开发和生产中使用相同的语言,以降低未能有效转移结果的风险。
- 常用语言:您可能有一种常用或喜欢的语言,并希望坚持使用它。您可以自己实现算法或利用库。大多数语言都有某种形式的机器学习包,尽管可能很原始。
机器学习编程语言的问题在博客和问答网站上很受欢迎。以下是一些精选的讨论:
- 机器学习与编程语言, 2012
- 哪种编程语言拥有最好的机器学习库?在 Quora 上,2012 年
- 哪种编程语言拥有最好的机器学习库?在 MetaOptimize 上,2010 年
- 您推荐哪种编程语言来原型化机器学习问题?,CrossValidated,2011 年
您使用哪种编程语言进行机器学习和数据分析?为什么推荐它?
我渴望听到你的想法,请留言。
我承认我刚接触机器学习,但最近有机会尝试了 R、Python 和 Matlab。您可以将问题分成不同的部分。在所有情况下,超越基本安装是个好主意:对于 R,您需要 RStudio 作为 IDE;对于 Python,IPython notebooks 和几个主要的库是必不可少的;而 Matlab 比 Octave 更易于使用。
1. 数据输入、输出、预处理和后处理:Python,毫无疑问。如果您只处理 CSV 文件,那一切都很好,但实际情况往往并非如此,所以在现实世界中,Python 非常方便。坦率地说,很少有语言能比 Python 更好地完成这项工作,这无疑是其受欢迎程度的重要原因。
2. 预构建算法:看起来是 R,尽管 Python 的 scikit-learn 组织得更好。
3. 新颖算法:可能仍然是 R。
4. 绘图:所有都有多个优秀的绘图包。R 特别广泛。
5. 探索:R(与 RStudio 配合使用)或 IPython 都非常出色。R 可能稍微好一些,因为它处理矩阵的能力更强。IPython 可以轻松记录和重新运行您的工作。
6. 教学:Matlab/Octave 拥有最简洁的矩阵运算表达方式,因此对于许多算法来说,它是首选。但我对树形结构有点好奇。
7. 分享和传播:IPython notebooks 非常好用,而且不需要查看者安装任何东西。R vignettes 也很不错,前提是他们安装了 R 和相应的库。
8. 性能:我无法确定,因为我没有进行适当的测试。据我所知,Python 是这三种语言中唯一一种通过生成器可以特别自然地表达核外或在线处理的语言。Python 有许多有趣的性能优化计划。其他语言显然应该表现更好(C、Java;如前所述,Julia 尤其有趣)。
非常棒的评论,谢谢。当我想要从问题中获得最大收益时,R 是我的首选平台。
我探索了在 GPU 上使用 Python 的 Theano,并尝试了许多 R 中的并行包来提高速度。最终,我发现当速度是最高优先级时,自己实现是最好的。
谢谢你的文章!Weka 现在是我们工具包的一部分。
很高兴听到这个消息!
另一个值得考虑的语言是 Lua。特别是 LuaJIT 实现与 Touch7 结合使用。这就是 Google 和 Facebook AI 团队使用的,可能是因为他们雇用了 Yann LaCun 实验室的员工。Torch7 已经得到了进一步扩展,Facebook 产生了更多的机器学习内容,并已向公众开放。也许可以看看为什么 Lua/LuaJit 优于 Python 以及 LuaJIT 与 C 代码的接口。此外,LuaJIT 被游戏玩家广泛使用,我听说 LuaJIT(或者就是 Lua)将取代 Adobe 产品中的 Action Script。
好建议!
嗨,Jason,感谢您的精彩介绍。您有没有关于 C 语言机器学习的好书?
抱歉,我目前没有。我可以说,有很多用 C 语言编写的优秀库,比如 libsvm,它们通常通过 Python 或 R 中的包装器使用。学习 C 语言中的原生库可能是一种有趣的体验!
嗨,Jason。我是机器学习新手。我参加了伯克利的 AI 在线课程,并计划学习 Yaser Abu-Mostafa 的“从数据中学习”。这是一门与语言无关的课程,但根据一些评论所说,它要求我们在没有指导的情况下投入大量精力自行实现算法。我喜欢这种方法,因为它确实迫使人们研究并处理实际的实现挑战,而不仅仅是概念。问题是,由于其他原因,我选择的语言是 C#,但在机器学习使用的语言列表中,这里和其他地方都没有列出它。我对 Python 的经验有限,来自 AI 和线性代数课程,这使得大部分框架可用。
问题是:C# 和 Python 在机器学习有用的库方面有多大差距?与 Java 相比,在相同方面又如何?
考虑到 C# 将继续是我的主要开发语言,我是否应该使用 Python 等语言开发机器学习代码并使其与 C# 代码交互?Accord.Net 怎么样?它好用吗?
您对上下文提出了几个很好的观点。我想补充一点,有一个维度从“脚本”(调用现有的机器学习例程)到“编程”(自己编写机器学习例程)。有些语言更适合其中一种操作,而不是另一种。例如,在 SAS 中,分析师倾向于调用现有的 SAS“过程”:他们不会从头开始编写逻辑回归。
如果一个脚本编写的分析师和我使用相同的模型形式和相同的数据拟合相同的模型,我们将得到相同的模型参数。不同之处在于我知道该建模过程是如何以及为什么起作用(以及何时不起作用),并且我可以在需要时直接修改它。
毫无疑问——Python。
Python 生态系统正在快速发展,并获得了极大的采用。
我倾向于同意 Python 是一种强大的力量,Victor。
这个问题的一点更新 😉
Python 正在引领潮流。
http://www.kdnuggets.com/2017/01/most-popular-language-machine-learning-data-science.html
嗨,Jason,
当我开始数据科学课程时,我有 Python 或 R 两种选择。和往常一样,我对编程充满热情,所以我选择了 Python 并在整个课程中一直使用它。虽然在课程系列中,他们更倾向于将 R 用于时间序列,但我一直在关注您关于使用 Python 进行时间序列的博客。
一些朋友建议将 Coursera 上的 Andrew Ng 课程作为下一步。但作为机器学习领域的新手,我觉得我会坚持一门语言,并习惯使用它来学习各种算法。一旦感到舒适,我就可以进一步探索 R 和 MatLab。
您有什么建议?
听起来不错,Nandhini,通常情况下,你应该习惯于在不同工具或平台之间切换,但刚开始时不要这样做。
无论使用何种工具,重点关注的技能都是端到端地解决预测建模问题并交付结果(模型或一组预测)。
嗨,Jason,
目前我正在生产环境中使用 scikit-learn,它的性能非常好。
我推荐 scikit-learn。
干得好,Paulo!谢谢你的提示。
即使是我(我是上面评论中提到的 Accord.NET 的作者)也在日常工作中使用 scikit-learn 进行生产。但是,如果出于任何原因,您或您的任何博客读者希望在 Python 不可用的情况下(例如通过 Xamarin、UWP 应用程序甚至 Java 的嵌入式设备)使用机器学习,请尝试 Accord.NET。
如果您在应用程序中发现问题,或认为应该做得更好的地方,请将其记录在项目的 issue tracker 中,它应该会很快得到处理。这个项目的目标也是解决历史上没有被 Python 纯粹实现很好地服务过的平台。
谢谢 César。
嗨,Jason,如何使用 R 实现竞争学习算法?谢谢您的时间。
抱歉,我没有例子。我建议您用任何语言从头开始编写一个例子。
SOM(Kohonen 自组织映射)在技术上属于竞争性学习,因此您可以使用现有的 SOM 实现。我曾编写过一些,例如:
http://cleveralgorithms.com/nature-inspired/neural/som.html
更多关于竞争性学习的信息在这里:
https://en.wikipedia.org/wiki/Competitive_learning
嗨,Jason,
我想我们应该看看 Kaggle 最新的民意调查(据我所知):http://www.kdnuggets.com/2017/01/most-popular-language-machine-learning-data-science.html
并且注意到,是的,Python 确实取得了领先。
太棒了!
也请查阅这篇关于我为什么推荐 Python 的文章
https://machinelearning.org.cn/python-growing-platform-applied-machine-learning/
在 C++ 中,我找到了 dlib,它附带了大量注释非常好的示例。您还可以在 GPU 上运行它们。
太棒了!
微软 Azure 机器学习语言怎么样?我是机器学习领域的新手。如果我从 Azure ML 开始怎么样?我没有任何 R 或 Python 的知识。请给些建议
抱歉,我没有用过。
我认为,就像许多其他计算机科学领域一样,人们过于关注语言和工具,而真正重要的是要透彻理解理论。我同意有些语言拥有更丰富的生态系统,适合数据科学和机器学习,例如 Python 和 R,但我认为您要启动的项目的领域将引导您选择一套更适合该项目需求的特定工具。例如,如果您需要处理海量数据,那么使用 Apache Spark 和 Spark MLLib 会比使用 sklearn 更好 🙂
您怎么看?我很想知道!
谢谢你的文章!
同意。
我应该在 JavaScript 中实现机器学习算法吗?请指导我……我该如何实现?
也许为了乐趣和学习,但不建议使用 JavaScript 来实现机器学习以解决业务问题。我看不出这有什么理由。
我认为这取决于业务。当您谈论企业时,我绝对同意。
但是,随着 tensorflow.js 的推出,在没有网络依赖的情况下在手机上提供 AI 功能,为机器学习开启了许多新的应用。
大量的计算不是你想要在手持设备上进行的事情。它会耗尽电池。
我可能会坚持使用 R 和 Java。
太棒了!
作为一名软件开发人员,我知道 IT 世界本身就是动态的。随着计算机编程语言、框架和技术的新兴变化,语言趋势也在不断变化。我们开发人员必须与时俱进。所以我一直在寻找学习一些对未来有益的语言。谢谢您。
鉴于该领域对技能的需求,我推荐 Python。
https://machinelearning.org.cn/python-growing-platform-applied-machine-learning/
Java、Python、Lisp、Prolog 和 C++ 是主要的人工智能编程语言,用于满足不同软件开发和设计中的不同需求。由开发人员选择哪种人工智能语言能够满足应用程序所需的 功能和特性。
我同意。
嗨,Jason,
我刚开始探索机器学习,但我正计划为 Oracle AI 平台的新产品做准备,该产品有很多细节尚未公布,但提到它将支持 Keras、Caffe 和 TensorFlow。
我应该开始探索 Python 还是 R?
我推荐 Python,原因如下
https://machinelearning.org.cn/python-growing-platform-applied-machine-learning/
谢谢杰森!!
嗨..
我是编程新手,我想知道哪种编程语言能帮助我在人工智能和 Web 开发方面成长……
我需要指导,因为我将从头开始学习
Python!
看这里
https://machinelearning.org.cn/python-growing-platform-applied-machine-learning/
五年过去了,现在情况完全不同了。Python 已经取代了上面图片中的 R。
同意
https://machinelearning.org.cn/python-growing-platform-applied-machine-learning/
感谢分享这些信息。编程语言对于改进机器学习非常重要。
Python 是一个很好的起点。
请问您能详细介绍一下使用 Python 进行机器学习和数据科学,哪个更好?
这里有更多关于数据科学和机器学习之间关系的信息
https://machinelearning.org.cn/faq/single-faq/how-are-data-science-and-machine-learning-related
Julia,她击败了所有对手。 🙂
这是一门好语言。
嗨,您的博客真的很有帮助。我有一个问题,我想知道如何比较来自不同平台的机器学习结果输出。例如,假设我有一些 Python 模型的结果,我不懂 Python,但我想比较我用 Java 编写的自己模型的结果。有没有办法做到这一点?
也许将预测结果输出到文件,然后使用新的应用程序加载来自每个模型/平台的预测结果并进行比较?
感谢您的回答,但这里我想问一个不同的问题。我的意思是,当我们使用机器学习模型时,我们需要使用随机数进行采样或初始化。那么,只使用不同的语言可以吗?随机数生成器是否有很大的作用?如果有,我们如何在不同的平台上获得相同的结果?提前感谢。
算法在不同库中的细微实现差异可能导致结果的差异。
我建议使用一个工具来准备数据,然后将其用于不同的语言,以保持一致性。
非常感谢 Jason。祝您有个美好的一天。
嗨,Jason,
一个小小的请求:自您撰写本文以来,五年过去了,发生了许多变化。例如,Matlab 已经取得了实质性进展,Python 已经成为标准(甚至,我认为,在您的博客中也是如此)……您认为本文需要一个新版本吗?非常感谢!!
好建议。
我认为在学习机器学习时使用哪种语言并不重要。
如果你想提高工作效率并找到工作,Python 是赢家,至少目前是这样。
https://machinelearning.org.cn/python-growing-platform-applied-machine-learning/
尊敬的Jason博士,
假设您用 Python 编写了一个涉及机器学习库的程序。有没有办法将 Python 编写的程序转换为其他语言(如 C 或 Java),以提高程序的执行速度?
谢谢你,
悉尼的Anthony
有很多选择。
您可以使用 Cython 来加速 Python 代码。
您可以使用 C 语言针对相同或足够相似的后端库。
您可以从头开始重写所有内容。
我是一名生物信息学家,我对通过基因组学学习机器学习很感兴趣,但我需要知道我应该从何开始,biopython 包是最好的吗?通过机器学习在基因组学领域找到工作是否有价值?
您可以从这里开始
https://machinelearning.org.cn/start-here/#getstarted
随着 S4TF 越来越受欢迎,Swift 正在变得越来越重要。
很棒。
不确定机器学习如何,但我知道学习 Python 对我来说比 R 有用得多。
R 的可用资源有限,而 Python 社区已经产生了更多可重用的代码,您可以在此基础上进行构建。
此外,Python 更灵活。一旦学会它,你就可以构建网站、自动化流程,甚至可以构建机器人。R 也许也能做到,但你必须从头构建大部分,因为社区不那么活跃。
此外,Python 会强制你遵守结构。一开始可能觉得烦人,但随着时间的推移,它会帮助你写出更好的代码。
我先学了 R,后学了 Python,我强烈推荐 Python。
在这个阶段,我也会推荐 Python。
Python 仍然是无可争议的王者吗?现在所有这些自动化和无代码机器学习工具又该如何融入这一切呢?
嗨 Shaun……Python 仍然是首选。我们认为继续在机器学习领域培养 Python 技能很重要,但了解新兴工具以提高效率也很有益。