对于R中的随机森林分类,应该如何针对不平衡的班级规模进行调整?


17

我正在为我正在研究的项目探索不同的分类方法,并且对尝试“随机森林”感兴趣。我正在努力地进行自我教育,并感谢CV社区提供的任何帮助。

我已将数据分为训练/测试集。通过在R中使用随机森林进行实验(使用randomForest包),我遇到了麻烦,因为我的小班级误分类率很高。我已经阅读了有关随机森林在不平衡数据上的性能的文章,作者提出了两种使用随机森林时处理类不平衡的方法。

1.加权随机森林

2.平衡的随机森林

R软件包不允许对类进行加权(从R帮助论坛中,我已经阅读到classwt参数无法正常运行,并计划将其作为将来的错误修复程序),因此我可以选择选项2。我可以指定随机森林每次迭代从每个类中采样的对象数。

对于为随机森林设置相等的样本大小,我感到不安,因为我好像会丢失太多有关较大类的信息,从而导致将来的数据表现不佳。对较大类别进行下采样时,分类错误率有所提高,但是我想知道在随机森林中是否还有其他方法可以处理类别不平衡的情况?


1
我也面临类似的问题。如果可以,请提供基于加权随机森林和基于度量的随机森林的脚本吗?期待您的回复

Answers:


5

如果您不喜欢这些选项,是否考虑过使用增强方法?给定适当的损失功能,增强功能会自动校正重量。如果随机森林的随机性吸引了您,那么随机梯度增强也可以建立随机森林。


大卫,您好,谢谢您的建议。在随机森林内或与之结合时,是否有可能进行提振?另外,我已经读到增强可能不适用于嘈杂的数据。我正在使用的数据包含许多“嘈杂的”变量-我当前正在运行随机森林而没有特征选择,因此对较大的类进行下采样以处理不平衡问题。我得到了令人满意的结果(在训练集中正确分类了小班的85%和大班的93%),但始终欢迎改进。
ialm 2011年

@Jonathan我不太了解在随机森林开始胜过各种增强方法之前需要多少噪声,但是我的印象是需要很多东西。中的gbm软件包R具有有效的“权重”术语,您可以通过减少“ bag.fraction”术语来以与随机森林非常相似的方式增加随机性。似乎值得尝试。
David J. Harris

@ DavidJ.Harris Boosting也遭受阶级失衡的困扰,特别是在绝对稀有的情况下,少数群体的信息很少
Antoine

2

我认为加权对象在某种程度上等同于复制它们。也许您应该尝试通过适当采样不同的类来尝试修改引导步骤。

0.5


0

您可以扩展小班课程,而不是抽样大班课程!如果大类的观察次数多于小类,那么偏见就小。我希望您能处理该超大型数据集。

您也可能会识别出处理有关大类的信息最多的观察子集,有许多可能的程序,我认为最简单的方法是基于最近邻方法-以邻域图结构为条件的观察抽样保证了样本的概率密度更类似于原来的一个。

randomForest是用Fortran和c语言编写的,可以使用源代码(http://cran.r-project.org/src/contrib/randomForest_4.6-2.tar.gz),但我无法确定计算出人类行为的地方, ps。ups that randomforest使用基尼代替人类


在较大的类别中标识观察子集似乎是一个有趣的想法。该项目的第二部分实际上是将较大的类别分为较小的,有用的子组,这些子组可能对将来的研究有用。至于代码中的熵计算,我实际上并没有深入研究代码,只是研究了rf背后的一些理论,因此我无法对此发表评论。
ialm 2011年

我很早以前就想修改该代码,但是没有足够的时间来增加权重在概念上是困难的。
Qbik 2011年

R中的随机森林可以用作回归工具,也许对无监督分类也很有用。我很久以前就想修改randomForest的代码,但由于时间有限,因此增加权重在概念上是困难的。不久前,我自己想知道如何使用随机森林进行无监督的集群化,但我有一个主意,但尚未进行测试,但不幸的是,它似乎在计算上要求很高-numerofobservations ^ 2。
Qbik 2011年

0

(1)您是对的,加权功能不起作用,并且不确定是否已修复。

(2)最常用的选项2具有平衡的数据。不丢失太多数据的关键是分层采样。您为每棵树随机采样一个唯一的平衡集。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.