我有一个高度偏见的二进制数据集——我的负类示例比正类多 1000 倍。我想在这些数据上训练一个树集合(比如额外的随机树或随机森林),但是很难创建包含足够多的正类示例的训练数据集。
采用分层抽样方法对正例和负例的数量进行标准化会有什么影响?换句话说,例如,人为地增加(通过重新采样)训练集中正类示例的数量是不是一个坏主意?
我有一个高度偏见的二进制数据集——我的负类示例比正类多 1000 倍。我想在这些数据上训练一个树集合(比如额外的随机树或随机森林),但是很难创建包含足够多的正类示例的训练数据集。
采用分层抽样方法对正例和负例的数量进行标准化会有什么影响?换句话说,例如,人为地增加(通过重新采样)训练集中正类示例的数量是不是一个坏主意?
是的,这是有问题的。如果你对少数人进行过采样,你就有过拟合的风险。如果您对大多数人的抽样不足,您可能会丢失多数人类别的某些方面。顺便说一句,分层抽样相当于分配非均匀错误分类成本。
备择方案:
(1)独立地从多数类中抽取几个子集,并通过将每个子集与所有少数类数据组合来制作多个分类器,如@Debasis 的答案中所建议并在此EasyEnsemble 论文中描述,
(2) SMOTE(Synthetic Minority Oversampling Technique)或SMOTEBoost,(将 SMOTE 与 boosting 相结合)通过在特征空间中创建最近邻来创建少数类的合成实例。SMOTE在 R 中的 DMwR 包中实现。
我建议对更平衡的数据子集进行培训。在具有相似数量的负样本的随机选择的正样本集上训练随机森林。特别是如果判别特征表现出很大的差异,这将是相当有效的,并且可以避免过度拟合。然而,在分层中找到平衡很重要,因为无论如何过度拟合都会成为一个问题。我建议查看模型如何处理整个数据集,然后逐渐增加正样本与负样本的比率接近偶数比率,并选择在某些代表性的保留数据上最大化您的性能指标的那个。
这篇论文似乎相当相关http://statistics.berkeley.edu/sites/default/files/tech-reports/666.pdf它谈到了一个weighted Random Forest
更严重地惩罚少数类错误分类的问题。
解决这种不平衡的一种快速、简单且通常有效的方法是对较大的类(在您的情况下是负类)进行随机子采样,使用两个类的成员(一个完整的,另一个次采样)并报告平均度量值,平均值是在 N(例如 1000)次迭代中计算的。
更有条理的方法是执行映射收敛 (MC) 算法,该算法涉及在 OSVM 或 SVDD 等一类分类器的帮助下识别强负样本的子集,然后在集合上迭代地执行二进制分类强负样本和正样本。更多关于 MC 算法的细节可以在这篇论文中找到。
如上所述,最好的方法是对多数类重复采样 N 次(无放回采样),并且每次负类的大小应等于正类的大小。现在,可以训练 N 个不同的分类器,并且可以使用平均值对其进行评估。
另一种方法是使用自举技术。这可能会引入过拟合,但值得尝试,然后如果需要可以对模型进行正则化以避免过拟合。