我正在尝试使用分类变量(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个?
答案 0 :(得分:4)
默认情况下rpart()
有一些停止规则阻止它适合整个树(即每个节点中的一个观察点),因为这很少是你想要的,你最终会修剪这些浓密的冗余叶子回来。
因此,我建议您的树无法预测类Both
,因为就构建的树而言,从来不是任何终端节点中的多数投票获胜者。 girl
或boy
后括号中的三个值是每个类的后验概率。 boy
是第二个值,girl
是第三个值,both
是第一个值(假设这是R分配级别顺序的默认方式)。所以rpart()
考虑到这样一个事实,即有三个类,只是它所识别的分裂从未预测过类both
。
您可以强制rpart
构建一个大/完整的树;查看?rpart.control
以及参数minsplit
,minbucket
和cp
,这些参数都会阻止树长得太大,但却会出现一些大问题。你可以调整它们以适合一个完整的树(将它们全部设置得很低),但要注意你最终可能会修剪这些外层树叶的大部分。
至于为什么randomForest回馈第三类;也许有自举样本,你可以预测班级both()
,或者有一些变量对于both
的预测很重要,这些变量被突出显示因为randomForest随机抽取mtry
变量来测试选择每个分裂。
答案 1 :(得分:0)
我刚刚运行了一个具有相同数据集的随机森林,并出现了第三类。