给定不平衡的数据集,如何平衡 Keras 中 CNN 的类别权重?

数据挖掘 scikit-学习 美国有线电视新闻网 阶级失衡
2021-10-05 12:47:55

我想使用类权重来训练具有不平衡数据集的 CNN。如果所有示例的权重总和必须保持不变,就会出现问题?

我之前的计划是使用 scikit-learn 中的 function compute_class_weight('balanced, np.unique(y_train),y_train)function 。

但我完全不确定这是否适合 CNN 的类权重?

预先感谢您的每个提示

1个回答

如果实验的“成本”不是那么大,我建议你花时间去实验,把它当作一个学习机会,如果它真的能奏效就试试。

解决类不平衡的方法有很多,设置类权重是其中之一,也是最容易实现的。

  • 改变损失函数(例如极端不平衡的二元分类的焦点损失)
  • 过采样和欠采样
  • 设置班级权重
  • 使用构建的特定算法来解决此问题,例如连体网络,当您只说感兴趣对象的训练样本很少时,它非常有用。
  • 等等。

特别针对您的情况,我可以根据我的经验告诉您它可能会失败的具体情况。所以基本上,当你有极端的阶级不平衡比如 1% 正面和 99% 负面时,这很可能会失败。这可能会失败的原因仅仅是因为在这种情况下使用类权重会对正样本赋予非常高的价值,如果您的模型未能检测到这一点,则惩罚非常高,因此会导致训练不稳定。最重要的是,考虑一个假设情况,您的模型在第 10 轮正确预测正类,然后在第 11 轮失败。对于这种情况,您可能会在第 10 轮损失例如 1.3,但在第 11 轮,您的损失可能会达到说像 37.7 只是因为它无法检测到所述样本。这也可能影响利用此损失的任何回调。

总而言之,如果情况可能像我描述的那样,那么不要使用它,否则只是玩弄一下,找出最适合你的东西。