针对不平衡数据训练决策树

机器算法验证 分类 大车 不平衡类 准确性
2022-01-23 06:06:59

我是数据挖掘的新手,我正在尝试针对高度不平衡的数据集训练决策树。但是,我遇到了预测准确性差的问题。

数据由学习课程的学生组成,类变量是课程状态,具有两个值 - 已退出或当前。

  • 年龄
  • 种族
  • 性别
  • 课程
    ...
  • 课程状态

在数据集中,当前的实例多于撤回的实例。撤回的实例仅占总实例的 2%。

我希望能够建立一个模型来预测一个人将来退出的概率。然而,当针对训练数据测试模型时,模型的准确性很糟糕。

我在决策树上遇到过类似的问题,其中数据由一两个类控制。

我可以使用什么方法来解决这个问题并构建更准确的分类器?

4个回答

这是分类中一个有趣且非常常见的问题——不仅在决策树中,而且在几乎所有分类算法中。

正如您根据经验发现的那样,由来自任一类的不同数量的代表组成的训练集可能会导致分类器偏向于多数类。当应用于类似不平衡的测试集时,该分类器会产生乐观的准确度估计。在极端情况下,分类器可能会将每个测试用例分配给多数类,从而达到与属于多数类的测试用例的比例相等的准确度。这是二元分类中众所周知的现象(它自然地扩展到多类设置)。

这是一个重要的问题,因为不平衡的数据集可能会导致性能估计膨胀。反过来,这可能会导致关于算法表现优于偶然性的重要性的错误结论。

关于这个主题的机器学习文献基本上已经开发了三种解决方案策略。

  1. 您可以通过对大类进行欠采样或对小类进行过采样来恢复训练集的平衡,以防止出现偏差。

  2. 或者,您可以修改错误分类的成本,如之前的回复中所述,再次防止偏差。

  3. 另一个保障是用所谓的平衡精度代替精度它被定义为类特定精度的算术平均值,其中分别表示在正例和负例上获得的准确度。如果分类器在任一类上的表现都一样好,则该术语会降低到常规准确度(即,正确预测的数量除以预测的总数)。相反,如果因为分类器利用了不平衡的测试集,传统的准确度高于偶然性,那么平衡的准确度将酌情下降到偶然性(见下图)。ϕ:=12(π++π),π+π

精度与平衡精度

我建议至少结合考虑上述两种方法。例如,您可以对少数类进行过采样,以防止您的分类器偏向多数类。在此之后,在评估分类器的性能时,您可以用平衡的准确度代替准确度。这两种方法是互补的。当一起应用时,它们应该可以帮助您防止最初的问题并避免由此得出的错误结论。

如果您想对此进行跟进,我很乐意发布一些额外的文献参考。

以下四个想法可能会帮助您解决这个问题。

  1. 选择适当的性能度量,然后微调模型的超参数——例如正则化——以在交叉验证数据集上获得令人满意的结果,一旦满足,就在测试数据集上测试你的模型。出于这些目的,将 15% 的数据用于交叉验证,15% 用于最终测试。Andrews Ng 提倡的机器学习中的一个既定度量是定义为的 F1 统计量。尝试在交叉验证数据集上最大化这个数字,并确保在测试数据集上的性能也是稳定的。2PrecisionRecallPrecision+Recall

  2. 使用决策树中的“prior”参数通知算法数据集中类的先验频率,即在 1,000,0000 个数据集集中prior = c(0.001, 0.999)(在 R 中)是否有 1,000 个阳性。

  3. 在您使用的分类函数中使用“权重”参数来严厉惩罚算法对罕见的正例的错误分类

  4. 在某些分类算法中使用“成本”参数(例如rpart在 R 中)来定义真阳性和真阴性错误分类的相对成本。你自然应该为稀有类的错误分类设置高成本。

我不赞成过采样,因为它在数据集中引入了依赖观察,这违反了统计和机器学习中的独立性假设。

添加到@Kay 的答案第一个解决方案策略:根据我的经验,Synthetic Minority Oversampling ( SMOTE ) 通常比过采样或过采样更好,因为我认为这会在两者之间产生折衷。它使用绘制在多元预测器空间上的数据点创建少数类的合成样本,它或多或少地在该空间上的相邻点之间取中点来创建新的合成点,从而平衡两个类的大小。(不确定中点,这里的算法细节

我在最近的话题中给出了答案

我们所做的是选择不同比例的样本。在上述示例中,这将是 1000 个“是”案例,例如,9000 个“否”案例。这种方法提供了更稳定的模型。但是,它必须在真实样本(具有 1,000,000 行)上进行测试。

不仅提供了更稳定的方法,而且模型通常更好,就提升措施而言。

您可以将其搜索为“统计中的过采样”,第一个结果还不错: http: //www.statssa.gov.za/isi2009/ScientificProgramme/IPMS/1621.pdf