使用rpart(R包)观察对决策树预测的影响

时间:2018-03-16 21:29:47

标签: r machine-learning decision-tree prediction rpart

非常新的机器学习,所以如果对此的答案非常明显,我道歉。

我正在使用决策树,使用rpart包,尝试使用与该结构火灾相关的各种变量来预测结构火灾何时可能导致死亡,例如原因,损害程度等。

结构火灾导致死亡的几率大约为1/100。

总之,我的训练集中有大约154,000个观测值。我注意到,当我使用完整的训练集时,复杂性参数cp必须一直降低到.0003

> rpart(Fatality~.,data=train_val,method="class", control=rpart.control(minsplit=50,minbucket = 1, cp=0.00035))
n= 154181 

node), split, n, loss, yval, (yprob)
      * denotes terminal node

  1) root 154181 1881 0 (0.987800053 0.012199947)  
    2) losscat=Minor_Loss,Med_Loss 105538  567 0 (0.994627528 0.005372472) *
    3) losscat=Major_Loss,Total_Loss 48643 1314 0 (0.972986863 0.027013137)  
      6) HUM_FAC_1=3,6,N, 46102 1070 0 (0.976790595 0.023209405) *
      7) HUM_FAC_1=1,2,4,5,7 2541  244 0 (0.903974813 0.096025187)  
       14) AREA_ORIG=21,24,26,47,72,74,75,76,Other 1846  126 0 (0.931744312 0.068255688)  
         28) CAUSE_CODE=1,2,5,6,7,8,9,10,12,14,15 1105   45 0 (0.959276018 0.040723982) *
         29) CAUSE_CODE=3,4,11,13,16 741   81 0 (0.890688259 0.109311741)  
           58) FIRST_IGN=10,12,15,17,18,Other,UU 690   68 0 (0.901449275 0.098550725) *
           59) FIRST_IGN=00,21,76,81 51   13 0 (0.745098039 0.254901961)  
            118) INC_TYPE=111,121 48   10 0 (0.791666667 0.208333333) *
            119) INC_TYPE=112,120 3    0 1 (0.000000000 1.000000000) *
       15) AREA_ORIG=14,UU 695  118 0 (0.830215827 0.169784173)  
         30) CAUSE_CODE=1,2,4,7,8,10,11,12,13,14,15,16 607   86 0 (0.858319605 0.141680395) *
         31) CAUSE_CODE=3,5,6,9 88   32 0 (0.636363636 0.363636364)  
           62) HUM_FAC_1=1,2 77   24 0 (0.688311688 0.311688312) *
           63) HUM_FAC_1=4,5,7 11    3 1 (0.272727273 0.727272727) *

然而,当我抓住前10,000个观察结果(没有有意义的顺序)时,我现在可以使用cp的.01

运行
> rpart(Fatality~., data = test, method = "class", 
+       control=rpart.control(minsplit=10,minbucket = 1, cp=0.01))
n= 10000 

node), split, n, loss, yval, (yprob)
      * denotes terminal node

  1) root 10000 112 0 (0.988800000 0.011200000)  
    2) losscat=Minor_Loss,Med_Loss 6889  26 0 (0.996225867 0.003774133) *
    3) losscat=Major_Loss,Total_Loss 3111  86 0 (0.972356156 0.027643844)  
      6) HUM_FAC_1=3,7,N 2860  66 0 (0.976923077 0.023076923) *
      7) HUM_FAC_1=1,2,4,5,6 251  20 0 (0.920318725 0.079681275)  
       14) CAUSE_CODE=1,3,4,6,7,8,9,10,11,14,15 146   3 0 (0.979452055 0.020547945) *
       15) CAUSE_CODE=5,13,16 105  17 0 (0.838095238 0.161904762)  
         30) weekday=Friday,Monday,Saturday,Tuesday,Wednesday 73   6 0 (0.917808219 0.082191781) *
         31) weekday=Sunday,Thursday 32  11 0 (0.656250000 0.343750000)  
           62) AREA_ORIG=21,26,47,Other 17   2 0 (0.882352941 0.117647059) *
           63) AREA_ORIG=14,24,UU 15   6 1 (0.400000000 0.600000000)  
            126) month=2,6,7,9 7   1 0 (0.857142857 0.142857143) *
            127) month=1,4,10,12 8   0 1 (0.000000000 1.000000000) *
  1. 为什么会有更多的观察结果导致我 不得不降低复杂性?直觉我认为应该是 对面。
  2. 是否必须将cp缩减为.003“坏”?
  3. 一般来说,是否有任何其他建议可以提高决策树的有效性,尤其是在首先预测出概率很低的事情时?

1 个答案:

答案 0 :(得分:0)

  1. cp,从我读到的,是一个参数,用于决定何时停止向树中添加更多叶子(对于要考虑进行另一次分割的节点,通过允许改善相对误差)新的拆分必须超过cp阈值。因此,数字越低,它可以添加的叶子越多。更多观察意味着有机会降低门槛,我不确定我是否理解你“必须”减少cp ...但我可能是错的。如果这是一个非常罕见的事件,并且您的数据无法在模型的早期阶段显示出显着改善,则可能需要通过降低cp来“增加灵敏度”...但是您可能比我更了解你的数据。
  2. 如果您正在为罕见事件建模,请不要。如果这不是一个罕见的事件,cp越低,你越有可能适应样本的偏见。我不认为minbucket=1导致一个可解释的模型,或者......出于类似的原因。
  3. 对我来说,决策树除了3-4级之外没有太多意义,除非你真的相信这些硬切实际上创造了证明最终“桶”/节点或预测的标准(例如,如果我想把你带入像贷款或保险产品这样适合你的风险状况的东西,我的精算师努力削减前景。在将数据拆分3-4次,在树的底部生成至少8-16个节点之后,您基本上构建了一个模型,可以将其视为独立分类变量的三阶或四阶交互。如果你把20个统计学家(不是经济错过的)放在一个房间里并询问他们在一个模型中看到重要的三阶或四阶交互的次数,他们可能会抓挠他们的头脑。你有没有尝试过任何其他方法?或者从降维开始?更重要的是,您试图对数据做出什么推论?