开源的数据挖掘工具

标签: 开源 数据挖掘 工具 | 发表时间:2013-12-07 04:53 | 作者:sunboy_2050
出处:http://blog.csdn.net

本文的主要内容编译自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上的心脏病诊断数据集。

R 

用于统计分析和图形化的计算机语言及分析工具,为了保证性能,其核心计算模块是用C、C++和Fortran编写的。同时为了便于使用,它提供了一种脚本语言,即R语言。R语言和贝尔实验室开发的S语言类似。R支持一系列分析技术,包括统计检验、预测建模、数据可视化等等。在 CRAN上可以找到众多开源的扩展包。
R软件的首选界面是命令行界面,通过编写脚本来调用分析功能。如果缺乏编程技能,也可使用图形界面,比如使用R Commander(http://socserv.mcmaster.ca/jfox/Misc/Rcmdr/)或Rattle( http://rattle.togaware.com)。

Tanagra

使用图形界面的数据挖掘软件,采用了类似Windows资源管理器中的树状结构来组织分析组件。Tanagra缺乏高级的可视化能力,但它的强项是统计分析,提供了众多的有参和无参检验方法。同时它的特征选取方法也很多。

Weka

可能是名气最大的开源机器学习和数据挖掘软件。高级用户可以通过Java编程和命令行来调用其分析组件。同时,Weka也为普通用户提供了图形化界面,称为Weka KnowledgeFlow Environment和Weka Explorer。和R相比,Weka在统计分析方面较弱,但在机器学习方面要强得多。在Weka论坛(http://weka.sourceforge.net/wiki/index.php/Related_Projects) 可以找到很多扩展包,比如文本挖掘、可视化、网格计算等等。很多其它开源数据挖掘软件也支持调用Weka的分析功能。



RapidMiner

YALE (Yet Another Learning Environment) 提供了图形化界面,采用了类似Windows资源管理器中的树状结构来组织分析组件,树上每个节点表示不同的运算符(operator)。YALE中提供了大量的运算符,包括数据处理、变换、探索、建模、评估等各个环节。YALE是用Java开发的,基于Weka来构建,也就是说它可以调用Weka中的各种分析组件。

KNIME

KNIME (Konstanz InformationMiner)是基于Eclipse开发环境来精心开发的数据挖掘工具。无需安装,方便使用(大家喜欢的绿色版)。和YALE一样,KNIME也是用Java开发的,可以扩展使用Weka中的挖掘算法。和YALE不同点的是,KNIME采用的是类似数据流(data flow)的方式来建立分析挖掘流程(这个我喜欢,和 SAS EMSPSS Clementine等商用数据挖掘软件的操作方式类似)。挖掘流程由一系列功能节点(node)组成,每个节点有输入/输出端口(port),用于接收数据或模型、导出结果。(感觉KNIME比Weka的KnowledgeFlow更好用,连接节点时很方便,直接用鼠标拖拽连接端口即可。而Weka中则需要在节点上按鼠标右键,再选择后续节点,比较麻烦,刚开始使用时找了半天才知道怎么连)
KNIME中每个节点都带有交通信号灯,用于指示该节点的状态(未连接、未配置、缺乏输入数据时为红灯;准备执行为黄灯;执行完毕后为绿灯)。在KNIME中有个特色功能——HiLite,允许用户在节点结果中标记感兴趣的记录,并进一步展开后续探索。

Orange

类似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等脚本语言来调用。


Mahout 

是由 Apache Lucene(开源搜索)社区中对机器学习感兴趣的一些成员发起的,他们希望建立一个可靠、文档翔实、可伸缩的项目,在其中实现一些常见的用于集群和分类的机器学习算法。该社区最初基于 Ng et al. 的文章 “Map-Reduce for Machine Learning on Multicore”(见 参考资料),但此后在发展中又并入了更多广泛的机器学习方法。

Mahout 支持一些集群算法实现(都是使用 Map-Reduce 编写的),它们都有一组各自的目标和标准:
Canopy:一种快速集群算法,通常用于为其他集群算法创建初始种子。
k-Means(以及 模糊 k-Means):根据项目与之前迭代的质心(或中心)之间的距离将项目添加到 k 集群中。
Mean-Shift:无需任何关于集群数量的推理 知识的算法,它可以生成任意形状的集群。
Dirichlet:借助基于多种概率模型的集群,它不需要提前执行特定的集群视图。


PyMining

这是一个能够根据源数据(比如说用csv格式表示的矩阵,或者中文文档)使用多种多样的算法去得到结果的一个平台。
算法能够通过xml配置文件去一个一个的运行,比如在开始的时候,我们可以先运行一下主成分分析算法去做特种选择,然后我们再运行随机森林算法来做分类。
目前算法主要是针对那些单机能够完成的任务,该架构良好的扩展性能够让你在很短的时间内完成自己想要的算法,并且用于工程之中(相信我,肯定比Weka更快更好)。该项目的另一个特色是能够很好的支持中文文本的分类、聚类等操作。
开源中文文本数据挖掘平台 Ver 0.1发布,开源项目详细介绍  支持中文文本的数据挖掘平台开源项目PyMining发布


结论
以上介绍的几款软件都是优秀的开源数据挖掘软件,各有所长,同时也各有缺点。读者可以结合自己的需求来进行选择,或者组合使用多个软件。对于普通用户可以选用界面友好易于使用的软件,对于希望从事算法开发的用户则可以根据软件开发工具不同(Java、R、C++、Python等)来选择相应的软件。以上这几款软件(除了GGobi)基本上都提供了我们期望的大部分功能。
我尝试了以上这几种开源软件,Weka很有名但用起来并不方便,界面也简单了点;RapidMiner现在流行的势头在上升,但它的操作方式和商用软件差别较大,不支持分析流程图的方式,当包含的运算符比较多的时候就不容易查看了;KNIME和Orange看起来都不错,Orange界面看上去很清爽,但我发现它不支持中文。我的推荐是KNIME,同时安装Weka和R扩展包。

我的点评纯属个人意见,欢迎大家批评交流。在我的实际工作中使用开源挖掘工具并不多,大部分时候都是在使用SAS Enterprise Miner。



参考推荐:

开源的数据挖掘工具

五个免费开源的数据挖掘软件

IDMer(数据挖掘博客、论坛列表)

支持中文文本的数据挖掘平台开源项目PyMining发布


作者:sunboy_2050 发表于2013-12-6 20:53:27 原文链接
阅读:108 评论:0 查看评论

相关 [开源 数据挖掘 工具] 推荐:

开源的数据挖掘工具

- - CSDN博客云计算推荐文章
本文的主要内容编译自Blaz Zupan和Janez Demsar的一篇论文(Open-Source Tools for Data Mining). 我仅仅选择其中的要点和大家共享,同时加入一些个人的点评意见. 此外,对开源的数据挖掘工具有兴趣的同仁,可以关注以下 OSDM09这个workshop,它会在PAKDD'09上同时进行,主要讨论的就是开源数据挖掘工具的议题.

五个免费开源的数据挖掘软件

- ※ABeen※ - 车东[Blog^2]
在网上看到一篇文章介绍五个免费开源的数据挖掘软件,转过来. Orange 是一个基于组件的数据挖掘和机器学习软件套装,它的功能即友好,又很强大,快速而又多功能的可视化编程前端,以便浏览数据分析和可视化,基绑定了Python以进行脚本开发. 它包含了完整的一系列的组件以进行数据预处理,并提供了数据帐目,过渡,建模,模式评估和勘探的功能.

数据挖掘开源软件:WEKA基础操作

- - CSDN博客互联网推荐文章
数据挖掘开源软件:WEKA基础教程. 本文档部分来自于网络,随着自己的深入学习,讲不断的修订和完善. 第一节   Weka简介:. Weka是由新西兰怀卡托大学开发的智能分析系统(Waikato Environment for Knowledge Analysis) . 以外的地方,Weka通常按谐音念成Mecca,是一种现今仅存活于新西兰岛的,健壮的棕色鸟,  非常害羞,好奇心很强,但不会飞 .

数据挖掘是神马?

- - 互联网分析
1、数据挖掘需要‘神马样’的流程.  2、哥,有没有详细点的,来个给力的. 4、数据在统计意义上有哪些类型. 9、知道这些工具不知道如何在工作中用呀. 11、还有没有更人性化、智能化的展现. 12、上面这图看起来很给力,背后很复杂吧.  16、转载的留个来源 ,毕竟是我辛苦收集和想出来的,谢谢. 忘记“大数据”,从“中数据”开始.

这就是数据挖掘

- - 互联网分析
当今数据库的容量已经达到上万亿的水平(T)— 1,000,000,000,000个字节. 在这些大量数据的背后隐藏了很多具有决策意义的信息,那么怎么得到这些“知识”呢. 也就是怎样通过一颗颗的树木了解到整个森林的情况. 计 算机科学对这个问题给出的最新回答就是:数据挖掘,在“数据矿山”中找到蕴藏的“知识金块”,帮助企业减少不必要投资的同时提高资金回报.

关于数据挖掘

- - 牛国柱
以下内容来自网络,关于数据挖掘的一些最基本的知识. 数据挖掘是对一系列数据进行分析和挖掘的方法的统称,在精准营销领域,最常用的数据挖掘方法主要包括以下三类:分类、聚类、关联. 分类(Classify)属于预测性模型. 分类模型的构建需要“训练样本”,训练样本中的每一个个体的类别必须是明确的. 分类模型的特征变量一般称为“自变量”,又叫“预测变量”,类别变量称为“目标变量”.

数据挖掘与Taco Bell编程

- everfly - 译言-每日精品译文推荐
来源Data Mining and Taco Bell Programming. Programmer Ted Dziuba suggests an alternative to traditional program that he called "Taco Bell Programming." The Taco Bell chain creates multiple menu items from about eight different ingredients.

使用Weka进行数据挖掘

- - 搜索研发部官方博客
数据挖掘、机器学习这些字眼,在一些人看来,是门槛很高的东西. 诚然,如果做算法实现甚至算法优化,确实需要很多背景知识. 但事实是,绝大多数数据挖掘工程师,不需要去做算法层面的东西. 他们的精力,集中在特征提取,算法选择和参数调优上. 那么,一个可以方便地提供这些功能的工具,便是十分必要的了. 而weka,便是数据挖掘工具中的佼佼者.

数据挖掘 - 分类算法比较

- - IBM developerWorks 中国 : 文档库
随着计算能力、存储、网络的高速发展,人类积累的数据量正以指数速度增长. 对于这些数据,人们迫切希望从中提取出隐藏其中的有用信息,更需要发现更深层次的规律,对决策,商务应用提供更有效的支持. 为了满足这种需求,数据挖掘技术的得到了长足的发展,而分类在数据挖掘中是一项非常重要的任务,目前在商业上应用最多.

数据挖掘分类技术

- - CSDN博客云计算推荐文章
从分类问题的提出至今,已经衍生出了很多具体的分类技术. 下面主要简单介绍四种最常用的分类技术,不过因为原理和具体的算法实现及优化不是本书的重点,所以我们尽量用应用人员能够理解的语言来表述这些技术. 而且我们会在第4章再次给读者讲述分类算法和相关原理. 在我们学习这些算法之前必须要清楚一点,分类算法不会百分百准确.