具有样本权重的不平衡数据集 - 如何解释性能指标?

数据挖掘 机器学习 scikit-学习 支持向量机 阶级失衡 表现
2022-03-03 13:39:55

考虑一个二元分类场景,其中 True 类 (5%) 与 False 类 (95%) 严重失衡。我的数据集包含数字数据。我正在使用 SKLearn 并尝试一些不同的算法,例如梯度提升分类器 (GCB)、随机森林 (RDC) 和支持向量分类器 (SVC)。由于不平衡的方面,我在所有方法(fit、score、confusion_matrix 等)中使用“sample_weight”并使用以下权重数组填充它,其中,True 值被赋予 20 值,False 值被赋予值为 1。

sample_weight = np.array([20 if i == 1 else 1 for i in y_test])

这应该是为了“平衡”分类。首先这是一个正确的方法吗?有什么影响?用真实数据增加样本量是不可能的。过度拟合将是另一个潜在的选择,但由于类之间存在显着差异,我想从“sample_weight”方法开始。

现在考虑这些结果:

GCB - 准确率 71%,准确率 74%,召回率 69%,F1 分数 71%

RFC - 准确率 67%,准确率 82%,召回率 47%,F1 分数 60%

SiVC - 准确率 63%,准确率 74%,召回率 45%,F1 分数 56%

GCB 在准确性方面优于其他算法。RFC 精度。Recall 在 RFC 和 SVC 中都非常糟糕,并且在 3 种情况下价值最小。

我的下一个问题主要是关于召回。假阴性是相当大的——如召回所示(在 SVC 案例中,55% 的实际 True 值被预测为 False);这是因为在原始数据集中有更多的 False 值吗?

在所有这些中,样本权重在哪里出现?样本权重不应该减轻吗?或者无论权重如何,类不平衡仍然会影响分类吗?在某些情况下比其他情况下更多(例如 RFC 和 SVC 比 GCB 更多)?

1个回答

请记住,在高度不平衡的数据模型中,它不会学到任何东西,因为它只是通过将所有内容预测到多数类来最小化其目标函数。是的,您分配的样本权重值似乎是正确的。样本权重所做的是调整目标函数以考虑预测 True 类中的一个错误,相当于 Negative 类中的 20 个错误。这迫使模型学习,因为它不能仅通过预测多数类别来最小化其目标函数。这就是样本权重在不平衡类中发挥作用的方式。

样本重量不是灵丹妙药,它极大地提高了模型性能,但可能无法为您提供最佳解决方案。为了提高召回率,您应该尝试以下操作:

  1. 根据模型类通过增加深度、迭代等来创建更复杂的模型。

  2. 样本权重也可以通过可以调整的超参数

如果您为所有观察提供相同的样本权重,那么只有一个建议,您也可以使用类权重来完成。