r - randomForest R 包的奇怪结果

标签 r machine-learning random-forest

我有一个包含 10,000 行和两列的数据框、段(具有 32 个值的因子)和目标(具有两个值"is"和“否”的因子,每个值 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 行被分类为"is"(即使原始计数为 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

谢谢!

最佳答案

您的数据框架是平衡的,因为"is"和“否”总体上可能性相同。但是,segment 的值本质上不包含有关 target 值的信息,因为“yes”和“no”对于所有级别的 的可能性大致相同>segment,因此没有理由期望随机森林或任何其他过程能够做出好的预测。

如果将segment 转换为数字,则randomForest 大约 65% 的时间预测为“yes”。大约 63% 的数据位于 segment 值中,其中"is"比“否”的可能性(稍微)大,因此这可以解释当 segment 时"is"预测的高比率 是数字。但无论segment是数字还是因子,总体错误率都大致相同。我不确定为什么当 segment 是一个因素时,randomForest 几乎总是选择“否”。

关于r - randomForest R 包的奇怪结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27324066/

相关文章:

r - 从特定包加载函数

python - 如何使用 SciKit Learn 转换一次编码多个特征

python - sklearn.ensemble 中的 VotingClassifier ImportError

注册的 doParallel 集群不适用于 train/caret parRF 模型

R - 部分字符串匹配子集

regex - 如何在 R 中的字符串中搜索美元符号?

r - 操作数据框(使用 R)

machine-learning - 句子相似度算法的探讨

machine-learning - 作为分类器输出的图

python - 无法理解 scikit 随机森林的输出