机器学习的初学者,普遍需要面对一个问题:
到底学习哪个编程语言?
答案可能会让你惊讶:对高手来说,这关系不大。只要你了解所选语言的机器学习库和工具,语言本身其实没那么重要。相当多的机器学习库支持多种编程语言。当然,取决于你在公司中的开发角色和你需要实现的任务,有些语言、库和工具会比其他的更高效。下面,我们来看看六大主流机器学习语言——R 语言、MATLAB、Python、Java 、C/C++ 和 Lisp。
R 是一个专门设计来进行数据计算的语言工具。在大规模数据挖掘、可视化和报告的应用场景中,它处于领先地位。通过 CRAN 资源库,你能轻易获得海量工具包,能应用于几乎所有的机器学习算法、数据测试和分析过程。R 语言用于表达关系、转化数据以及进行并行操作的语法十分优雅,但略显深奥。
雷锋网消息,KDNuggets 最近的调查发现,在分析、挖据和其他数据科学任务中,R 是最受欢迎、最常用的语言。但近年来 Python 逐渐抢走更多用户。
KDNuggets 2015 民意调查: 分析、挖据和数据科学任务中最常用的编程语言是 R。
MATLAB 在学术界十分普及,这是因为:
这门基于矩阵的语言,经常应用于机器学习算法的原型设计,有时还被用于开发复杂的解决方案。它的商用许可特别贵,但对有些企业用户来说也许值得,因为它可以大幅减少开发、研究耗费的时间和精力。AI 大牛吴恩达就推荐初学者使用 Octave 或 MATLAB 入门。相比之下,Octave 是 MATLAB 的一个免费替代品,它们十分相似,有几乎相同的语法。只是 Octave 的工具箱更少一些,IDE 也不如 MATLAB 成熟。
虽然 Python 是一门通用型的编程、编写脚本的语言,但它逐渐在数据科学家和机器学习工程师之间流行起来。与 R 和 MATLAB 不同的是,数据处理和科学计算的惯用语法并没有内置于 Python 语言中,但 NumPy、SciPy 和 Pandas 这些库把 Python 这方面的的功能性提到了与 R 和 MATLAB 同等的水平。还有人认为这使 Python 的语法更易用。
有海量开源框架支持 Python:比如 Scikit-learn、Theano、TensorFlow。这些专业机器学习库使开发者训练机器学习模型更便捷,有的还能很好地支持分布式计算。通常,这些资料库中关乎性能表现的代码,大多数仍然用 C 或 C++ 编写,有的甚至用 Fortran;Python 的角色主要是作为 wrappers 或者 API。R 语言包与之类似。
Python 生态系统最大的优势在于:用它组合出一个复杂的端到端产品或服务比较容易,比如说使用 Django 或 Flask 的网络应用,还有使用 PyQt 的桌面应用,甚至是使用 ROS 的自主机器人代理。
值得一提的是,慕课三巨头 (edX, Coursera, and Udacity)全都提供了 Python 的入门课程。另外,包括 MIT、加州大学伯克利分校在内的美国顶级学府,已经把 Python 作为计算机新生的必修语言。可以预期,将来会有更多的 IT 顶级名校转向 Python,与之相对的它在工业界的不断普及。
总而言之,在机器学习领域,Python 是一个全能多面手,也是未来的大趋势。
Java 是大多数软件工程师的选择。这是由于在面向对象的编程中,它干净、一致的执行方式;以及使用 JVMs 的平台独立性。它牺牲了简洁和灵活性,以使代码更清楚明白,并提高可靠性。这使它广泛应用于重要级别较高的企业软件系统中。为了维持相同水平的可靠性,并避免编写出乱七八糟的界面,正在使用 Java 的企业倾向于在机器学习应用中继续使用该语言。
在分析和设计原型上,java 有许多很有用的工具和库(比如 Weka)。除此之外,在开发大规模分布式学习系统上,Java 有很多一流的选择:比如 Spark+MLlib, Mahout, H2O 和 Deeplearning4j。腾讯一个月前开源的大数据计算平台 Angel 也是使用的 Java。这些框架/库对业界标准的数据处理和存储系统十分友好(比如Hadoop/HDFS),使它们之间的兼容、整合十分方便。
C/C++ 是编写底层软件的理想语言,比如操作系统的某部分或网络草案。计算速度和内存效率在这些应用场景中十分关键。出于同样的原因,它们也是执行机器学习底层步骤的通用选项。但是,由于缺乏对数据处理的惯用抽象化,而且内存管理加重了写代码的负担,使它们对初学者十分不友好。开发完整的端到端系统中使用 C/C++ 也是一项负担。
在嵌入式系统的例子中,比如智能设备、汽车和传感器,使用 C 或者 C++ 语言可能是必需的。若现有平台基础或特定应用已使用了 C/C++,使用它们会更方便。另外,基于 C/C++ 的机器学习库也有不少,比如 LibSVM, Shark 和 mlpack。
这可是 AI 编程语言的祖师。就雷锋网所知,Lisp 诞生于 1958 年,是有史以来第一个用于 AI 的计算机语言。该语言十分灵活、并可扩展。它的一些属性,比如快速原型设计和方便的“宏”使用(macro utility),在 AI 开发中十分有用。编写复杂程序使用 Lisp 相对容易。它是一个能用简单的方式创造强大算法的语言。
Lisp 有着清楚的映射,用它进行系统性的改变相对容易。它的 Read-eval-print 回路(读取-求值-输出的回路,简称 REPL)提供了交互性的开发环境。动态类型(Dynamic typing)、condition system 以及强大的对象系统(object system)是 Lisp 主要特点,使它一度成为 AI 领域最常用语言之一。目前虽然在国内比较小众,但业内公认它是最强大的机器学习语言之一。
这些语言之外,还有几个用于数据建模和和企业分析的商业化产品,它们能在具有更高可控性的数据处理环境中应用机器学习模型。 RapidMiner, IBM SPSS, SAS+JMP 和 Stata 都属于这类产品。它们旨在为数据分析提供可靠的端到端解决方案,并通常有可编程 API 以及可编写脚本的语法。
不断普及的基于机器学习的云服务,是该领域的最新发展。这包括亚马逊机器学习,Google Prediction, DataRobot, IBM Watson (沃森) 和 Microsoft Azure。对于把学习方案扩展到对海量数据的处理,以及用不同模型进行快速测试,它们向客户提供了解决方案。只要你有坚实的机器学习基础,使用新产品或者新平台就相当于学习怎么使用一个新工具。
选择语言/库时一个很重要的考虑是如何平衡开发时间和执行时间。如果需要几个月来开发,一个能在几分钟内完成数据处理的学习通道也或许一文不值。快速地创建、测试原型非常重要,因为首次尝试一般都是失败的,开发者需要不断重复。
这就是为什么有经验的机器学习工程师会如此抢手:他们做开发时,会使用任何用着顺手的工具/语言/库。就雷锋网所知,在 AI 产品开发中,这是一个经常发生的场景:用 Python、R 这些高层语言开发算法原型,然后把方案转移到 Java 或者 C/C++ 上,来生产终端产品。因此,想成为高层次的机器学习开发者,只会一种语言是不够的。
via udacity,letzgro