摘要:本文对MOA(Massive Online Analysis)的官方网站内容及MOA项目代码结构进行分析。截至2014年9月20日,MOA的最新版本是Release 2014.04,需要Weka3.7以上版本的支持。文章根据网站的一级标题、二级标题、三级标题进行逐级分析。
关键字:MOA;网站结构;Weka
Weka软件(Waikato Environment for Knowledge Analysis)具有一套用于数据挖掘任务的机器学习算法,这些算法既可以直接应用于一个数据集,也可以由我们自己编写的Java代码调用。Weka包含用于数据预处理、分类、回归、聚类、关联原则以及可视化的工具,它也适用于开发新的机器学习机制[1]。当在Java项目中装载好Weka.jar、Weka-src.jar之后,就可以继承Weka中现有的类开始编写新的算法。
MOA[2]是Massive Online Analysis的缩写,它是基于Weka的一个项目,提供挖掘数据流的环境,由Weka的机器学习组(MachineLearning Group)开发研究,属于COSI(center for open software innovation,Waikato大学在计算机科学理论和实践方面的领军研究中心)支持的项目。MOA是最流行的数据流挖掘开源方法,有非常活跃的社区(blog[3])。MOA具有一系列机器学习算法(分类、回归、聚类、离群检测及推荐系统)和评价工具。与Weka相似的,MOA也是用java语言编写的。
MOA官方主页为:http://moa.cms.waikato.ac.nz/,主要包括Download、Overview、Details、Blog、Extensions、Team、Datasets七个主目录。另外,在主页的下方提供了一些下载、文档、帮助等的快捷入口。下面,我们从七个方面,对MOA做简要的分析。
此页面提供MOA相关软件和文档下载,具体情况介绍如下:
(1)相应软件
最新的MOA版本是MOA Release 2014.04,网站提供了插件下载地址。此外,还提供了其他扩展软件的下载页面,以及MOA源码仓库(Mercurial仓库)[4][5]。
(2)之前版本
之前使用的版本主要包括:
MOA Release 2013.11;
MOA Release 2013.08;
MOA Release 2012.08;
MOA Release 2012.03;
MOA Release 2011.10。
(3)Maven集成
可以将MOA纳入maven项目管理,通过在项目的pom.xml文件中添加如下依赖:
(4)教程
教程主要包括对MOA的介绍、对MOA文档的介绍、对MOA聚类的介绍以及对ADAMS和MOA的介绍。其中,对MOA的介绍是在2012年3月编写的,主要介绍如何启动MOA的图形界面并说明图形界面各部分的功能、分类图形用户接口、命令行使用方法、对前文的练习题给出简单的答案。对MOA文档的介绍是在2012年3月编写的,主要给出使用API的简单例子程序,并详细说明了编写一个新分类器的方法,并附有代码说明。对MOA聚类的介绍是在2013年10月编写的,主要介绍了、数据流聚类的设置方法、如何微调自己的流聚类方法、如何比较2种数据流算法。对ADMAS和MOA是在2012年11月编写的。
(5)文档
给出视频介绍、说明文档及用户手册。MOA Data Stream Mining文档主要介绍了挖掘数据流的相关算法,MOA Manual文档主要介绍了用户使用MOA界面的手册。
(6)API
这是MOA项目API的连接地址。
这一部分是对MOA的一个概述内容,主要包括使用MOA和MOA与Weka的交互性。
MOA是Weka相关的项目,使用Java编写,可进一步扩展以解决更多问题。MOA的目标是给挖掘数据流内容的实验提供一个标准方法,它提供了三方面的功能:可存储(真实和合成)数据流的设置,便于重复实验;比较一系列著作中的现有算法和方法;为新的流、算法和评价方法提供一个简单的可扩展框架。
网站二级标目录,这一部分讲述了MOA的启动和使用过程,具体过程如下所示:
1. 从网站的链接地址http://sourceforge.net/projects/moa-datastream/上下载MOA;
2. 在命令行输入java -cp moa.jar -javaagent:sizeofag.jar moa.gui.GUI命令启动MOA图像用户界面;
3. 在GUI界面点击“configure”设置需要执行的任务,点击“Run”去运行任务。几个任务能够同时运行,且如果一个任务需要文本输出,它能够在GUI界面的中间显示,并保持到磁盘总;
4. 列举一个实例,用1百万条数据比较贝叶斯分类器和决策树分类器,并在GUI界面查看运行结果。输入的命令为:EvaluatePrequential -i 1000000 -f 10000 -l bayes.NaiveBayes;EvaluatePrequential -i 1000000 -f10000 -l trees.HoeffdingTree。需要注意的是,这里使用的prequential评价方法不同于标准的交叉验证技术,这是一个在线评价方法,每次一个新实例到达,首先用新实例去测试和训练。
5. 我们也可以从ARFF文件中获得流数据,可以的数据集可以从第7部分的数据集中得到,相应的命令行如下所示:EvaluatePrequential -s (ArffFileStream -f elec.arff)。另外,我们也可以用概念转化生成流数据。
6. 如果你想继续了解MOA的使用方法,可以看教程1和教程2,以及MOS手册和数据流挖掘文档,有相应的网站链接地址。
MOA可以实时处理大数据的流挖掘问题以及大规模的机器学习问题。MOA可以用新的挖掘算法、新的流产生器或者评价方法进行扩展,其目标是为流挖掘社区提供一个标准组建。目前,MOA可以支持流分类、流聚类、离群检测、推荐系统算法。当然,MOA也可以拓展到其他数据流挖掘任务,比如频率模式挖掘、变化检测以及概念漂移。当我们想把一个新的学习算法拓展到MOA平台时,这里提供了两种情况的解决方案,包括添加新的流分类算法及流聚类算法的两种情况。
网站二级目录,主要讲述了使用GUI进行MOA分类任务,这一部分可以参考第2.1部分启动MOA。另外,此目录下还包括了命令行、分类器、流数据、使用Weka的内容。
网站三级目录,这一部分用讲述了在命令行使用如何使用命令运行MOA程序,详细情况请看下面几个例子。
第一个例子是用MOA项目训练一个数据流树型分类器并且创建一个模型,最终创建一个名字为model1.moa的包含决策规则的模型,其具体命令如下所示:
java -cp moa.jar -javaagent:sizeofag.jar moa.DoTask\
LearnModel -l trees.HoeffdingTree \
-sgenerators.WaveformGenerator -m 1000000 -O model1.moa
对于命令做如下简要解释,其中moa.DoTask类是在命令行运行任务的主类,他接收具有合适参数的任务名,这个任务是一个学习模型任务。对于其他的使用到的参数,做如下简要分析:
u -l 参数是指定的学习器,在这里是指数据流学习器;
u -s 参数是指定的需要学习的流数据,在这里是指生成器。WaveformGenerator是指定的,它是一个数据流生成器,能够产生一个识别三种波形的三类学习问题。
u -m 选项指定了训练学习器的最大数目,在这里为1百万。
u -O 选择指定了输出结果模型的文档
下一个例子是评价模型的精确度,具体命令如下所示:
java -cp moa.jar -javaagent:sizeofag.jarmoa.DoTask \
"EvaluateModel -m file:model1.moa \
-s(generators.WaveformGenerator -i 2) -i 1000000"
评价命令运行以后,会输出如下所示内容:
classified instances = 1,000,000
classifications correct (percent) = 84.474
Kappa Statistic (percent) = 76.711
网站三级目录,主要简要讲述了在MOA项目中运行的分类器,如下所示:
(1)贝叶斯分类器
NaiveBayes
Naive Bayes Multinomial
(2)决策树分类器
Decision Stump
Hoeffding Tree
Hoeffding Option Tree
Hoeffding Adaptive Tree
(3)元分类器
Bagging
Boosting
Bagging using ADWIN
Bagging using Adaptive-Size Hoeffding Trees
Preceptron Stacking of Restricted Hoeffding Trees
Leveraging Bagging
(4)功能分类器
Perceptron
SGD: Stochastic Gradient Descent
SPegasos
(5)漂移分类器
SingleClassifierDrift
另外,综述了一些静态流分类器和动态流分类器,具体内容如下所示。
(6)静态流分类器:
MajorityClass
NaiveBayes
DecisionStump
HoeffdingTree
HoeffdingOptionTree
AdaHoeffdingOptionTree
HoeffdingAdaptiveTree
OzaBag
OzaBoost
OCBoost
(7)动态流分类器:
OzaBagASHT
OzaBagADWIN
LevragingBag
Perceptron
SGD
Spegasos
SingleClassifierDrift
网站三级目录,综述了MOA中可用于生成流的类,总结如下所示:
(1)ArffFileStream:读取ARFF文件中的流
参数说明:
-f 加载ARFF文件
-c 数据的类索引,0表示没有,-1表示文件中最后一个属性
(2)ConceptDriftStream:将概念漂移添加到流实例的一个生成器
实例:
ConceptDriftStream -s (generators.AgrawalGenerator-f 7)
-d(generators.AgrawalGenerator -f 2) -w 1000000 -p 900000
参数说明:
-s 流
-d 概念漂移流
-p 概念漂移转化的中心位置
-w 概念漂移转化的长度
(3)ConceptDriftRealStream:
(4)FilteredStream:过滤器流
(5)AddNoiseFilter:在一个流中添加随机噪音到实例中
(6)generators.AgrawalGenerator:生成10种不同的预定义加载函数中的一种
(7)generators.HyperplaneGenerator:
(8)generators.LEDGenerator:
(9)generators.LEDGeneratorDrift
(10)generators.RandomRBFGenerator:
(11)generators.RandomRBFGeneratorDrift:
(12)generators.RandomTreeGenerator:
(13)generators.SEAGenerator:
(14)generators.STAGGERGenerator:
(15)generators.WaveformGenerator:
(16)generators.WaveformGeneratorDrift:
到目前为止,我们很容易使用WEKA中的MOA分类器和流以及MOA中的WEKA分类器。在WEKA和MOA中使用增量式分类器最主要的不同是使用的评价方法。Weka分类器可以使用增量式和非增量式的方式,而在MOA中使用Weka分类器需要用到下面的类:
(1)WEKAClassifier:
来自WEKA中使用分类器的一个分类器,举例说明如下所示:
WEKAClassifier -l weka.classifiers.trees.J48
-w 10000 -i 1000 -f 100000
参数说明:
-l 训练分类器
-w 训练学习器窗口大小
-i 训练学习器第一个窗口大小
-f 模型建立之间的实例数目
(2)SngleClassifierDrift:
在分类器中用wrapper处理概念转移的一个类,举例说明如下所示:
SingleClassifierDrift -d EDDM
-lweka.classifiers.bayes.NaiveBayesUpdateable
参数说明:
-l 训练分类器
-d 使用的漂移检测方式,有DDM或者是EDDM
在WEKA Explorer、知识流接口或者是命令行接口中,使用weka.classifiers.meta.MOA元分类器,你能够很容易能够把MOA分类器作为增量式分类器。这个元分类器仅仅是MOA分类器的一个封装器,能将WEKA方式转化为MOA中一个。
这一部分讲述了流聚类相关问题,主要包括数据获取和数据生成器、流聚类算法和流聚类评价方法。想要详细了解流聚类的相关内容,可参考这部分内容。
这一部分讲述了在GUI界面中进行MOA离群检测研究的相关内容,详细了解MOA中离群检测的相关内容,可参考这部分内容。
这一部分讲述了在GUI界面中进行MOA推荐系统算法研究的相关内容,详细了解MOA中推荐系统算法的相关内容,可参考这部分内容。
介绍MOA项目开发的主要事件和相关文章,文章是根据发布时间由新到就排序的,感兴趣的读者可以根据自己的喜爱进行相关阅读。
这一部分首先讲述了拓展MOA的方法,然后综述了新的MOA拓展及当前可以的MOA拓展,下面我们对三方面的拓展做简要分析。
(1)拓展MOA的方法
拓展的命令行方法,即java-cp extension.jar:moa.jar -javaagent:sizeofag.jar moa.gui.GUI,
(2)新的MOA拓展
网络自动聚类2(SAE2)和无标度网络分类(SFNClassife),并给出了相应网站地址。
(3)可用的MOA拓展
当前可以的MOA拓展主要包括频繁模式挖掘、分类与回归、Stream SentimentAnalysis分析,下面我们对可用的MOA拓展这几个方面做简要分析。
频率模式挖掘:
u MOA-IncMine,计算数据流中的闭频繁项,2008。
u MOA-AdaGraphMiner,从随时间变化的流中挖掘图模式,Albert Bifet。
u MOA-Moment,通过流滑动窗口挖掘闭频繁项,2004。
分类与回归:
u IBLStreams (Instance Based Learner on Streams),在流数据上基于实例的学习器,2012。
u MOA-TweetReader,Albert Bifet。
u Classifiers & Drift Detection Methods。
u MODL split criterion and GK class summary,2012。
u iOVFDT (Incrementally Optimized Very Fast Decision Tree),2012。
u Anytime Nearest Neighbor Classifier,2010。
u Social Adaptive Ensemble 2 (SAE2) and Scale-free Network Classifier(SFNClassifier),网络自动聚类和无标度网络分类,2014.
流情感分析(StreamSentiment Analysis):
u Framework for Sentiment Analysis of a Stream of Texts (2012 HarvestProject)。
网站第二级目录内容,主要介绍了与MOA相关的项目和包。
(1)ADAMS – a different take onworkflows
the Advanced Data mining And Machine LearningSystem,一个高级的数据挖掘与机器学习系统,是一个能够快速构建和维护现实中复杂的知识流的新型工作流引擎。当前最新版本为 0.4.6,有相应网站的连接地址,2014-06-23。
(2)Framework for Sentiment Analysis ofa Stream of Texts (2012 Harvest Project)
这个项目能够构建一个在线实时系统,用于分析将要带来的文本流数据,并且能够用一个小型应用程序可视化其主要特点,有相应的网站链接地址。
(3)Pocket Data Mining PDM
这个项目主要描述了在移动分布式环境中对流数据的协同挖掘算法,有相应的视频链接地址。
(4)Dariusz Brzeziński MOA extensions
这个包的主要内容是作者DariuszBrzeziński在读硕士期间编写的,主要讲述了MOA分布的一些拓展内容。这些拓展内容主要包括移除属性的过滤器、数据分块评价方法、精确加权聚类可执行算法和精确多样化聚类的可执行性。有相应网站和作者的链接地址。
(5)Thomas Lotze MOA extensions
这个MOA拓展包主要包括一个两类测试集合的预测生成器,有相应网站的链接地址。
(6)ADMIRE project
the Advanced Data Mining and Integration Researchfor Europe (ADMIRE) project,将MOA用于先进数据挖掘和集成研究的欧洲项目,有相应网站的链接地址。
这一部分主要是MOA机器学习项目的研究人员的名单,另外目录下包括Publication和Contact两个子目录,下面简单介绍这两个子目录。
这一部分主要涵盖了MOA相关的一些发表文章,并且网页上方为几篇文章的简单PPT,想要了解MOA最新的研究成果等,你可以参考这一部分的内容。
MOA网站为用户和开发者提供了相应的论坛和邮件地址,如果你想知道更多关于MOA的相关信息,或者是有相关问题需要交流解答等,你可以参考这一部分的内容。
介绍了4种数据集,并给出了下载地址。
(1)Forest Covertype数据集
UCI Machine Learning Repository Normalized Dataset,Date Donated: 1998-08-01。
(2)Poker-Hand数据集
UCI Machine Learning Repository Normalized Dataset,Date Donated: 2007-01-01。
(3)Electricity数据集
Orignianl Dataset, Normalized Dataset, DataDonated: 2004-5-31。
(4)Airlines Dataset数据集
Data Donated: 2009。
[1] |
http://www.cs.waikato.ac.nz/ml/weka/ |
[2] |
http://moa.cs.waikato.ac.nz/ |
[3] |
http://moa.cms.waikato.ac.nz/blog/ |
[4] |
https://code.google.com/p/moa/ |
[5] |
https://code.google.com/p/moa/source/checkout |