工具是机器学习的重要组成部分,选择合适的工具与使用最好的算法同等重要。
在这篇文章中,你将会见识到各种机器学习工具。了解它们为什么重要,以及可供选择的工具类型。
为什么要使用工具
机器学习工具使得应用机器学习更快,更简单,更有趣。
- 更快:好工具可以自动化应用机器学习过程中的每一步。这意味着,从提出创意到得到结果的时间大大缩短。如果你从头开始自己实现每一个功能,这花的时间要比选择现有工具要长的多。
- 更简单:你可以花时间来选择合适的工具,而不是研究、实现技术来完成任务。如果你自己实现,你必须对每一个过程都十分精通。这需要研究,资深经验来理解技术,以及高水平的工程技能来确保有效执行。
- 有趣:对于初学者得到良好结果的门槛低。你可以花费额外的时间来得到更好的结果,或者进行更多的项目实践。如果不使用这些工具,你将会花费大部分时间来构建你自己的工具,而没将时间集中在获取结果上。
有目的地选择工具
你不希望为学习、使用机器学习工具而学习、使用机器学习工具。必须有目的地使用工具。
机器学习工具可以让你在机器学习项目中交付结果。当你试图决定是否要学习新工具或是新功能的时候,问自己这么一个问题:
这些工具如何帮助我在机器学习项目中交付结果?
机器学习工具不仅仅是机器学习算法的实现。它们可能是,但在你解决机器学习问题的过程中,它们也可以为每一个过程提供帮助。
好工具 VS 强大工具
你想在你正在解决的问题上使用最好的工具。那么如何区分好的机器学习工具与强大机器学习工具之间的区别呢?
- 直观的界面:强大的机器学习工具在应用机器学习过程的子任务上提供直观的界面。在任务的界面中有良好的映射以及适应性。
- 最佳实践:强大的机器学习工具体现了过程,配置和实现的最佳实践。比如自动配置机器学习算法,工具内部结构良好的处理方式。
值得信赖的资源:强大的机器学习工具维护良好,时常保持更新,并具有社区人群。寻找关于一个工具相关的活动,是此工具被使用的标志。
何时使用机器学习工具
机器学习工具能够节省你的时间,并在项目中持续为你提供良好的结果。以下是使用机器学习工具能够为你带来的一些好处:
- 入门:当你刚刚入门时,机器学习工具可以引导你完成整个项目并快速得到良好的结果,而且会给予你继续下一个项目的信心。
- 日常:如果你想快速得到一个问题的良好结果,机器学习工具可以让你集中关注特定的问题,而不是得到答案需要的技术深度。
- 项目工作:当你正在从事大型工程时,机器学习工具可以帮助你制定原型解决方案,进行需求分析,并且给出你可能要实现的系统的模板。
平台 VS 库
机器学习工具有许多。谷歌搜索到的结果就足以让你头晕目眩了。
一种有用的机器学习工具分类方式是将它们分成平台和库。平台为你运行一个项目所需的全部功能,而库只为你完成一个项目提供部分功能。
这么区分并不完美,因为有些机器学习平台同时也是库,有些库也提供了图形化用户界面。然而,这提供了很好的比较方式,从特定目的工具中区分具体使用情形。
机器学习平台
机器学习平台提供了从头到尾完成一个机器学习项目的功能。也就是,数据分析,数据准备,建模和算法评估及选择。
机器学习平台的特征有:
- 它们提供了机器学习项目中每一个过程所需要的功能。
- 界面可以是图形化的,也可以是命令行,平台将所有的或部分界面结合起来。
- 它们提供功能的松耦合,你可以在特定项目中将各个部件结合起来。
- 它们是为通用目的用途和探索而量身定制的,而不是为了速度,可扩展性和准确性。
以下是一些机器学习平台:
- WEKA Machine Learning Workbench。
- R Platform。
- Python SciPy的子集(比如 Pandas和 scikit-learn)。
机器学习库
机器学习库提供了完成一个机器学习项目部分模块的功能。比如,一个库可能提供了一系列建模算法。
机器学习库的特征有:
- 它们为一个机器学习项目中一个或多个步骤提供了特定的功能。
- 它们的接口通常是需要编程的应用程序编程接口。
- 它们为特定用例,问题类型或环境量身定制。
以下是一些机器学习库:
- Python中的 scikit-learn。
- Java中的 JSAT。
- .Net中的 Accord Framework。
机器学习工具界面
另一种区分机器学习工具的方式是根据它们提供的界面。
这可能令人迷惑,因为一些工具提供了多个界面。然而,这可能为你挑选机器学习工具提供了起点,甚至可能为你区分这些工具提供了帮助。
下面是一些常见的界面。
图形化用户界面
机器学习工具提供了图形用户界面,包括窗口,得分,点击,专注于可视化。图形化用户界面的好处有:
- 允许掌握较少技术的用户完成机器学习工作。
- 专注于处理过程,以及如何最大限度地利用机器学习技术。
- 用户可以使用界面进行结构化处理。
- 更注重于信息的图形化展示,比如可视化。
以下是一些有图形化界面的机器学习工具:
命令行界面
机器学习工具提供了命令行界面,包括命令行程序,命令行参数,注重于输入和输出。命令行用户界面的好处有:
- 允许不是程序员的技术用户完成机器学习项目。
- 提供了许多专门的程序或机器学习项目特定子任务的编程模型。
- 根据需要的输入和将会得到的输出分解机器学习任务。
- 通过记录或脚本命令和命令行参数来促进有复验性的结果。
以下是一些提供命令行界面的机器学习工具:
如果你喜欢在命令行下工作,看看这本书《 Data Science at the Command Line: Facing the Future with Time-Tested Tools 》,可以让你了解如何在命令行下解决机器学习问题。
应用程序编程接口
机器学习工具提供了应用程序编程接口,可以让你自由决定在你的程序中使用什么元素以及如何使用。应用程序编程接口的好处有:
- 你可以将机器学习算法合并到自己的软件项目当中。
- 你可以创建自己的机器学习工具。
- 你可以在机器学习项目中灵活使用自己的处理流程和自动操作。
- 你可以将自己的方法与库提供的方法以及扩展提供的方法结合。
以下是一些带有应用程序编程接口的机器学习工具:
- 面向Python的 Pylearn 2。
- 面向Java的 Deeplearning4j。
- 面向C的 LIBSVM。
参考文章:
- 25个Java机器学习工具&库
- 最好的Python机器学习库
本地机器学习工具 VS 远程机器学习工具
比较机器学习工具最后一个方法是这个工具是本地工具还是远程工具。
本地工具是你下载并安装的,在本地使用,而远程工具运行在第三方服务器上。
这样区分也许有些模糊,因为有些工具可以以本地或远程的方式运行。另外,如果你是优秀的工程师,你可以在自己的服务器上配置几乎所有的工具作为托管解决方案。
然后,这么区分可能很有用,能够帮助你理解和选择机器学习工具。
本地工具
本地工具是下载、安装并运行在本地环境的。
- 专为内存中数据和算法设计。
- 由运行配置和参数控制。
- 集成到你自己的系统,以满足你的需求。
以下是一些本地工具:
- 面向C++的 Shogun Library
- 面向Go的 GoLearn
远程工具
远程工具托管在服务器上,并且可以从本地环境调用。这些工具通常被称为将机器学习作为服务(MLaaS)。
- 专为运行更大规模数据设计。
- 在多系统,多核心和共享内存上运行。
- 为适应大规模系统,所以服务提供的算法更少。
- 更简单的接口,在运行配置和算法参数上提供较少的控制。
- 通过远程过程调用集成到你本地环境中。
以下是一些远程工具:
参考文章:
也有一些工具可以让你建立自己的远程解决方案,并作为服务集成到你的本地环境中。比如:
- 面向Hadoop的 Apache Mahout。
- 面Spark的 MLlib。
- PredictionIO。
总结
在这篇文章中,你了解到了为什么工具在应用机器学习中很重要。你了解到,没有良好的机器学习工具,你就必须从无到有实现所有的技术,而这需要专业技术知识和高效工程实践。
你学习到了三种结构化看待机器学习工具的方式:
- 平台 VS 库
- 图形化用户界面 VS 命令行界面 VS 应用程序编程接口
- 本地工具 VS 远程工具
你在使用什么机器学习工具呢?欢迎评论并分享你正在使用的机器学习工具。
作者简介:Jason Brownlee,MachineLearningMastery.com的Editor-in-chief,专业程序员,机器学习践行者。
补充:
1.机器学习开源软件网(收录了各种机器学习的各种编程语言学术与商业的开源软件)
http://mloss.org
2 偶尔找到的机器学习资源网:(也非常全,1和2基本收录了所有ML的经典开源软件了)
http://www.dmoz.org/Computers/Artificial_Intelligence/Machine_Learning/Software/
3 libsvm (支持向量机界最牛的,不用多说了,台湾大学的林教授的杰作)
http://www.csie.ntu.edu.tw/~cjlin/libsvm/
4 WEKA (基于java的机器学习算法最全面最易用的开源软件)
http://www.cs.waikato.ac.nz/ml/weka/
5 scikit (本人最喜欢的一个基于python的机器学习软件,代码写得非常好,而且官方的文档非常全,所有都有例子,算法也齐全,开发也活跃
,强烈推荐给大家用)
https://pypi.python.org/pypi/scikit-learn/
6 OpenCv(最牛的开源计算机视觉库了,前途无可限量,做图像处理与模式识别的一定要用,总不能整天抱着matlab做实验和工业界脱节吧,但是有一定难度)
http://opencv.willowgarage.com/wiki/
7 Orange (基于c++和python接口的机器学习软件,界面漂亮,调用方便,可以同时学习C++和python,还有可视化的功能,)
http://orange.biolab.si/
8 Mallet (基于JAVA实现的机器学习库,主要用于自然语言处理方面,特色是马尔可夫模型和随机域做得好,可和WEKA互补)
http://mallet.cs.umass.edu/
9 NLTK(PYTHON的自然处理开源库,非常易用,也强大,还有几本orelly的经典教程)
http://nltk.org/
10 lucene(基于java的包括nutch,solr,hadoop,mahout等全套,是做信息检索和搜索引擎的同志们必学的开源软件了,学JAVA的必学)
http://lucene.apache.org/