在机器学习和数据分析领域,R、Python和Julia被认为是三个至关重要的编程语言。如果希望在这个领域有所建树,掌握这三种语言是非常必要的。
我个人主要学习的数据科学语言是Python,这不仅是因为使用Python的人非常多,还因为我已经对这种语言比较熟悉。早在2001年,我在一家小书店里买了一本《Learning Python》。从那时起,我对Python进行了持续的学习,并在多个项目中使用它,这些项目大多与数据处理有关。因此,我对Python的数据处理能力有一定的了解。在学习新领域时,降低不必要的障碍是很重要的。数据科学和机器学习需要学习的内容很多,所以没有必要在语言选择上给自己添麻烦。既然可以使用一种熟悉的语言,自然最好不过。
然而,Python并不是数据科学的“原生语言”。R语言及其前身S语言才是。S语言是由统计学家约翰·钱伯斯发明的,他并非思科的CEO钱伯斯。S语言从诞生之初就是为了数据科学而设计的。钱伯斯在发明S语言之前已经在这一领域研究了30多年,并因S语言的成就获得了1998年度的ACM软件系统奖。R语言继承了S语言的优点,成为数据科学的重要工具之一。R语言中包含了大量的数据科学知识和专业理念,是数据科学领域的一个重要资源库。尽管现在Python更为流行,但R语言中仍然有很多宝贵的知识值得学习。
Python是如何崛起的呢?实际上,三年前,Python相对于R、Matlab甚至Scala并没有明显的优势。那时Numpy、Scipy、pandas、matplotlib和Sklearn已经非常成熟,但其他语言也有自己的优势,Python并未占据主导地位。真正让Python在数据科学领域脱颖而出的事件尚未发生。许多人可能认为是2015年9月TensorFlow的发布,但我不这样认为。TensorFlow确实是一个重要的事件,但它对深度学习社区之外的人来说并没有太大影响。真正推动Python崛起的是AlphaGo的成功。AlphaGo的成功引发了人们对AI的广泛关注,相关的投资也迅速增加,相关工作的薪酬也随之上涨。这使得许多原本不在数据科学领域的人开始对这一领域产生兴趣,并选择Python作为入门语言。大量新人的涌入推动了Python的发展。
在TIOBE编程语言流行度排行榜上,Python排名第五,排在其后的是Java、C、C++和C#。如果其中一种语言适合数据科学,那么Python的地位可能会受到威胁。但这四种语言都是编译型系统开发语言,不适合数据科学家使用。尽管Java有Apache Mahout这样的优秀机器学习库,但很难进入数据科学的核心领域。
编译型系统开发语言为什么不适合机器学习呢?我认为主要有两个原因。表面上的原因是编译型语言的抽象层次较低,细节较多,用它们来表达机器学习的概念和运算不够优雅,会夹杂大量的系统细节。深层次的原因是编译型语言与数据科学语言之间存在“哲学冲突”。使用Java和C++等编译型语言开发系统时,即使迭代速度快,本质上仍然是构建性的,像盖楼一样,需要先设计好再编写代码。而在数据科学或机器学习工作中,探索性的任务更多,需要频繁试错和快速反馈,编译型语言在这种情况下显得过于繁琐。
数据科学和机器学习应用对计算性能要求很高。通常情况下,人们会用Matlab、Python等高层语言找到最佳模型,然后用C++和Java等语言将其产品化,以提高执行效率。这种方法适用于保质期较长的模型,即模型在较长一段时间内都能保持稳定性能。但随着AI和机器学习应用的增多,很多模型的保质期变得很短。这意味着即使你现在找到了最佳模型,随着时间的推移,外部条件的变化可能导致模型性能迅速下降。例如,用于分析社交媒体用户阅读偏好的模型、网站用户行为的模型或时尚趋势的模型,都属于保质期较短的模型。开发这种模型时,只用Python或R等动态语言可能会导致周期短、灵活性高,但运行效率低;而用C++或Java进行产品化则可能导致产品还未完成,模型的保质期就已经过了。
因此,在未来,我们很可能需要一种兼具R和Python的高层次特性和C++和Java的高效执行能力的数据科学语言。这种语言已经出现了,那就是Julia。Julia源自MIT的CSAIL(计算机科学与人工智能实验室),该实验室成立于2003年,由MIT的计算机科学实验室和人工智能实验室合并而成。不了解这两个实验室辉煌历史的人可以自行搜索。Julia的语法借鉴了Matlab,对于从高校出来的程序员来说,可能更容易上手。但如果语法能与Python、R或C家族的语言更加一致,可能会更有利于广大程序员。不过,语法并不是关键问题。关键在于,Julia利用LLVM的基础设施,将代码实时翻译和优化为高效的机器码,并执行。因此,Julia成为了第一种功能全面达到C语言级别的高级动态语言。经过多年的发展,Julia已经日趋成熟,预计在今年6月推出1.0版本。目前,Julia的社区规模还很小,Kaggle上的Python内核有26,000多个,R有12,000多个,而Julia只有100多个,数量上不成比例。但不能只看数量。Julia在高校和科研单位中得到了热烈的欢迎,许多学术界的大佬都在推荐Julia。由于在AI和数据科学领域,高校和科研单位在很长一段时间内将占据核心地位,我对Julia的未来发展持乐观态度。