仅加权班级中的阴性或阳性样本

时间:2018-11-12 01:47:32

标签: python keras deep-learning computer-vision

算法我正在尝试实现数据集中类不平衡的处理。我有40类CelebA数据集,这是一个多标签数据集,并希望动态地平衡该数据集。我正在使用keras,但无法提出正确的逻辑来解决问题。

算法

  • 类别中的正样本和负样本应该相等
  • 如果一个类别中的阳性样本实例更多,则只需从样本中选择目标样本量,然后对阴性实例进行加权,即,如果批次大小为100,并且一类中有70个阳性实例和30个阴性实例,则随机选择50从阳性实例中分配权重,将50/30 = 5/3的权重分配给阴性样本,反之亦然,如果代表实例中的值为负数,则相反

问题

  • 我正在使用Keras通过上述算法实现深度学习问题。
  • 当我使用 sample_weights 时,如何只给负数或正数实例分配权重,而不是分配所有实例。
  • 如果我尝试通过简单地复制来平衡样本,那么我会遇到某种循环悖论,即,如果我通过移除样本来平衡一类过度代表的实例,那么另一类可能会代表不足,而当我复制此新的代表不足的代表时类,上一类可能会超过代表。

请让我知道在Keras中解决上述算法最有效的方法是什么。要获得更多帮助,您可以在此处查看研究论文:https://www.cs.umd.edu/~emhand/Papers/AAAI2018_SelectiveLearning.pdf?fbclid=IwAR13MMtV4TpVSerMZqgmt_t1-8VhD-XUQYJ4qORjXz-mbMDv1W7JqgwrSN8

算法在第3页的批量平衡标题下说明。

1 个答案:

答案 0 :(得分:0)

您可以像下面这样使用类权重:

    model.fit(X_train, y_train, class_weight=class_weights)

其中class_weights是字典。例如,class_weights = {0:4,4,1:10,2:1},这意味着对于类别0的每4个样本,我们在类别1中有10个样本,在类别2中有1个样本。

在您的特定示例中,您可能只为感兴趣的正负类设置了适当的参数。