如何在R中从随机森林中提取if-then规则?

4

我需要提取随机森林模型中所有树对应的if-then规则。

我正在使用RRF和inTrees软件包进行此操作。

library(RRF)
library(inTrees)
treeList <- RF2List(rf)
ruleExec <- extractRules(treeList,X,digits=4)
ruleExec <- unique(ruleExec)

这给我输出了以下结果:
X[,9]>0.599 & X[,10]>2.2447

我需要预测对应的类,例如:-
If X[,9]>0.599 & X[,10]>2.2447 then Class1

@jogo 它给了我大约2000个没有相应类的规则。 - Gaurav Deval
你能提供一个最小可重现示例吗? - jogo
1个回答

2
你可以使用inTrees中的getRuleMetric函数。根据inTrees的文档:
给条件分配结果,并测量规则
根据您使用鸢尾花数据集和目标变量Species的示例:
ruleMetric <- getRuleMetric(ruleExec, X, target)

输出:

  #      len freq    err                  condition                                                                         pred        
  # [1,] "1" "0.333" "0"                  "X[,4]<=0.8"                                                                      "setosa"    
  # [2,] "3" "0.187" "0"                  "X[,4]>0.8 & X[,4]<=1.65 & X[,4]<=1.35"                                           "versicolor"
  # [3,] "4" "0.127" "0"                  "X[,3]<=4.95 & X[,4]>0.8 & X[,4]<=1.65 & X[,4]>1.35"                              "versicolor"
  # [4,] "5" "0.02"  "0"                  "X[,3]>4.95 & X[,4]>0.8 & X[,4]<=1.65 & X[,4]>1.35 & X[,4]<=1.55"                 "virginica" 
  # [5,] "6" "0.007" "0"                  "X[,2]<=2.85 & X[,3]>4.95 & X[,4]>0.8 & X[,4]<=1.65 & X[,4]>1.35 & X[,4]>1.55"    "versicolor"
  # [6,] "6" "0.007" "0"                  "X[,2]>2.85 & X[,3]>4.95 & X[,4]>0.8 & X[,4]<=1.65 & X[,4]>1.35 & X[,4]>1.55"     "virginica" 
  # ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接