数据科学中的 R、Python 和 Julia —— 机器学习的学习随想 02

更新时间:2017-07-31 13:37:27 点击次数:1779次

1. 我认为 R,Python 和 Julia 是机器学习和数据科学中三个重要的语言。任何人如果想在这个领域有所发展,长远来说这三种语言都需要掌握。

 

2. 我自己学习数据科学的主要语言当然是 Python,不光是因为用 Python 的人多,也因为我自己比较熟悉这种语言。早在2001年的时候,我就在一家小书店里买到了一本叫做 Learning Python 的书,当时应该是第二版,讲的还是 1.x 的 Python。从那时候起,我断断续续对语言本身下过一些功夫,也在好几件事情里用了 Python,现在回想起来,这些事情全是跟数据处理有关。所以来来回回,对 Python 的数据处理能力多少有些了解。学一个新的领域,入门的时候应当尽量降低不必要的障碍,数据科学和机器学习里要学习的东西太多了,没必要在语言上自找麻烦。既然可以用一个熟悉的语言,当然乐得如此。


Learning Python

 

3. 但 Python 其实并不是数据科学的“原生语言”,R 才是。R 语言和它的前身 S 语言,本来就是统计学家发明和使用的语言。S 的发明人叫 John Chambers,跟思科的前 CEO 钱伯斯同名同姓,但一点关系都没有。S 从根子上就是为数据科学设计出来的语言,Chambers 在发明 S 语言之前,在这个领域研究了30多年,并且由于 S 语言的成就获得了 1998 年度的 ACM 软件系统奖。当然,老先生现在也已经转到了 R 语言的阵营当中。这里的关键在于,R 是数据科学的母语,R 中包含了丰富、深刻、专业的数据科学思想,是整个数据科学一个重要的原创思想宝库。包括 Python 在内,很多其他语言试图在数据科学领域内拓展的时候,都需要去借(chao)鉴(xi)R 语言。比如 Python 处理表数据的王牌库 pandas,其主要思想就是来自 R 的。尽管现在 R 的风头被 Python 盖过,但是 R 语言中的宝藏太多、积累太厚,想在这个领域深造的人,迟早要进入 R 社区来看一看,学一学。


John M. Chambers,S 语言的发明者

 

4. Python 是怎样起来的?其实就在短短的三年前,Python 相对于 R、Matlab 甚至 Scala ,都看不出有什么明显优势。当时 Numpy,Scipy,pandas,matplotlib 和 Sklearn 实际上都已经很成熟,但别的语言也各有绝活,Python 并没有占多少便宜。真正令 Python 在数据科学领域脱颖而出的事件还没发生。这个事件是什么呢?有人可能认为是 2015 年 9 月的 TensorFlow 发布,但我不这么认为。TensorFlow 虽然是个重要的事件,但当时它对于深度学习社区之外的人,并没有多大的影响。真正导致 Python 崛起的,其实还是 Alpha Go 这一公关事件。由于 Alpha Go 的胜利,引发全民关注 AI 的热潮,本来并不是很旺盛的 AI 投资也瞬间爆燃,相关工作薪资节节攀升。这样一来,大批本来在数据科学圈子外面的程序员、学生和科研人员就激动了,纷纷加入这个领域。而他们进入数据科学领域的时候,想法估计会跟我差不多。Python 是顶级流行语言中适合数据科学的,是数据科学语言中流行的,所以 Python 成了新人的当然之选。大量新人的涌入,才是 Python 后来居上的关键原因。

 

5. 在 TIOBE 的编程语言流行度排行榜上,Python 排名第五。排在它前面的是 Java,C,C++ 和 C#,清一色的 C family 语言。这四种语言中只要有一种适合于数据科学,估计也就没 Python 什么事了。但是很可惜,这四种语言都是编译型的系统和应用开发语言,不适合作为数据科学家的首选工作语言。所以虽然 Java 也有 Apache Mahout 这样的机器学习库,但是始终很难进入数据科学的主流。

 

6. 编译型系统开发语言为什么不适用于机器学习呢?我认为主要有两个原因。比较浅表的原因是系统级语言的抽象层次较低,细节过多,用它来表达机器学习的概念、关系和运算,代码看上去和写起来都不够优雅,会夹杂大量系统层面的细节。但更深层的原因是编译型语言与数据科学语言之间的“哲学冲突” 。用 Java 和 C++ 等编译语言开发系统,无论你迭代速度多快,从根本上还是构建性的,像盖楼,是实现某个你自己主动设计出来的系统,所以要先想清楚,再写代码,编译构建系统,然后看看是不是达成目标。而数据科学或者机器学习的工作则是探索性的,像迷宫寻宝,是摸索某项客观存在的外在的规律,所以需要频繁的试错,快速的反馈,快速的改变方向。比如 Kaggle 的竞赛,优胜者往往要提交几百次才能取得满意的结果。在这样的工作模式中,编译型语言就显得太过麻烦了。


Kaggle 的创始人 Ben Hamner 谈 Kaggle 竞赛获胜者的经验 


7. 数据科学和机器学习应用是性能怪兽,数据量上来了,无论多大的计算力,都很难满足它的胃口。吴恩达在他 2011 年录制的经典的机器学习视频课程中说,一般来说人们会用 Matlab 、Python 等高层次语言来找到佳的模型,然后用 C++ 和 Java 等语言把模型产品化,以追求更高的执行效率。很显然这种方式适合于保质期长的模型,也就是说,一个模型一旦调好,其性能在相当长的一段时间内都能够保持稳定,比如计算机视觉里很多的模型就有这个特点。但随着 AI 和机器学习的应用越来越广泛,我们所用到的很多模型,保质期会越来越短。也就是说,就算你在现阶段找到一个佳的模型,但过了一段时间,外部条件变化了,这个模型的性能会很快下降。比如用来分析社交平台读者的阅读偏好的模型,用来分析网站用户行为的模型,用来分析服装流行趋势的模型,都是保质期很短的模型。开发这种模型就比较两难,只用 Python,R 等动态语言来开发,周期短、灵活度高,但运行效率较低。而如果用 C++、Java来做产品化,可能产品还没做完,模型保质期就过了。

 

8. 所以在未来,我们很可能需要一种既像 R、Python 那么高层次,又像 C++、Java 一样快的数据科学语言。这种语言现在已经出现了,就是 Julia。Julia 来自 MIT 的 CSAIL (计算机科学与人工智能实验室)。CSAIL 是2003年由 MIT 计算机科学实验室和 AI 实验室合并而来。不了解这两个实验室,尤其是 MIT AI 实验室辉煌历史的人,请自行搜索。Julia 的语法借鉴了 Matlab,高校里出来的人可能会有宾至如归的感觉,但我觉得如果语法上跟 Python、R 或者 C family 一致的话可能会更有利于广大程序员。不过语法始终是个小问题。关键在于,Julia 利用了 LLVM 的基础设施,实时将代码翻译和优化为高效的机器码,并且执行。因此,Julia 成为了种性能全面达到 C 语言级别的高级动态语言。经过了几年的发展,Julia 日臻成熟,预计在今年 6 月份推出 1.0 版本。目前这个语言的社区还是很小,Kaggle 上 Python 的 Kernel 有26,000多个,R 有 12,000 多个,而 Julia 只有100多个,完全不成比例。但是这个事情你不能只看数量。Julia 在高校和科研单位里获得了热烈的欢迎,很多学术大佬现在都在安利 Julia。由于在 AI 和数据科学领域中,高校和科研单位在相当长一段时间里将占据话语权的中心,所以我对 Julia 中长期的发展十分看好。

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

回到顶部
嘿,我来帮您!