我在多类分类问题上同时应用了 class_weight 和过采样 (SMOTE) 技术,并在使用 class_weight 技术时获得了更好的结果。有人可以解释造成这种差异的原因吗?
为什么类权重优于过采样?
数据挖掘
多类分类
阶级失衡
打击
2021-10-03 00:18:10
2个回答
您不应期望 class_weight 参数和 SMOTE 给出完全相同的结果,因为它们是不同的方法。
类权重通过对具有更多(或更少)权重的类给予更多(或更少)惩罚来直接修改损失函数。实际上,通过故意使模型偏向于对较高权重类(少数类)进行更准确的预测,基本上牺牲了一些预测较低权重类(不平衡数据集的多数类)的能力。
过采样和欠采样方法本质上也为特定类别赋予了更多权重(重复观察会重复对这些特定观察的惩罚,从而在模型拟合中给予它们更大的影响),但由于通常在训练中发生数据拆分,这将产生略微不同结果也一样。
SMOTE 通过从一组“相似”少数类观察中随机抽样来创建少数类的新观察。综合观察是基于为每个坐标(即列)添加两个随机选择的“相似”观察之间的差异的随机百分比来计算的。类似的观察通常使用与少数类的特定观察最近的 k 个最接近的邻居来定义。这意味着,取决于所选 k 的值,以及许多其他因素,例如您的观察结果的相似程度、距离度量等。SMOTE 可能对您的特定问题有用,也可能没有用。
处理类不平衡的方法并不都一样,是一个很大的研究领域。看来您已经注意到类权重方法更有效,这就是为什么在解决任何潜在的类不平衡问题时选择的任何类型的方法都需要包含在模型验证方案中以查看特定方法(或者实际上,使用任何方法)产生任何好处。
可能不是您正在寻找的答案,但不要发疯!不同的类权重策略给出不同的结果。
下面的内容让我几乎发疯了!以下应该给出相同的结果,但事实并非如此。
class_weight = "平衡"
class_weight={0:0.85, 1:0.15}
我学会了忍受它......
其它你可能感兴趣的问题