4

我是随机森林分类器的新手。我正在使用它对具有两个类的数据集进行分类。- 特征数量为 512。 - 数据比例为 1:4。即,75% 的数据来自第一类,25% 来自第二类。- 我正在使用 500 棵树。

分类器产生 21.52% 的袋外错误。第一类(由 75% 的训练数据表示)的每类误差为 0.0059。而第二类的分类误差非常高:0.965。

我正在寻找这种行为的解释,如果您有提高第二类准确性的建议。

我期待着您的帮助。

谢谢

忘了说我使用的是 R 并且在上面的测试中我使用了 1000 的节点大小。

在这里,我只用 10 棵树和 nodesize= 1 重复了训练(只是为了给出一个想法),下面是 R 中的函数调用和混淆矩阵:

  • 随机森林(公式 = 标签 ~ .,数据 = chData30PixG12,ntree = 10,重要性 = TRUE,节点大小 = 1,keep.forest = FALSE,do.trace = 50)
  • 随机森林类型:分类

  • 树的数量:10

  • 每次拆分尝试的变量数:22

  • OOB 估计错误率:24.46%

  • 混淆矩阵:

  • 不相关的,相关的,class.error

  • 无关 37954 , 4510 , 0.1062076
  • 相关 8775 , 3068 , 0.7409440
4

6 回答 6

10

我同意@usr,一般来说,当您看到随机森林简单地将(几乎)每个观察分类为多数类时,这意味着您的特征没有提供太多信息来区分这两个类。

一种选择是运行随机森林,这样您就可以对少数类的观察结果进行过度采样(而不是从整个数据集中进行替换采样)。因此,您可以指定每棵树都建立在大小为 N 的样本上,您可以强制 N/2 的观察来自每个类(或您选择的其他比例)。

虽然这可能对某些人有所帮助,但这绝不是万灵药。与调整 RF 设置相比,找到更好的功能来区分类别可能更有可能获得更多的里程。

于 2012-04-24T21:53:31.953 回答
5

我很惊讶没有人提到使用“classwt”参数。加权随机森林 (WRF) 专门用于解决此类问题。

请参见此处:堆栈交换问题 #1

在这里:堆栈交换问题 #2

关于加权随机森林的文章:PDF

于 2014-01-23T13:49:55.833 回答
4

嗯,这是典型的类不平衡问题。随机森林是一种旨在最大化模型准确性的分类器。当一个类占数据的大部分时,分类器实现准确度的最简单方法是将所有观察结果分类到多数类中。在您的情况下,这给出了非常高的准确度,为 0.75,但是一个糟糕的模型 - 对于少数类几乎没有正确的分类。有很多方法可以处理这个。更简单的方法是使用多数类的欠采样来平衡数据,然后用这个平衡的数据训练模型。希望这可以帮助你。

于 2013-01-14T21:57:41.747 回答
3

您可以尝试使用 sampsize = c(500,500) 来平衡错误结果(即,在每棵树中,每个类将使用 500 个,以避免不平衡错误的问题,您当然可以更改数字,以及将节点大小设置得这么大它可能会使树变得非常小(在每棵树中使用一些变量)。你不想过度训练训练集(即使 RF 模型处理了这一点)但你想至少使用一些每棵树中的变量。

于 2013-08-07T20:04:53.190 回答
1

如果您将显示导致如此糟糕分类的代码,它将很有用。现在我看到了表现如此糟糕的一个原因——nodesize = 1000价值太大。你的数据集中有多少观察?尝试使用默认值nodesize或将其设置为更小的值。

于 2012-04-25T08:26:55.513 回答
0

看起来分类器完全无法在数据中找到结构。它所能做的最好的事情是将所有内容归类为第 1 类,因为这是最常见的类。

于 2012-04-24T21:43:13.100 回答