我是随机森林分类器的新手 . 我用它来分类有两个类的数据集 . - 功能数量为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级,因为这是最常见的类 .
我同意@usr一般来说,当你看到一个随机森林只是将每个观察分类(几乎)作为多数类时,这意味着你的特征没有提供太多信息来区分这两个类 .
一种选择是运行随机森林,以便从少数类中过度采样观察(而不是从整个数据集中替换采样) . 因此,您可以指定每个树都 Build 在大小为N的样本上,您可以强制N / 2个观察来自每个类(或您选择的其他比例) .
虽然这可能对某些人有所帮助,但它绝不是万灵药 . 你可能更有可能获得更多的里程数来找到更好的功能,这些功能可以很好地区分类,而不是调整RF设置 .
我很惊讶没人提到使用'classwt'参数 . 加权随机森林(WRF)专门用于解决此类问题 .
看这里:Stack Exchange question #1
在这里:Stack Exchange question #2
关于加权随机森林的文章:PDF
嗯,这是典型的阶级不 balancer 问题 . 随机森林是一种旨在最大化模型准确性的分类器 . 当一个类占据大部分数据时,分类器实现准确性的最简单方法是将所有观察分类到多数类中 . 在你的情况下,这给出了非常高的准确度0.75,但是一个糟糕的模型 - 几乎没有针对少数类的正确分类 . 有很多方法可以解决这个问题 . 更简单的方法是使用大多数类的欠采样来 balancer 数据,然后使用这种 balancer 数据训练模型 . 希望这可以帮到你 .
您可以尝试使用sampsize = c(500,500)来 balancer 错误结果(即,在每个树中它将使用500个每个类避免不 balancer 错误的问题,您可以更改当然的数量,以及大小节点那么大它可能会使树木变得非常小(在每个树中使用一些变量) . 你不想过多地训练到训练集(即使RF模型会照顾它)但是你想要使用至少一些每棵树中的变量 .
如果您将显示导致这种错误分类的代码,那么它将非常有用 . 现在我看到了一个对这种糟糕表现的反应 -
nodesize = 1000
是一个太大的 Value . 您的数据集中观察了多少次?尝试使用nodesize
的默认值或将其设置为更小的值 .