logo资料库

如何在WEKA中添加自己的算法.doc

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
weka源码分析之一:core包 续
如何在WEKA中添加自己的算法
Weka 相关资料存档 WEKA 开源数据挖掘工作平台 weka 中文网站 http://www.wekacn.org/ 中文论坛 http://forum.wekacn.org/viewforum.php?f=6&sid=d47d2d7ca82e451562cd4945ec6445e2 weka 网站 http://www.cs.waikato.ac.nz/ml/weka/ weka 论文集 http://www.cs.waikato.ac.nz/~ml/publications.html weka 书籍 http://www.wekacn.org/ Weka 学习指南 经常看到有人问,我想修改 Weka 里面的算法,我想把 Weka 的算法加到我自己的程序里面 去,但是我该从哪里着手呢?于是,这篇帖子就有必要出现了。但是,这个题目太大了, Weka 里面有那么多代码呢,一个个分析起来恐怕一卷书都装不下。因此,这里只能给个大 概的意思。 不要想光看这篇帖子就搞懂 Weka 怎么工作的,你必须自己打开 Weka 的代码包去体会。更 不想想没有用过 Weka 甚至没接触过 Java 就来修改它的算法,你会摸不着头脑的(实际上 Weka 和 Java 都不是那么难学)。 1 从哪里获得帮助 Data Mining: Practical Machine Learning Tools and Techniques (Second Edition) 这个书 的第 13-15 章应该是必读的。实际上下面的内容也基本上基于这几章。如果你能耐着性子把 这几章读懂,肯定不需要往下看这个帖子了。 作为一个 Java 应用程序,Javadoc 是必不可少的。在 Weka 安装目录 doc 下面有这份文档。 这个是干什么的?——问这个问题的人是没学会 Java 的人。 如果你还没有学会把 Weka 的源程序导入到开发工具(IDE)里面,那么本站 WEKA 开发 版有好几个帖子可供参考。Eclipse,Netbeans, Jcreator,你总有中意的吧?
2 核心部分 从 IDE 可以看到,和大多数 Java 程序一样,Weka 的源代码分成了若干个包(package),根 据包的名字就可以看出各自的功能。比如,classifiers 是管分类的(还有回归),gui 是管图 形界面的,等等。这中间各个部分都要调用到的,最最重要的,当然是"weka.core"这个包 了。 core 包中又有三个类(Class)是重中之重,我们就从这里入手。它们是 Instances, Attribute 和 Instance。 (未完待续) 3 一个自己的分类器 weka 源码分析之一:core 包 续 25)Version.java 定义类,存放版本信息,里面都是静态变量,实现 comparable 接口,可以比较版本的新旧 26)Queue.java 定义类,文件输入输出队列(数据接口中的队列-先进先出),可以序列化,里面有个内部类 queuenode,是队列的基本组成元素,也可以序列化。该文件很完整的包括 ds 队列的各必 须成分 27)RandomVariates.java 定义类,随机变量产生器,绝大部分都是静态函数 28)FastVector.java 定义类,快速向量类,没有同步,可复制,可序列化。内部类为 FastVectorEnumeration 29)Range.java 定义类,该类记录基数的范围,这个范围由字符串设定 30)RTSI.java 定义类,该类可以查找某个类或者接口的子类实现和继承 31)ContingencyTables.java 定义类,实现概率表的统计例程 32)BinarySparseInstance.java
定义类,存储稀疏向量 33)Stopwords.java 定义类,测试是否一个给定的字符串是停止词,用了哈希表 34)SparseInstance.java 定义类,存储属性稀疏的实例 35)Statistics.java 定义类,实现一些分布,测试等统计学工具 35)Matrix.java 定义类,操作浮点矩阵 36)Instance.java 定义类,很重要的类,处理实例。它对不同类型的属性值存储方式也不是不同的,值得模仿 37)Attribute.java 定义类,很重要,处理实例的属性 38)Optimization.java 定义类,有 bfgs 更新的主动集优化,多维边界约束 39)Utils.java 定义类,实现一些静态的工具函数 40)Instances.java 定义类,很重要的,存储有权重的实例组 如何想 Weka 中添加自己的算法 编写新算法,所编写的新算法必须符合 Weka 的接口标准。在此以从 Weka 中文站上下载的一个算法(模 糊 C 均值聚类算法:FuzzyCMeans)的添加为例说明其具体过程。 说明:该算法适合与 weka3.5,并且,算法中有一个小 bug, 225 行改为 DecisionTableHashKey hk = null;,下面的 bug 同样改为 DecisionTableHashKey 就对了! 2. 由于 FuzzyCMeans 是聚类算法,所以直接将 FuzzyCMeans.java 源程序考到 weka.clusterers 包下 3. 再 修 改 weka.gui.GenericObjectEditor.props , 在 #Lists the Clusterers I want to choose from 的 weka.clusterers.Clusterer=\下加入:weka.clusterers.FuzzyCMeans
4. 相应的修改 weka.gui.GenericPropertiesCreator.props ,此去不用修改,因为包 weka.clusterers 已经 存在,若加入新的包时则必须修改这里,加入新的包 我试了一下,这样加入之后,重新编译,运行后,可以在 weka 的 Explorer 界面上的 Cluster 选项卡中的 聚类算法中找到刚刚新添加的 FuzzyCMeans 算法。 添加过程简单吧!关键问题是要弄清楚 Weka 的内核以及其接口标准,然后编写出符合此规范的新算法。 如何在 WEKA 中添加自己的算法 1、跑起自己的源程序。 1)我们选择的是 eclipse3 版作为开发工具,下载地址: 2)将 weka 安装目录下的 weka-src.jar 包解压缩(注意,不是 weka.jar). 3)打开 Eclipse,然后新建一个 java 工程,点击 next。
4)在工程文件的名字上填写一个工程名,这里我们就填 Weka,如下图,点击 Finish 按钮。 5)然后选中刚才建立的 Weka 项目,按鼠标右键,新建一个“source folder”文件 src 用来 存放源代码。见下图。
6)然后把刚才解开压缩的源文件所在的目录,即 weka 目录,在资源管理器中拖入到 src 目 录中,如下图。注意:在解压缩 weka-src.jar 后得到的文件夹中有两个目录,META-INF 和 weka。我们只需要将 weka 目录拖入到 src 目录中。 拖入完毕后,eclipse 开始拷贝源代码到工作目录下,等待一会,完成后,如图所示。
里面有很多 warning,不要管他,如下图运行。打开 weka.gui 包,找到 GUIChooser,然后按 鼠标右键,选择 run as java applicaton 即可。
分享到:
收藏