使用 XG 提升处理不平衡数据集

数据挖掘 xgboost
2021-09-30 13:15:53

假设您要建模(预测)一种罕见疾病,并且您使用参数“pos scale weight”作为 XG boost 中的超参数。例如,我有 20 倍以上的阳性病例,然后我可以使用 pos scale weight = 0.05,即使例如现实世界中的比率不是 1/20 而是 1/2000?

1个回答

这是一个棘手的问题,因为它取决于您的目标。

如果您的目标是在两个类别上具有可比的性能(即可比的敏感性和特异性),并且您的训练数据的不平衡是120,那么是的,赋予少数类示例的权重是多数类示例的 20 倍是有意义的。

然而,在大多数应用中,这并不是目标。您应该使用错误分类的实际成本或其估计值。理想情况下,您应该量化假阴性和假阳性的成本(尽管这说起来容易做起来难,尤其是在将疾病成本与医疗专业人员浪费时间的成本进行比较时)。

然后,如果您的训练集具有与真实数据相同的类先验(类出现的频率),您将直接使用这些成本作为正类和负类的权重。

在您的情况下,它更复杂,因为您的训练数据中的先验与实际数据中的先验不同。您不能将错误分类成本直接用作权重,您必须针对实际分布进行调整。

使用具有120不平衡而不是12000,你实际上已经给负类赋予了比它自然拥有的权重大约 100 倍的权重。就好像那里已经隐藏了一个重量。为了将错误分类成本用作权重,您必须取消该因素。

认为CFp是误报的成本(错误分类负例)和CFn是假阴性的成本(错误分类一个正例)。如果阳性数据率是1/20=0.05在训练数据和1/2000=0.0005在您的域的实际分布中,您将使用:

12000120CFp=CFp100
作为负类错误的权重和
199920001920CFn1.052CFn

作为正类错误的权重。