写点什么

机器学习编程语言之争,Python 夺魁

  • 2015-09-07
  • 本文字数:2016 字

    阅读完需:约 7 分钟

随着科技的发展,拥有高容量、高速度和多样性的大数据已经成为当今时代的主题词。数据科学领域中所采用的机器学习编程语言大相径庭。究竟哪种语言最适合机器学习成为争论不休的话题。近日,密西根州立大学的博士生 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 为<a href="mailto:X@W">X@W</a>,更加简洁、明了。

各种语言相对于 C 的测试性能——C 的性能为 1.0,越小越好
从上图可以看出,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 多年的风雨历程,Raschka 认为它仍然可以继续流行下去。而且,Raschka 还不遗余力的列出了自己最喜欢的 Python 工具——NumPy、Theano、 scikit-learn matplotlib 等。

至于 Ruby、Java、Scala、Lua 等,Raschka 没有亲身体验,暂未点评。

对于 Raschka 的言论,很多人表示赞同,也有不少人反对。有人表示,自己从R 切换到Python,主要原因也是Python 更方便与团队之外的人进行合作和沟通。也有人表示,作为一个新入门的程序员,利用R 进行数据科学的编程可以利用很多现成的库,十分得心应手。更有与Python 打过8 年交道的资深程序员表示,Julia 十分具有吸引力,愿意花时间去尝试该语言。亲爱的读者朋友,你眼中最好的机器学习编程语言又是哪个呢?


感谢魏星对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群InfoQ 好读者)。

2015-09-07 19:0022633
用户头像

发布了 268 篇内容, 共 130.5 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

云南区块链电子发票全面推广啦!

CECBC

区块链 纳税人

记一次MapReduce的内存溢出

AI乔治

Java mapreduce 架构 内存溢出

大咖直播 | Elasticsearch 应用监控管理平台搭建实战

腾讯云大数据

大数据 elasticsearch Elastic Stack 监控管理平台

太赞了!滴滴开源了一套分布式ID的生成系统...

Java架构师迁哥

即构实时音视频多中心调度设计

ZEGO即构

住建部等六部门:广泛运用区块链等技术,建设智慧物业管理服务平台

CECBC

物业生活

信任的传递——为什么我们需要第三方授权?

张凯峰

证书 身份认证

互联网应用系统常见问题与方案

raox

极客大学架构师训练营

搭建网站/APP最全准备攻略

前嗅大数据

小程序 建站 APP发布

EMAS远程日志 - 移动端问题排查利器

移动研发平台EMAS

阿里云 运维 日志 监控告警 应用

浅谈JDK并发包下面的分治思想及分治思想在高并发场景的运用

AI乔治

Java 架构 jdk 分布式 多线程与高并发

Elasticsearch 新机型发布,性能提升30%

腾讯云大数据

大数据 elasticsearch Elastic Stack

Apache顶级项目ShardingSphere — SQL Parser的设计与实现

京东数科风险算法与技术

数据库 开源 中间件

静态代码分析工具评估指标及方法

maijun

一口气说出四种幂等性解决方案,面试官露出了姨母笑~

不才陈某

Java 分布式 接口

Java中多线程安全问题实例分析

叫练

Java 多线程 什么是多线程 多线程与高并发

AWS 助力贝壳VR看房走出国门,升级全球居住服务新体验

亚马逊云科技 (Amazon Web Services)

AWS

几种常见的研发管理体系,哪种更适合你?

菜根老谭

敏捷开发 研发管理 CMMI IPD

附PPT丨AI和云原生时代的数据库进化之路

dbaplus社群

数据库 云原生

告别消费主义的双12,是华为云12.12会员节真正的意义

脑极体

一文为你详解Unique SQL原理和应用

华为云开发者联盟

数据库 sql unique

第13周作业

饭桶

第十三周学习总结

饭桶

如何在数智化时代少走弯路? 这里有100个案例可以借鉴

京东科技开发者

DevOps 云原生

Shell脚本命令常用技巧

MySQL从删库到跑路

shell脚本编写

图文回顾丨北京「解构云原生:企业数字化转型新支点」沙龙

Rancher

k8s rancher

建信金科大咖访谈:金融衍生品定价与建行实践

金科优源汇

金融科技 金融创新

自建本地电话告警系统

周楠

运维 物联网 监控告警

面向全场景模块化设计 京东智联云的服务器部署有多灵活?

京东科技开发者

服务器 云主机

传统巨头抢占区块链场景高地 医疗、汽车、金融成为热门赛道

CECBC

区块链 金融

云原生架构-可观测性之 Prometheus 服务自动发现

云原生实验室

机器学习编程语言之争,Python夺魁_语言 & 开发_张天雷_InfoQ精选文章