机器学习编程语言之争,Python 夺魁【转载+整理】
本文内容
- 表现平平的 MATLAB
 - 貌似强大的 Julia
 - 本身无错的 R 语言
 - 逐渐没落的 Perl
 - 老而弥坚的 Python
 
我个人很喜欢 Python~
随着科技的发展,拥有高容量、高速度和多样性的大数据已经成为当今时代的主题词。数据科学领域中所采用的机器学习编程语言大相径庭。究竟哪种语言最适合机器学习成为争论不休的话题。近日,密西根州立大学的博士生 Sebastian Raschka 再次发起了机器学习编程语言之争,分析了自己选择 Python 的原因。
目前,机器学习牵涉的编程语言十分多样,包括了 MATLAB、Julia、R、Perl、Python、Ruby 等等。首先,Raschka 定义了语言好坏的原则:一门好的语言应该使得编写、调试和执行代码的总时间最短。然后,他花大篇幅讲述了一个简单的道理——没有一门语言是对所有情况、所有人都十分适合的。
Roberto Waltman:“在这种唯一正确的方式下,面向对象的 Spaghetti code 就是 Lasagna code。”
针对具体的应用场景以及参与项目的人员,开发团队或个人要对任务需求进行评估,再结合人员对于各个语言的熟悉程度和语言生态环境的情况等等,作出选择。接下来,Raschka 开始正式点评各个语言相对与 Python 在机器学习时的优缺点。
表现平平的 MATLAB
作为机器学习、模式识别等方面经常使用的工具,MATLAB 被放在了第一个分析。Raschka 认为,MATLAB 在实现机器学习算法时要比 Python 或者 NumPy 更加自然。很多高校也在计算机科学相关的课程中教授 MATLAB 语言。然而,MATLAB 也存在很多的缺点:价格昂贵、非开源、性能表现平平、语法不符合程序员的习惯等。例如,MATLAB 中矩阵乘积运算操作为 X.dot(Y),而 Python为 X@W,更加简洁、明了。

各种语言相对于 C 的测试性能——C 的性能为1.0,越小越好,源:http://julialang.org/benchmarks/    
从上图可以看出,MATLAB 的性能比 Python、Go、Java 等语言要差很多。Raschka 也提到,上图中 Python 的性能也表现不好。但是,现在性能强劲的 GPU 为 Python 提供了强大的后盾。2010年,Python 中的 Theano 库在CPU上运行时,其速度是 NumPy的1.8倍。而 Theano 在GPU上运行时,其速度就是 NumPy 的11倍。因此,在目前更高性能的 GPU 的帮助下,Python 性能已经有了更大的改进。
貌似强大的 Julia
作为一门新型的语言,Julia 在设计之处就充分借鉴了 C/Ruby/Python 等语言的经验,试图重新融合众家之长,为科学计算提供一个有力的工具。Raschka 充分认可了该语言。然而,对于其未来Julia是否会流行,Raschka 持保留态度。
Bjarne Stroustrup:世界上只有两种语言——大家一直在抱怨的和无人问津的。
Raschka 认为一个语言是否有用又很大程度上取决于其是否流行。只有被广大编程人员所熟知的编程语言,相关的库才会更多,遇到问题时也能够方便的找到答案,且易于团队合作和代码分享。语言本身也会随着社区的关注不断得以改善。在流行度上,Julia 并没有什么优势。
本身无错的 R 语言
接下来,Raschka 又提到了 R 语言。其实,Raschka 之前使用过 R 语言,而且还专门撰写了一部有关R 语言中Heat map的书。而且,他自己也不认为 R 语言存在任何令人不满意的地方。据Spectrum IEEE统计,2015年排名前十的编程语言,R语言是提升最快的。近期,微软对R语言表现出极大的兴趣。并且很快,微软的Azure 便开始支持R语言了。
Alan J. Perlis:当某人说“我想要一门编程语言。它要能够根据我的目标自动生成代码”。让他拿根棒棒糖,一边玩去吧!
Raschka 总结 R 和 Python 之间的不同在于,R是统计学家开发的(数学)语言,而 Python 是计算领域科学家开发,可以应用到统计学的编程语言。这就是说,二者都可以很好的应用于数据科学或者机器学习,但 Python 的语法更容易被程序员所接受。
逐渐没落的 Perl
Raschka 简单分析了 Perl 语言。作为一门古老的语言,Perl 已经不可避免的走向了没落。Raschka 表示,Perl 曾经是他学习的第一门语言。但是,Perl 目前主要用于简单的脚本编写,已经很少应用在机器学习的算法编写方面。
老而弥坚的 Python
最后,Raschka 夸赞了自己所喜爱的 Python 语言。尽管 Python 已经走过了20多年的风雨历程(由Guido van Rossum于1989年发明,第一个公开发行版发行于1991年),Raschka 认为它仍然可以继续流行下去。而且,Raschka 还不遗余力的列出了自己最喜欢的 Python 工具——NumPy、Theano、scikit-learn、matplotlib 等。
- NumPy: My favorite library for working with array structures and vectorizing equations using linear algebra; augmented by SciPy.
 - Theano: Implementing machine learning algorithms for the heavy-lifting and distributing computations across cores in my GPU(s).
 - scikit-learn: The most convenient API for the daily, more basic machine learning tasks.
 - matplotlib: My library of choice when it comes to plotting. Sometimes I also use seaborn for particular plots, for example, the heat maps are particularly great!
 
