使用 caret 包从 rpart 获取规则

数据挖掘 分类
2022-03-08 14:46:36

我正在寻找一种可以从决策树中提取规则的方法。我有 8 个预测变量,它们都是分类变量,响应变量有三个输出 AB 和 C。

我已经开发了模型并且还可以创建决策树,但是我在理解树和从模型中提取规则时遇到了麻烦。

我拥有的 8 个预测变量可以具有值 a、b、c、d、e。

举个例子,我想从我的决策树中提取规则,如下所示:

  • 规则1:

    Predictor 1 - a  
    Predictor 2 - b  
    Predictor 3 - c  
    Predictor 4 - b  
    Predictor 5 - a  
    Predictor 6 - d  
    Predictor 7 - e  
    Predictor 8 - a  
    
    Result: A
    
  • 规则 2:

    Predictor 1 - a  
    Predictor 2 - b  
    Predictor 3 - d  
    Predictor 4 - b  
    Predictor 5 - a  
    Predictor 6 - d  
    Predictor 7 - b  
    Predictor 8 - a  
    
    Result: A
    
  • 规则 3:

    Predictor 1 - a  
    Predictor 2 - b  
    Predictor 3 - d  
    Predictor 4 - a  
    Predictor 5 - a  
    Predictor 6 - a  
    Predictor 7 - b  
    Predictor 8 - a  
    
    Result: B  
    

等等等等。

有没有办法像我上面解释的那样从我的决策树中获得规则?

这是我的模型的结果:

  • 124 个样本
  • 8 个预测变量
  • 3 类:“A”、“B”、“C”

没有预处理。
重采样:交叉验证(10 倍,重复 10 次)。
样本量总结:112、111、111、112、110、112,...
跨调整参数重采样结果:

  cp           Accuracy   Kappa  
  0.00000000  1.0000000  1.0000000  
  0.06329114  1.0000000  1.0000000  
  0.12658228  1.0000000  1.0000000  
  0.18987342  1.0000000  1.0000000  
  0.25316456  1.0000000  1.0000000  
  0.31645570  1.0000000  1.0000000  
  0.37974684  1.0000000  1.0000000  
  0.44303797  0.7261846  0.5696935  

精度用于选择使用最大值的最佳模型。用于模型的最终值为 cp = 0.3797468。n= 124

node), split, n, loss, yval, (yprob) * 表示终端节点

1) root 124 79 A (0.3629032 0.2741935 0.3629032)    
  2) Activity4e< 0.5 45  0 A (1.0000000 0.0000000 0.0000000) *  
    3) Activity4e>=0.5 79 34 C (0.0000000 0.4303797 0.5696203)    
      6) Activity7c>=0.5 34  0 B (0.0000000 1.0000000 0.0000000) *  
      7) Activity7c< 0.5 45  0 C (0.0000000 0.0000000 1.0000000) * 

可视化我的决策树

1个回答

如果您已使用 rpart 构建原始树,则可以使用 rpart.rules 函数。

library(rpart)
fit<-rpart(Reliability~.,data=car.test.frame)
rpart.rules(fit)