什么是用于人工智能目的的最佳编程语言?
请注意,使用建议的语言时,我必须能够运用任何AI技术(或至少大多数技术)。
什么是用于人工智能目的的最佳编程语言?
请注意,使用建议的语言时,我必须能够运用任何AI技术(或至少大多数技术)。
所有在AI研究的残余领域里的时髦、有胡子的大师都使用Lisp :)
有两个主要阵营:Common Lisp和Scheme。它们有不同的语法等等。针对这两种语言都有很多好东西写出来。
Java是一种非常流行的通用语言,但在AI/函数式编程中的许多有趣的内容,例如将闭包作为一级对象传递,却在Java中操作笨拙。
我的个人喜好是远离像C#和F#这样的Windows语言。酷的人在Unix下开发。如果他们很酷但很穷,则在Linux下开发。
一些古怪但酷的人会使用Haskell。这是一种相当现代的函数式语言,具有良好的性能。我曾经尝试过,但那让我的头脑受伤了;但你可能比我更聪明。
更新:对Steve的问题的回答。
我不会支付任何Unix变体的费用;那是公司和研究机构所做的。理念是你想为一个投入数百万美元硬件设备且不会在购买操作系统上吝啬几千美元的公司或研究机构从事AI研究。这样的机构很可能在自己的食堂里提供美食,或者支付一定费用来做有趣的工作。但我当然不排斥Linux。
F#可能很酷,但我看到了一整个问题阵列,使它难以在Linux或其他Unix上运行(这就是我所说的"windowsy"),而且我不想在Windows下工作(这就是我所说的"个人喜好")。
关于"Windowsy"主题的详细说明:您提到F#是OCaml变体。从我自己的研究来看,尽管只是简单的了解,似乎F#缺少functors、OCaml样式的对象、多态变量和camlp4预处理器。没有functors的函数语言?真的吗?如果有人不喜欢微软(像我一样),那么可以得出结论,他们已经将一个完全良好的函数语言OCaml强行塞进了某些他们可以在CLR中运行的东西,以便声称"拥有"一个函数语言。最后,因为我不是怀疑,而是知道微软总是把市场支配地位置于产品质量之上,所以我不打算使用F#。但这是我的个人偏好,并且被明确标识为这样的偏好,我们真正关心的是对mary.ja45做出良好的建议。
我更推荐Lisp而不是F#,甚至不是OCaml和Haskell。这些大多基于Lisp在AI领域的历史优势。
大部分AI文献都是基于用Lisp或Prolog编写的程序。即使仅仅掌握Lisp的基本知识,也能让学生理解样本程序。我的个人最爱AI超级项目Cyc在Common Lisp或C中运行。
在编程语言的TIOBE指数(工业界使用的编程语言排名),Lisp排在第15位,而Haskell排在第43位,F#和OCaml排名低于50位。市场上的存在自然与就业机会相关。
话虽如此,也有可能许多年轻的"AI感兴趣"语言正在迅速崛起。如果某个重要的研究机构发表了一些颠覆性、定义领域的研究成果,比如说在Scala中,你将看到Scala在研究界大幅提升其受欢迎程度,并且随着一些滞后的时间,在工业界也是如此。
我(显然)无法评论F#的其他优点,但您同样可以进行推荐。
Python 在一般的科学界中得到了广泛应用。它有很多可用的库并且易学易用。
我会考虑使用Scala。
我已经用Scala解决了一个基本AI课程中的所有练习。效果非常好。
编程环境是学术性的还是非学术性的可能很重要,但对于大多数非学术AI应用程序开发,我建议使用像Java或C++这样的主流语言。需要能够轻松地与其他 COTS 或开源软件包进行接口,而在更“奇特”的语言中有时可能会很困难甚至不可能。对于学术研究来说,这可能不是一个那么关键的问题。
此外,性能对于许多应用程序来说也很重要,主流语言通常具有最优化的编译器,例如C++或Java。
虽然函数式编程语言如LISP、Scheme等具有特殊功能,可能使实现特定AI方法更容易,但我不认为这适用于整个AI相关编程,例如量化机器学习方法通常不需要函数式语言。如果您需要访问函数结构和一般软件包,有一些 LISP工具可帮助解决此问题,最近开发的Clojure是一种在JVM上运行并可以访问Java库的LISP变体。另外,Groovy是另一种基于JVM的语言,包括对闭包的支持。这真的取决于你要解决什么样的问题。此外,你想深入研究AI方面的内容有多深。如果你想从基础开始学习并实现理论上的AI内容,则可以选择高级语言——如函数式编程(在AI中已被证明)例如lisp或prolog。如果你知道自己正在处理什么问题集并且想要高效率,则可以选择像Java、C++这样的语言,并使用工具包来完成工作。由于你提到了机器学习,请查看Java中的Weka Toolkit以获取其中的一些内容。
选择具有AI技术的编程语言,就像选择其他项目的语言一样:
我建议使用Prolog作为实现AI系统的非常好的编程语言。
没有“最好”的编程语言。每种语言都有其优点。当我学习人工智能时,我们主要使用Lisp和Prolog,但是我在使用Java/C#和F#进行人工智能开发时效率更高。
这也取决于你的数据集的大小。对于 Web 规模的数据集,您可能需要使用 Map-Reduce,这意味着要使用 Hadoop。Hadoop 使用 Java 编写,但您可以使用任何语言(例如 Python)编写您的 Map-Reduce 函数。