至于 Ruby、Java、Scala、Lua 等,Raschka 没有亲身体验,暂未点评。
对 Raschka 的言论,很多人表示赞同,也有不少人反对。有人表示,自己从R切换到Python,主要原因也是Python更方便与团队之外的人进行合作和沟通。也有人表示,作为一个新入门的程序员,利用R进行数据科学的编程可以利用很多现成的库,十分得心应手。更有与Python打过8年交道的资深程序员表示,Julia十分具有吸引力,愿意花时间去尝试该语言。亲爱的读者朋友,你眼中最好的机器学习编程语言又是哪个呢?
机器学习编程语言之争,Python 夺魁【转载+整理】的更多相关文章
- 机器学习编程语言之争,Python夺魁
		
机器学习编程语言之争,Python夺魁 随着科技的发展,拥有高容量.高速度和多样性的大数据已经成为当今时代的主题词.数据科学领域中所采用的机器学习编程语言大相径庭.究竟哪种语言最适合机器学习成为争论不 ...
 - 四大机器学习编程语言对比:R、Python、MATLAB、Octave
		
本文作者是一位机器学习工程师,他比较了四种机器学习编程语言(工具):R.Python.MATLAB 和 OCTAVE.作者列出了这些语言(工具)的优缺点,希望对想开始学习它们的人有用. 图源:Pixa ...
 - 机器学习1—简介及Python机器学习环境搭建
		
简介 前置声明:本专栏的所有文章皆为本人学习时所做笔记而整理成篇,转载需授权且需注明文章来源,禁止商业用途,仅供学习交流.(欢迎大家提供宝贵的意见,共同进步) 正文: 机器学习,顾名思义,就是研究计算 ...
 - 第二弹:超全Python学习资源整理(进阶系列)
		
造一个草原要一株三叶草加一只蜜蜂.一株三叶草,一只蜂,再加一个梦.要是蜜蜂少,光靠梦也行. - 狄金森 "成为编程大牛要一门好语言加一点点天分.一门好语言,一点点天分,再加一份坚持.要是天分 ...
 - 机器学习、NLP、Python和Math最好的150余个教程(建议收藏)
		
编辑 | MingMing 尽管机器学习的历史可以追溯到1959年,但目前,这个领域正以前所未有的速度发展.最近,我一直在网上寻找关于机器学习和NLP各方面的好资源,为了帮助到和我有相同需求的人,我整 ...
 - 机器学习之线性回归(纯python实现)][转]
		
本文转载自:https://juejin.im/post/5a924df16fb9a0634514d6e1 机器学习之线性回归(纯python实现) 线性回归是机器学习中最基本的一个算法,大部分算法都 ...
 - 机器学习实践:《Python机器学习实践指南》中文PDF+英文PDF+代码
		
机器学习是近年来渐趋热门的一个领域,同时Python 语言经过一段时间的发展也已逐渐成为主流的编程语言之一.<Python机器学习实践指南>结合了机器学习和Python 语言两个热门的领域 ...
 - python学习笔记整理——字典
		
python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...
 - !!对python列表学习整理列表及数组详细介绍
		
1.Python的数组分三种类型:(详细见 http://blog.sina.com.cn/s/blog_6b783cbd0100q2ba.html) (1) list 普通的链表,初始化后可以通过特 ...
 
随机推荐
- 【二分答案】【贪心】bzoj3969
			
http://www.cnblogs.com/mmlz/p/4497118.html #include<cstdio> #include<algorithm> using na ...
 - c# 验证码类
			
using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; us ...
 - 从nib文件里加载collectionViewCell
			
如何取出在xib文件里绘制的collectionViewCell ? 1.获得nib文件 UINib *nib = [[UINib NibWithName:@"xib文件的名字"] ...
 - Count and Say leetcode
			
题目链接 The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 11 ...
 - 如何优化cocos2d程序的内存使用和程序大小:第一部分
			
译者: 在我完成第一个游戏项目的时候,我深切地意识到“使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰”.而我刚开始接触cocos2d的时候,社区里面的人们讨论了一个 ...
 - centos 安装PGSQL
			
centos 安装PGSQLCentOS下yum安装PostgreSQL目录 1 Configure YUM repository2 Install PGDG RPM file3 Install Po ...
 - C++混合编程之idlcpp教程Lua篇(2)
			
在上一篇 C++混合编程之idlcpp教程(一) 中介绍了 idlcpp 工具的使用.现在对 idlcpp 所带的示例教程进行讲解,这里针对的 Lua 语言的例子.首先看第一个示例程序 LuaTuto ...
 - 毫无保留开源我写的:IOS Android Ipad 多点触摸通用js 库
			
毫无保留开源我写的:IOS Android Ipad 多点触摸通用js 库 在线演示地址: http://m.yunxunmi.com/ 支持 IOS Android Ipad 等不同操作系统的手持或 ...
 - Agile 是什么?
			
也许你已经习惯了 “Agile” 这个词汇不断地在你耳边狂轰滥炸,诸如敏捷团队.敏捷UX.敏捷建模.敏捷需求管理.敏捷架构等等.而且,人们还在不断的将 “Agile” 和更多的词汇进行组合,比如,也曾 ...
 - 【转】URL的井号
			
去年9月,twitter改版. 一个显著变化,就是URL加入了"#!"符号.比如,改版前的用户主页网址为 http://twitter.com/username 改版后,就变成了 ...