如何从决策树中获取规则?

MartinLiebigMartinLiebig 管理员,版主,员工,RapidMiner认证分析师,RapidMiner认证专家,大学教授职位:3362年RM数据科学家
2018年11月编辑 知识库

问题

决策树以其可理解性而闻名。我如何以更方便的形式获得决策树提供的规则?

回答

要将决策树转换为规则,可以使用树到规则操作符。树到规则操作符是一个嵌套操作符,这意味着您可以将决策树放入其中。

决策树被解析成更容易理解的规则格式

RuleModel.png

这个规则模型可以用下面的Groovy脚本解析成一个示例集。Groovy脚本需要在Execute script操作符中使用。附上一个示例作为一个过程。

进口com.rapidminer.operator.learner.rules.RuleModel;
进口com.rapidminer.tools.Ontology;
进口com.rapidminer.tools.LogService;
进口com.rapidminer.operator.learner.rules.Rule;

进口java.util.logging.Level
RuleModel = input[0]
numberOfAttributes = 4;

Attribute[] attributes= new Attribute[numberOfAttributes];
attributes[0] = AttributeFactory。createAttribute("完整规则",Ontology.STRING);
attributes[1] = AttributeFactory。createAttribute(“标签”,Ontology.STRING);
attributes[2] = AttributeFactory。createAttribute("此规则涵盖的正确示例",Ontology.STRING);
attributes[3] = AttributeFactory。createAttribute("包含错误示例的规则",Ontology.STRING);
MemoryExampleTable表= new MemoryExampleTable(attributes);
ROW_FACTORY = new DataRowFactory(0);

String[] myvalues = new String[numberOfAttributes]

for(Rule currentRule: rulemodel . getrrules ()){
Int correct = 0;
Int error = 0;
int label = ruleModel.getLabel().getMapping().getIndex(currentRule.getLabel());
LogService.root.log(水平。信息,currentRule.toString ())
int[] frequency = currentRule.getFrequencies();
If(频率!= null) {
For (int I = 0;I < frequency .length;我+ +){
If (i == label) {
正确的+=频率[i];
} else {
错误+=频率[i];
}
}
myvalues[0] = currentRule.toString()
myvalues[1] = currentRule.getLabel()
myvalues[2] = String.valueOf(正确);
myvalues[3] = String.valueOf(错误);

DataRow row = ROW_FACTORY。创建(括号、属性)
table.addDataRow(行);
}
}

返回table.createExampleSet ();

结果如下图所示:

使用实例从Tree.png中设置

- RapidMin乐鱼平台进入er数据科学服务主管
德国多特蒙德
标记:
BalazsBarany Thomas_Ott yyhuang msacs09

评论

登录注册置评。