我是随机森林分类器的新手。我用它来分类有两个类的数据集。 - 功能数量为512。 - 数据的比例为1:4。即,75%的数据来自第一类,25%来自第二类。 - 我正在使用500棵树。
分类器产生的袋外误差为21.52%。 第一类的每类错误(由训练数据的75%表示)为0.0059。虽然第二类的分类错误非常高:0.965。
我正在寻找这种行为的解释,如果你有建议提高第二堂课的准确性。
我期待着你的帮助。
由于
忘了说我正在使用R而且我在上面的测试中使用了1000的nodesize。
这里我只用10棵树和nodesize = 1重复训练(只是为了给出一个想法),下面是R中的函数调用和混淆矩阵:
随机森林类型:分类
树木数量:10
没有。每次拆分时尝试的变量:22
错误率的OOB估计值:24.46%
混淆矩阵:
不相关,相关,class.error
答案 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级,因为这是最常见的类。