决策树不对3个类别变量进行分类

时间:2014-07-02 21:04:22

标签: r

我正在尝试使用分类变量(3个类别)构建一个决策树,其中包含194个预测变量。

数据来自电子商务,目的是根据他们购买的产品,了解客户是否只有女孩,只有男孩或两个性别孩子。 问题是决策树只返回2个分类(男孩和女孩,没有任何条件被归类为两个性别)。

这是我的R代码:

fit <- rpart(GENDER~X1+X2+X3+X4+...+X193+X194,method="class", data=data)

这些是我的结果:

n= 4179 

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

 1) root 4179 2184 girl (0.12921752 0.47738693 0.39339555)  
   2) X120>=0.5 1042  229 girl(0.16890595 0.78023033 0.05086372) *
   3) X120< 0.5 3137 1546 boy(0.11603443 0.37679311 0.50717246)  
     6) X109>=0.5 381  120 girl(0.19160105 0.68503937 0.12335958) *
     7) X109< 0.5 2756 1212 boy(0.10558781 0.33417997 0.56023222)  
      14) X194>=0.5 129   34 girl(0.20155039 0.73643411 0.06201550) *
      15) X194< 0.5 2627 1091 boy(0.10087552 0.31442710 0.58469737)  
        30) X119< 0.5 2382 1057 boy(0.10327456 0.34047019 0.55625525)  
          60) X122>=0.5 70   12 girl (0.12857143 0.82857143 0.04285714) *
          61) X122< 0.5 2312  990 boy(0.10250865 0.32569204 0.57179931) *
        31) X119>=0.5 245   34 boy(0.07755102 0.06122449 0.86122449) *

Classification tree:
rpart(formula = GENDER ~ ., data = crs$dataset[crs$train, c(crs$input, 
    crs$target)], method = "class", parms = list(split = "information"), 
    control = rpart.control(usesurrogate = 0, maxsurrogate = 0))

如何在3个类别中进行分类,而不仅仅是2个?

2 个答案:

答案 0 :(得分:4)

默认情况下rpart()有一些停止规则阻止它适合整个树(即每个节点中的一个观察点),因为这很少是你想要的,你最终会修剪这些浓密的冗余叶子回来。

因此,我建议您的树无法预测类Both,因为就构建的树而言,从来不是任何终端节点中的多数投票获胜者。 girlboy后括号中的三个值是每个类的后验概率。 boy是第二个值,girl是第三个值,both是第一个值(假设这是R分配级别顺序的默认方式)。所以rpart()考虑到这样一个事实,即有三个类,只是它所识别的分裂从未预测过类both

您可以强制rpart构建一个大/完整的树;查看?rpart.control以及参数minsplitminbucketcp,这些参数都会阻止树长得太大,但却会出现一些大问题。你可以调整它们以适合一个完整的树(将它们全部设置得很低),但要注意你最终可能会修剪这些外层树叶的大部分。

至于为什么randomForest回馈第三类;也许有自举样本,你可以预测班级both(),或者有一些变量对于both的预测很重要,这些变量被突出显示因为randomForest随机抽取mtry变量来测试选择每个分裂。

答案 1 :(得分:0)

我刚刚运行了一个具有相同数据集的随机森林,并出现了第三类。