【发布时间】:2015-02-04 02:32:24
【问题描述】:
我有一个包含 10,000 行和两列的数据框,分段(具有 32 个值的因子)和目标(具有两个值的因子,“是”和“否”,每个值 5,000)。我正在尝试使用随机森林对目标进行分类,并使用分段作为特征。
训练随机森林分类器后:
> forest <- randomForest(target ~ segment, data)
混淆矩阵强烈偏向“否”:
> print(forest$confusion)
no yes class.error
no 4872 76 0.01535974
yes 5033 19 0.99623911
在 10,000 行中,不到 100 行被归类为“是”(即使原始计数为 50/50)。如果我切换标签的名称,我会得到相反的结果:
> data$target <- as.factor(ifelse(data$target == 'yes', 'no', 'yes'))
> forest <- randomForest(target ~ segment, data = data)
> print(forest$confusion)
no yes class.error
no 4915 137 0.02711797
yes 4810 138 0.97210994
所以这不是一个真正的信号……而且,原来的交叉表是比较平衡的:
> table(data$target, data$segment)
1 10 11 12 13 14 15 16 17 18 19 2 20 21 22 23 24 25 26 27 28 29 3 30 31 32 4 5 6 7 8 9
no 1074 113 121 86 68 165 210 70 120 127 101 132 90 108 171 122 95 95 76 72 105 71 234 58 83 72 290 162 262 192 64 139
yes 1114 105 136 120 73 201 209 78 130 124 90 145 81 104 155 128 79 85 83 70 93 78 266 70 93 76 291 160 235 194 49 137
看起来 randomForest 采用第一个标签并且几乎总是给它分配点。澄清一下,数据框是具有更多特征的更大表的子集 - 我刚刚发现这个特定特征以某种方式导致了这个结果,无论包含多少其他特征。我想知道我是否遗漏了一些关于随机森林分类器的基本知识,或者是否存在一些编码问题或其他导致这种奇怪结果的错误。
原始数据集在此处作为 RDS 提供:
https://www.dropbox.com/s/rjq6lmvd78d6aot/weird_random_forest.RDS?dl=0
谢谢!
【问题讨论】:
标签: r machine-learning random-forest