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

10 6月

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2012/06/10/weka_5/

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;

publicclass MainStarter {

publicstaticvoidmain(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("nResultsn======n",false));

Instancesin =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

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2012/06/10/weka_5/

发表评论

电子邮件地址不会被公开。