本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
RIpple-DOwn Rule算法简介
RIpple-DOwn Rule算法(链波下降规则)是一种专家系统方法论,它是澳大利亚新南威尔士大学的Compton教授于1989年提出。它是一种用于知识表示和获取的方法。从某种意义上看RDR算法是CBR方法的一种扩展或者变形,RDR将规则引入CBR中,用规则来索引案例,以错误驱动机制来获取知识。
RIpple-DOwn Rule算法是比较简单,有时候得出的结果不能让人满意,但是它是我最喜欢的一种算法,它通过否定规则来表示结果,非常适合人类理解。
RIpple-DOwn Rule算法流程
RIpple-DOwn Rule算法使用了二元决策树,区别于标准决策树,RDR用复合条款是来确定分支,同时这些条款不需要详尽涵盖所有情况,即可以有分类错误的情况,然后用错误的数据作为新整体再处理,以获得内部分支。
为了方便说明,我们先看一个RDR的输出
这是一个医学诊断系统的涟波规则。
我们还是以weather.arff的数据为例。
看一下我们的分类要求,要分成no和yes两类。
no 的权重是5,yes的权重是9。
由错误驱动生成第一条规则
play = no
很明显这条规则没有正确分类
总共14个样本,有9个被分类错了。
再来生成内规则。
生成过程就省略了…请参考本文最后的参考文献。第二条规则是
Except (humidity <= 82.5) => play = yes
序号为6的数据被错误分类为play了.最终的规则是
play = no
Except (humidity <= 82.5) => play = yes
最终的规则分类正确10个,错误4个,正确率71.4286 %。
比较图如下:
左边是分类结果,右边是原始结果。
使用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");
}
}
结果:
相关参考
没有细致的介绍RIpple-DOwn Rule算法主要是因为这个算法虽然简单,但实现方法比较多,又涉及到拓扑和集合运算,有兴趣的可以参考一下:
Induction of Ripple-Down Rules Applied to Modeling Large Databases
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