开源的数据挖掘工具
本文的主要内容编译自Blaz Zupan和Janez Demsar的一篇论文(Open-Source Tools for Data Mining)。我仅仅选择其中的要点和大家共享,同时加入一些个人的点评意见。
此外,对开源的数据挖掘工具有兴趣的同仁,可以关注以下 OSDM09这个workshop,它会在PAKDD'09上同时进行,主要讨论的就是开源数据挖掘工具的议题。
开源的数据挖掘工具(Open-Source Tools for Data Mining)
Blaz Zupan, PhD, Janez Demsar, PhD (编译:IDMer)
数据挖掘软件的历史并不长,甚至连“数据挖掘”这个术语也只是在上世纪九十年代中期才正式提出,它融合了统计学、机器学习、数据可视化以及知识工程等研究领域的内容,在数据探索和模型推断等方面已经相当成熟。和现在相比,那时的数据挖掘软件还显得很笨拙,一般只提供了命令行界面。对于众多没有计算机科学背景的用户来说,还是太难用了。
现在的商用数据挖掘软件已经很成熟了,也提供易用的可视化界面,集成了数据处理、建模、评估等一整套功能。尽管开源的数据挖掘工具在稳定性和成熟性上可能都无法跟商用数据挖掘软件相比(IDMer:而且开源数据挖掘工具在性能上和售后支持上也无法提供让商业用户放心的保证),但有些开源工具还是做得不错的,用户可以选择它来做一些相对不那么重要的分析挖掘工作。
本文对开源数据挖掘工具的演进过程进行了简单回顾,并挑选了一些比较优秀的开源挖掘工具,供大家选择。
开源数据挖掘工具的演进过程
从上世纪八十年代起就出现了早期的模型推断和机器学习程序,它们一般都是以命令行的方式执行(从UNIX或DOS的命令行启动),用户在命令中指定输入数据文件名和算法相关参数。广为人知的分类树归纳算法,C4.5,就是这种程序(C4.5的源程序参见http://www.rulequest.com/Personal)。同时还出现了基于规则的学习算法,例如AQ和CN2。这些程序大多被用在医疗领域,比如癌症的诊断和预测。
这些程序一般并不包括数据抽样等处理功能,用户通常是使用一些脚本语言(例如Perl)来做这些事情。同时,一些研究团体还开发了程序库(用于支持数据格式共享、建模评估和报表功能),例如MLC++,就是用C++编写的机器学习程序库。
命令行界面让用户很难对数据进行交互式分析,而且文本格式的输出也不够直观。数据挖掘工具接下来的发展,就是内置数据可视化并强化交互功能。在上世纪九十年代中期,Silicon Graphics就收购了MLC++,并将其开发成为MineSet。MineSet几乎可以称为当时最全面的数据挖掘平台。Clementine也是当时非常流行的商用数据挖掘软件,在界面易用性上非常突出。
现在的开源数据挖掘软件,大多采用可视化编程的设计思路(就是用图形化的方法,来建立整个挖掘流程)。之所以这么做,是因为它能足够灵活和易用,更适合缺乏计算机科学知识的用户。
在分析软件中,灵活性和可扩展性是非常重要的,它允许你可以开发和扩展新的挖掘算法。在这个方面, Weka(它几乎是开源数据挖掘软件的代表)就提供了文档全面的Java函数和类库,非常适合扩展。当然,您首先需要充分了解Weka的架构,并掌握Java编程技术。另一个很有名的开源软件,R,则采用了相对不同的思路。R提供了丰富的统计分析和数据挖掘功能,它的内核是用C来实现的。但如果你想用R开发新的挖掘算法,那么你并不需要用C语言来开发,而是使用R软件自有的脚本语言来开发。采用脚本语言的好处在于速度(这里指的是开发新算法的时间会缩短,因为脚本语言相对来说更高级更简单)、灵活(可以直接通过脚本调用挖掘软件中复杂的功能函数)、可扩展性(可以通过接口来调用其它数据挖掘软件的功能)。当然,图形化的界面更容易使用,但使用脚本语言来开发新算法则可以满足一些特定分析需求。
开源数据挖掘工具箱-期望的功能
- 提供一组基本的统计工具,用于对数据进行常规探索;
- 多种数据可视化技术,例如histograms, scatterplots, distribution charts, parallel coordinate visualizations, mosaic and sieve diagrams等等;
- 标准的数据处理组件,包括querying from databases, case selection, feature ranking and subset selection, and feature discretization等等;
- 无指导的数据分析技术,比如principal component analysis, various clustering techniques, inference of association rules, and subgroup mining techniques等等;
- 有指导的数据分析技术,比如classification rules and trees, support vector machines, naive Bayesian classifiers, discriminant analysis等等;
- 模型评估和评分工具,包括对结果的图形化展示(比如ROC曲线和lift图);
- 推断模型的可视化功能(例如用树状结构来显示训练好的决策树,用气泡图来显示聚类,用网络图来显示关联等等);
- 提供探索型数据分析环境
- 可以把模型保存为标准格式(例如PMML),以便进行共享和移植
- 提供报表功能,可以生成分析报告,并允许保存用户的备注或说明
几款优秀的开源数据挖掘工具
本文只对几种流行的开源数据挖掘平台进行了检视,比如Weka和R等。如果您想找寻更多的开源数据挖掘软件,可以到KDnuggets和Open Directory上查看。为了评测这些软件,我们用了UCI Machine Learning Repository上的心脏病诊断数据集。
用于统计分析和图形化的计算机语言及分析工具,为了保证性能,其核心计算模块是用C、C++和Fortran编写的。同时为了便于使用,它提供了一种脚本语言,即R语言。R语言和贝尔实验室开发的S语言类似。R支持一系列分析技术,包括统计检验、预测建模、数据可视化等等。在 CRAN上可以找到众多开源的扩展包。
R软件的首选界面是命令行界面,通过编写脚本来调用分析功能。如果缺乏编程技能,也可使用图形界面,比如使用R Commander(http://socserv.mcmaster.ca/jfox/Misc/Rcmdr/)或Rattle( http://rattle.togaware.com)。
使用图形界面的数据挖掘软件,采用了类似Windows资源管理器中的树状结构来组织分析组件。Tanagra缺乏高级的可视化能力,但它的强项是统计分析,提供了众多的有参和无参检验方法。同时它的特征选取方法也很多。
可能是名气最大的开源机器学习和数据挖掘软件。高级用户可以通过Java编程和命令行来调用其分析组件。同时,Weka也为普通用户提供了图形化界面,称为Weka KnowledgeFlow Environment和Weka Explorer。和R相比,Weka在统计分析方面较弱,但在机器学习方面要强得多。在Weka论坛(http://weka.sourceforge.net/wiki/index.php/Related_Projects) 可以找到很多扩展包,比如文本挖掘、可视化、网格计算等等。很多其它开源数据挖掘软件也支持调用Weka的分析功能。
YALE (Yet Another Learning Environment) 提供了图形化界面,采用了类似Windows资源管理器中的树状结构来组织分析组件,树上每个节点表示不同的运算符(operator)。YALE中提供了大量的运算符,包括数据处理、变换、探索、建模、评估等各个环节。YALE是用Java开发的,基于Weka来构建,也就是说它可以调用Weka中的各种分析组件。
KNIME (Konstanz InformationMiner)是基于Eclipse开发环境来精心开发的数据挖掘工具。无需安装,方便使用(大家喜欢的绿色版)。和YALE一样,KNIME也是用Java开发的,可以扩展使用Weka中的挖掘算法。和YALE不同点的是,KNIME采用的是类似数据流(data flow)的方式来建立分析挖掘流程(这个我喜欢,和 SAS EM或 SPSS Clementine等商用数据挖掘软件的操作方式类似)。挖掘流程由一系列功能节点(node)组成,每个节点有输入/输出端口(port),用于接收数据或模型、导出结果。(感觉KNIME比Weka的KnowledgeFlow更好用,连接节点时很方便,直接用鼠标拖拽连接端口即可。而Weka中则需要在节点上按鼠标右键,再选择后续节点,比较麻烦,刚开始使用时找了半天才知道怎么连)
KNIME中每个节点都带有交通信号灯,用于指示该节点的状态(未连接、未配置、缺乏输入数据时为红灯;准备执行为黄灯;执行完毕后为绿灯)。在KNIME中有个特色功能——HiLite,允许用户在节点结果中标记感兴趣的记录,并进一步展开后续探索。
类似KNIME和Weka KnowledgeFlow的数据挖掘工具,它的图形环境称为Orange画布(OrangeCanvas),用户可以在画布上放置分析控件(widget),然后把控件连接起来即可组成挖掘流程。这里的控件和KNIME中的节点是类似的概念。每个控件执行特定的功能,但与KNIME中的节点不同,KNIME节点的输入输出分为两种类型(模型和数据),而Orange的控件间可以传递多种不同的信号,比如learners, classifiers, evaluation results, distance matrices, dendrograms等等。Orange的控件不象KNIME的节点分得那么细,也就是说要完成同样的分析挖掘任务,在Orange里使用的控件数量可以比KNIME中的节点数少一些。Orange的好处是使用更简单一些,但缺点是控制能力要比KNIME弱。
除了界面友好易于使用的优点,Orange的强项在于提供了大量可视化方法,可以对数据和模型进行多种图形化展示,并能智能搜索合适的可视化形式,支持对数据的交互式探索。
Orange的弱项在于传统统计分析能力不强,不支持统计检验,报表能力也有限。Orange的底层核心也是采用C++编写,同时允许用户使用Python脚本语言来进行扩展开发(参见 http://www.scipy.org)。
GGobi
数据可视化是数据挖掘的重要组成部分, GGobi就是用于交互式可视化的开源软件,它使用brushing的方法。GGobi可以用作R软件的插件,或者通过Perl、Python等脚本语言来调用。
是由 Apache Lucene(开源搜索)社区中对机器学习感兴趣的一些成员发起的,他们希望建立一个可靠、文档翔实、可伸缩的项目,在其中实现一些常见的用于集群和分类的机器学习算法。该社区最初基于 Ng et al. 的文章 “Map-Reduce for Machine Learning on Multicore”(见 参考资料),但此后在发展中又并入了更多广泛的机器学习方法。
Mahout 支持一些集群算法实现(都是使用 Map-Reduce 编写的),它们都有一组各自的目标和标准:
Canopy:一种快速集群算法,通常用于为其他集群算法创建初始种子。
k-Means(以及 模糊 k-Means):根据项目与之前迭代的质心(或中心)之间的距离将项目添加到 k 集群中。
Mean-Shift:无需任何关于集群数量的推理 知识的算法,它可以生成任意形状的集群。
Dirichlet:借助基于多种概率模型的集群,它不需要提前执行特定的集群视图。
这是一个能够根据源数据(比如说用csv格式表示的矩阵,或者中文文档)使用多种多样的算法去得到结果的一个平台。
算法能够通过xml配置文件去一个一个的运行,比如在开始的时候,我们可以先运行一下主成分分析算法去做特种选择,然后我们再运行随机森林算法来做分类。
目前算法主要是针对那些单机能够完成的任务,该架构良好的扩展性能够让你在很短的时间内完成自己想要的算法,并且用于工程之中(相信我,肯定比Weka更快更好)。该项目的另一个特色是能够很好的支持中文文本的分类、聚类等操作。
开源中文文本数据挖掘平台 Ver 0.1发布,开源项目详细介绍 支持中文文本的数据挖掘平台开源项目PyMining发布
结论
以上介绍的几款软件都是优秀的开源数据挖掘软件,各有所长,同时也各有缺点。读者可以结合自己的需求来进行选择,或者组合使用多个软件。对于普通用户可以选用界面友好易于使用的软件,对于希望从事算法开发的用户则可以根据软件开发工具不同(Java、R、C++、Python等)来选择相应的软件。以上这几款软件(除了GGobi)基本上都提供了我们期望的大部分功能。
我尝试了以上这几种开源软件,Weka很有名但用起来并不方便,界面也简单了点;RapidMiner现在流行的势头在上升,但它的操作方式和商用软件差别较大,不支持分析流程图的方式,当包含的运算符比较多的时候就不容易查看了;KNIME和Orange看起来都不错,Orange界面看上去很清爽,但我发现它不支持中文。我的推荐是KNIME,同时安装Weka和R扩展包。
我的点评纯属个人意见,欢迎大家批评交流。在我的实际工作中使用开源挖掘工具并不多,大部分时候都是在使用SAS Enterprise Miner。
参考推荐:
IDMer(数据挖掘博客、论坛列表)