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

机器算法验证 r 机器学习 随机森林
2022-02-11 23:50:46

我正在为我正在从事的项目探索不同的分类方法,并且有兴趣尝试随机森林。我正在努力自我教育,并感谢 CV 社区提供的任何帮助。

我已将数据拆分为训练/测试集。通过在 R 中对随机森林进行实验(使用 randomForest 包),我一直在为我的小班解决高误分类率问题。我读过这篇关于随机森林在不平衡数据上的性能的论文,作者提出了两种在使用随机森林时处理类不平衡的方法。

1.加权随机森林

2. 平衡随机森林

R 包不允许对类进行加权(从 R 帮助论坛中,我已阅读 classwt 参数未正常执行并计划作为未来的错误修复),所以我只剩下选项 2。我可以指定对于随机森林的每次迭代,从每个类中采样的对象数。

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

4个回答

如果您不喜欢这些选项,您是否考虑过使用增强方法?给定一个适当的损失函数,boosting 会自动重新校准权重。如果随机森林的随机性对您有吸引力,那么随机梯度提升也可以构建它。

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

另一个想法是,类别不平衡可能会将您的决策阈值转移到 0.5 美元以外的另一个值(如果它是二元分类问题)。尝试考虑 ROC 曲线和 AUC 来评估不平衡对模型性能的影响程度。0.5 (if it's a binary classification problem). Try considering ROC curves and AUC to evaluate how bad the imbalance is causing poor performances on your models.

合成少数过采样 (SMOTE) 生成少数类的新观察值作为相邻观察值的随机凸组合。论文在这里:https ://bmcbioinformatics.biomedcentral.com/articles/10.1186/1471-2105-14-106

您可以扩展小班,而不是抽样大班!如果大类的观察比小类多很多倍,那么偏差就会很小。我确实希望你能处理那个超大的数据集。

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

randomForest 是用 Fortran 和 c 编写的,源代码可用 (http://cran.r-project.org/src/contrib/randomForest_4.6-2.tar.gz) 但我无法找到计算熵的地方,附言。随机森林使用 Gini 而不是熵的 ups