RIpple-DOwn Rule算法和weka中Rider使用--数据挖掘学习和weka使用(五)

长平狐 发布于 2013/11/25 11:38
阅读 738
收藏 0

RIpple-DOwn Rule算法简介

RIpple-DOwn Rule算法(链波下降规则)是一种专家系统方法论,它是澳大利亚新南威尔士大学的Compton教授于1989年提出。它是一种用于知识表示和获取的方法。从某种意义上看RDR算法是CBR方法的一种扩展或者变形,RDR将规则引入CBR中,用规则来索引案例,以错误驱动机制来获取知识。

RIpple-DOwn Rule算法是比较简单,有时候得出的结果不能让人满意,但是它是我最喜欢的一种算法,它通过否定规则来表示结果,非常适合人类理解。

RIpple-DOwn Rule算法流程

RIpple-DOwn Rule算法使用了二元决策树,区别于标准决策树,RDR用复合条款是来确定分支,同时这些条款不需要详尽涵盖所有情况,即可以有分类错误的情况,然后用错误的数据作为新整体再处理,以获得内部分支。

为了方便说明,我们先看一个RDR的输出

weka5_1

这是一个医学诊断系统的涟波规则。

我们还是以weather.arff的数据为例。

weka5_2

看一下我们的分类要求,要分成no和yes两类。

no 的权重是5,yes的权重是9。

由错误驱动生成第一条规则

play = no

很明显这条规则没有正确分类

weka5_3

总共14个样本,有9个被分类错了。

再来生成内规则。

生成过程就省略了…请参考本文最后的参考文献。第二条规则是

Except (humidity <= 82.5) => play = yes

序号为6的数据被错误分类为play了.最终的规则是

play = no

           Except (humidity <= 82.5) => play = yes

最终的规则分类正确10个,错误4个,正确率71.4286 %。

比较图如下:

weka5_4

左边是分类结果,右边是原始结果。

使用Weka实现RDR算法

在weka中RDR算法对应的类是Rider,我使用的是3.6,3.7版本没有找个类了…

核心代码:

Ridor ridor = new Ridor(); ridor.buildClassifier(instances);

使用:

ridor.classifyInstance(instance)

还是使用weather数据,完整代码如下:

import weka.classifiers.Evaluation; import weka.classifiers.rules.Ridor; import weka.core.Instances; import weka.core.converters.ConverterUtils.DataSource; public class MainStarter { public static void main(String[] args) throws Exception { System.out.println("start" ); Instances instances = DataSource.read("data/weather.arff" ); instances.setClassIndex(instances.numAttributes() - 1 ); System.out.println(instances.toSummaryString()); Ridor ridor = new Ridor(); ridor.buildClassifier(instances); System.out.println(ridor.toString()); Evaluation eval = new Evaluation(instances); eval.evaluateModel(ridor, instances); System.out.println(eval.toSummaryString("\nResults\n======\n", false )); Instances in = new Instances(instances); in.setClassIndex(0 ); in.deleteAttributeAt(in.numAttributes() - 1 ); for ( int i = 0; i < in.numInstances() - 1; i++ ) { System.out.println(in.instance(i).toString() + ":" + ridor.classifyInstance(in.instance(i))+"--"+ instances.instance(i).classValue()); } System.out.println("end" ); } }

结果:

weka5_5

相关参考

没有细致的介绍RIpple-DOwn Rule算法主要是因为这个算法虽然简单,但实现方法比较多,又涉及到拓扑和集合运算,有兴趣的可以参考一下:

Induction of Ripple-Down Rules Applied to Modeling Large Databases


原文链接:http://www.cnblogs.com/htynkn/archive/2012/06/10/weka_5.html
加载中
返回顶部
顶部