在经历了数十年单纯作为专业学科的潜伏期之后,机器学习突然之间在技术前沿与核心领域赢得了一席之地、并开始作为业务工具呈现在我们面前。不过目前***的难题是如何使其具备实效,特别是对于那些需要处理相关工作的开发人员与尚处在萌芽状态的数据科学家们。
为了找到答案,我们整理出了一些最为常见且具备实用价值的开源机器学习工具,通过今天的文章与各位朋友共享。
Python: 数据科学家们纷纷投身于Python怀抱,希望利用它来作为R语言等分析型语言的开放式替代方案,目前也有不少企业雇主正积极寻找具备大数据处理经验的人才、其中熟练使用Python就是最重要的必备技能之一。有鉴于此,一直在不断扩大的Python软件名单中开始出现大量与机器学习密切相关的资源库。
首先要提到的推荐选项就是scikit-learn(官方网站:http://scikit-learn.org/stable/)。它能够加载至算法与模块当中,在GitHub上受到了广泛赞赏(fork版本数量接近2000),而且赢得了众多业界巨头的青睐。另一位紧随其后的选手是PyBrain(官方网站:http://www.pybrain.org/),它的设计目的在于降低使用难度并提供与其它强大工具相对接的能力。顾名思义,PyBrain的关注重点在于神经网络与非监督式学习,它同时也提供一套用于培训与重新定义算法的机制。
Go: 作为谷歌打造的系统语言,Go的设计重点在于并行机制,而这似乎正是最适合编写机器学习库的理想环境。虽然目前与之相关的库项目规模尚小甚至可以说是刚刚萌芽,但也已经有一些通用型方案值得加以关注。其中最受推崇的要娄GoLearn(官方网站:https://github.com/sjwhitworth/golearn),其开发者将其描述为一套“内置电池”的机器学习库。它提供过滤、分类以及回归分析等多种工具。另一套较小且更为基础的库是mlgo(官方网站:https://code.google.com/p/mlgo/),虽然目前它能提供的算法数量还少得可怜,但计划在未来推出更多相关成果。
Java on Hadoop: Mahout(在印地语中意味着‘象骑兵’,官方网站:https://mahout.apache.org/)当中包含有多种常见的机器学习方案,足以在每一位用户偏爱的大数据框架中实际起效。这款软件包以算法为关注重点而非方法,因此使用者需要对算法具备一定程度的理解。换句话来说,如果大家认真学习,肯定不难看出其各部分功能是如何被整合在一起的;举例来说,大家完全可以通过寥寥数行代码构建起基于用户的推荐系统。
Cloudera公司推行的Oryx(官方网站:https://github.com/cloudera/oryx)又是另一个基于Hadoop的机器学习项目,其特性在于通过交付实时流结果而非处理批量作业来对Mahout处理结果进行进一步分析。遗憾的是,目前该项目尚处于初始阶段——注意,这只是个项目而非实际产品——但它不断演变与改善的步伐为自己赢得了获取关注的资本。
Java: 与前面提到的、主要面向Hadoop的Mahout不同,还有其它一些面向Java机器学习库同样具备广泛的使用受众。由新西兰怀卡托大学创建的Weka(官方网站:http://www.cs.waikato.ac.nz/~ml/weka/)就是一款工作台类的应用程序,它在常见的算法集合当中加入了虚拟化与数据挖掘功能。对于那些希望为工作内容打造一套前端并有意利用Java进行初始开发的用户来说,Weka可能是各位起步的***选择。另一套更加传统的库,Java-ML(官方网站:http://java-ml.sourceforge.net/)也能确切起效,但它更适合那些已经习惯了将Java与机器学习配合使用的朋友。
JavaScript: 大家可能都听说过“亚特伍德定律”这个笑话,大意是说任何能够由JavaScript所编写的内容最终都会由JavaScript进行编写,这一理论在机器学习库领域同样正确。当然,目前JavaScript编写而成的方案在这一领域数量仍然相对较小——其中大多数选项都仅仅是单一算法而非完整的库——但已经有部分实用性工具渐渐脱颖而出。ConvNetJS(官方网站:http://cs.stanford.edu/people/karpathy/convnetjs/)允许大家直接在浏览器当中进行神经网络培训、从而实现深层学习,而名为brain(官方网站:https://github.com/harthur/brain)的项目则能够以可安装NPM模块的形式交付神经网络。此外,Encog(官方网站:https://github.com/encog/encog-javascript)库同样值得关注,而且它适用于多种平台:Java、C#、C/C++以及JavaScript。