RF:一个级别的OOB精度高,另一个级别的精度非常低,具有大的不平衡性

时间:2012-04-24 21:37:50

标签: r machine-learning classification random-forest

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

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

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

我期待着你的帮助。

由于

忘了说我正在使用R而且我在上面的测试中使用了1000的nodesize。

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

  • randomForest(formula = Label~。,data = chData30PixG12,ntree = 10,importance = TRUE,nodesize = 1,keep.forest = FALSE,do.trace = 50)
  • 随机森林类型:分类

  • 树木数量:10

  • 没有。每次拆分时尝试的变量:22

  • 错误率的OOB估计值:24.46%

  • 混淆矩阵:

  • 不相关,相关,class.error

  • 不相关37954,4510,0.1062076
  • 相关8775,3068,0.7409440

6 个答案:

答案 0 :(得分:10)

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

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

虽然这可能对某些人有所帮助,但它绝不是万灵药。你可能更有可能从找到更好的功能中获得更多的好处,这些功能可以很好地区分类,而不是调整RF设置。

答案 1 :(得分:5)

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

见这里:Stack Exchange question #1

在这里:Stack Exchange question #2

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

答案 2 :(得分:4)

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

答案 3 :(得分:3)

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

答案 4 :(得分:1)

如果您要显示导致分类错误的代码,那么它将非常有用。现在我看到了一个对这种糟糕表现的反应 - nodesize = 1000是一个太大的价值。您的数据集中观察了多少次?尝试使用默认值nodesize或将其设置为更低的值。

答案 5 :(得分:0)

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