处理高度不平衡数据的正确方法-二进制分类

时间:2019-12-19 12:37:16

标签: python pandas machine-learning neural-network data-science

我有一个非常大的数据集,具有6000万行和11个功能。 它是高度不平衡的数据集,比例为20:1(信号:背景)。 如我所见,有两种方法可以解决此问题:

首先:欠采样/过采样。
这样我有两个问题。 如果在火车测试拆分之前进行欠采样,则将丢失很多数据。 但更重要的是,如果我在平衡的数据集上训练模型,则会丢失有关信号数据频率的信息(比方说,良性肿瘤的发生率高于恶性肿瘤的频率),并且由于对模型进行了训练和评估,因此模型将表现良好。但是,如果将来某个时候我要在新数据上尝试我的模型,由于实际数据不平衡,它将导致性能下降。

如果我在火车测试拆分后进行了欠采样,则我的模型将不适合,因为它将在平衡数据上进行训练,但在不平衡上进行验证/测试。

第二-班级体重减轻 我可以对XBG,随机森林,逻辑回归使用类权重惩罚吗?

因此,每个人都在寻找一种解释和想法,以解决这种问题。
预先谢谢您,我将不胜感激。

3 个答案:

答案 0 :(得分:1)

我建议Breiman(《随机森林》的作者)撰写的这篇简短论文: Using Random Forest to Learn Imbalanced Data

建议的方法是加权RF,其中您可以使用加权Gini(或熵,我认为加权时更好)来计算拆分,以及平衡随机森林,您可以在引导过程中尝试平衡类。
这两种方法也可以用于增强树!

答案 1 :(得分:1)

建议的方法之一可能是使用综合少数族裔过采样技术(SMOTE),该技术试图通过创建综合实例来平衡数据集。并使用任何分类算法训练平衡数据集。

要比较多个模型,可以使用 ROC曲线下的面积(AUC分数)确定哪个模型更好。

guide可以为您提供一些有关可用于比较和解决不平衡问题的不同方法的想法。

答案 2 :(得分:0)

在处理医疗数据集和其他类型的故障检测中,其中一种(不良影响)的代表性始终不足时,上述问题非常普遍。

解决此问题的最佳方法是生成折叠并应用交叉验证。折叠应以平衡每个折叠中的类的方式生成。在您的情况下,这将产生20折,每个折痕均具有相同的代表性不足类别,而具有不同的代表性不足类别。

Generating balanced folds

生成平衡折痕并使用交叉验证还可以产生更好的泛化和鲁棒模型。在您的情况下,20折可能看起来很苛刻,因此您可以以10:2的比率创建10折。