只对类中的阴性或阳性样本进行加权

2024-09-30 08:21:45 发布

您现在位置:Python中文网/ 问答频道 /正文

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

算法

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

问题

  • 我正在使用Keras来实现一个深度学习问题与上述算法。我怎样才能像使用sample\u weights那样,只为负实例或正实例分配权重,而不是所有实例。在
  • 如果我试图通过简单的复制来平衡样本,那么我会遇到某种循环悖论,也就是说,如果我通过移除样本来平衡一类过度表示的实例,那么另一类可能会被低估,而当我复制这个新的低表示类时,前一个类可能会被过度表示。在

请让我知道什么是最有效的方法来解决所提到的算法在Keras。如需进一步帮助,请查看以下研究论文:https://www.cs.umd.edu/~emhand/Papers/AAAI2018_SelectiveLearning.pdf?fbclid=IwAR13MMtV4TpVSerMZqgmt_t1-8VhD-XUQYJ4qORjXz-mbMDv1W7JqgwrSN8

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


Tags: 数据实例算法标签逻辑阳性keras权重
1条回答
网友
1楼 · 发布于 2024-09-30 08:21:45

可以使用类权重,例如:

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

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

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

相关问题 更多 >

    热门问题