尽管有相似的和其他不断增加的数据可变性方法,但随机森林“作为一种算法”是否可以被认为是不平衡数据分类的好选择?
随机森林是不平衡数据分类的好选择吗?
注意:这篇文章相当古老,可能不正确。仅将其用作起点,而不是权威答案。
随机森林模型建立在决策树之上,决策树对类不平衡很敏感。每棵树都建立在一个“袋子”上,每个袋子都是来自数据的均匀随机样本(有放回)。因此,每棵树都会因类别不平衡而偏向相同的方向和幅度(平均而言)。
然而,有几种技术可以减轻分类任务中的不平衡。
其中一些是通用的,适用于各种情况。搜索unbalanced-classes
此 SE 网站上的class-imbalance
标签,以及Data Science SE 网站上的标签。
此外,随机森林至少适用于两种类权重。第一种技术是加权树分裂标准(有关其工作原理的信息,请参阅https://datascience.stackexchange.com/a/56260/1156)。另一种技术是在自举采样过程中对数据点进行过采样或欠采样。
在 Python 中,加权树分裂是在Scikit-learn类中实现的RandomForestClassifier
,作为class_weight
参数。加权引导采样在Imbalanced-learn类中实现BalancedRandomForestClassifier
。请注意,Imbalanced-learnBalancedRandomForestClassifier
也支持与class_weight
Scikit-learn 相同的参数RandomForestClassifier
。
在 R 中,这两种技术都在Ranger中实现,在 mainranger
函数中,作为class.weights
、case.weights
和sample.fraction
参数。有关使用示例,请参见https://stats.stackexchange.com/a/287849/36229 ;关于同一问题的其他答案中也有有用的信息。
显然,在类不平衡的每个极端情况下,您可能需要调整最小节点大小或其他“详细”参数以使模型完全正常工作。参见,例如https://stackoverflow.com/a/8704882/2954547。
仅当您还存在误分类成本不平衡时,不平衡类才是一个问题。如果有少数少数类,并且将它们归类为多数类并不比反之更昂贵,那么合理的做法是允许对少数类进行错误分类。
所以让我们假设你有阶级和成本不平衡。有多种方法可以解决这个问题。Max Kuhn 的书“应用预测建模”在第 16 章中有一个很好的概述。这些补救措施包括使用 0.5 以外的截止值,这反映了不平等的成本。只要您的分类器输出标签概率(树和森林这样做),这在二元分类中很容易做到。我还没有研究过多个课程。您还可以对少数类进行过采样以赋予其更大的权重。