中国卓越技术团队访谈录读者调查,2022年采访嘉宾由你决定! 了解详情
写点什么

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

  • 2015 年 9 月 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 年 9 月 07 日 19:0021930
用户头像

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

关注

评论

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

uml图中各种线的关系

feiyun123

极客大学架构师训练营 UML

京东集团技术委员会主席周伯文:推进产业数智化发展需要技术和生态两把“桨”

京东科技开发者

区块链 大数据 AI 物联网,

服务器选择要注意什么?

德胜网络-阳

全球至少有36家央行发布了央行数字货币计划

CECBC

数字货币

性能优化:线程资源回收

AI乔治

Java 架构 JVM 性能调优

2020年10月北京BGP机房网络质量评测:流水的其他,铁打的世纪互联?

博睿数据

机房 评测

从微服务应用于技术栈,了解华为云微服务应用

华为云开发者社区

微服务 服务 云技术

淘宝直播技术干货:高清、低延时的实时视频直播技术解密

JackJiang

音视频 即时通讯 视频编码 直播技术

使用sonar扫描svn中的代码后,没有作者或责任人信息

lee

svn 代码质量 sonar

K8S CSI容器存储接口(一):介绍以及原理

silenceper

Kubernetes CSI

区块链赋能保险理赔,宁波开启“零感知理赔”试点

CECBC

区块链 保险理赔

从数据仓库双集群系统模式探讨,看GaussDB(DWS)的容灾设计

华为云开发者社区

数据库 数据仓库 数据

2020年9月北京BGP机房网络质量评测:天地祥云木樨园力压群芳终进前三

博睿数据

机房 评测

BitArray虽好,但请不要滥用,一次线上内存暴增排查

AI乔治

Java 架构 JVM 内存泄露

架构师训练营 -week10-作业

大刘

极客大学架构师训练营

当艺术品遇上区块链:金丝楠木艺术品溯源

CECBC

区块链 溯源 艺术品

距离 2020 年结束不到2个月,字节跳动员工却在闲鱼卖内推名额登上热搜!

Java架构师迁哥

五年时间完成业务数字化转型,华为如今做得怎么样了?

华为云开发者社区

效率 提升 数字化

美妆行业:低代码全域客户数据采集,赋能数据化运营

Linkflow

营销数字化 客户数据平台 CDP

很简单却能让你面试头疼得Java容器,这里从源码给你解释清楚

小Q

Java 学习 源码 容器 面试

K8S CSI 容器存储接口 (二):如何编写一个CSI插件

silenceper

Kubernetes Kubernetes源码 CSI

接口测试和功能测试的区别

测试人生路

软件测试

架构师训练营 1 期 - 第十周 - 模块分解

三板斧

极客大学架构师训练营

Mybatis日志功能是如何设计的?

Java架构师迁哥

第十周 模块分解 总结

三板斧

极客大学架构师训练营

私域流量运营03|衡量企业运营视频号的4个关键指标

Linkflow

客户数据平台 客户画像 视频号

谁说产品经理和程序员之间不能和平共处?

华为云开发者社区

DevOps 产品经理 用户地图

用FL Studio基础版制作一首完整的电音

奈奈的杂社

音乐制作 编曲 电音 电音制作 中国电音

.net5发布,.NET会就此“支棱起来”吗?

Philips

.net 敏捷开发 .net core

阿里内部11月最新出台Spring Cloud架构设计+程序开发+运维部署

Java架构追梦

Java 阿里巴巴 架构 微服务 SpringCloud

Linux笔记(一):基本命令

Leo

Linux 大前端 笔记

撑起瞬时千亿交易额的云数据库是怎么炼成的?

撑起瞬时千亿交易额的云数据库是怎么炼成的?

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