首页 文章

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

提问于
浏览
4

我是随机森林分类器的新手 . 我用它来分类有两个类的数据集 . - 功能数量为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 回答

  • 1

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

  • 5

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

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

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

  • 0

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

    看这里:Stack Exchange question #1

    在这里:Stack Exchange question #2

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

  • 4

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

  • 3

    您可以尝试使用sampsize = c(500,500)来 balancer 错误结果(即,在每个树中它将使用500个每个类避免不 balancer 错误的问题,您可以更改当然的数量,以及大小节点那么大它可能会使树木变得非常小(在每个树中使用一些变量) . 你不想过多地训练到训练集(即使RF模型会照顾它)但是你想要使用至少一些每棵树中的变量 .

  • 10

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

相关问题