【问题标题】:Right place to do class imbalance regularisation (data level or batch level)进行类不平衡正则化的正确位置(数据级别或批处理级别)
【发布时间】:2020-02-02 14:39:41
【问题描述】:

我有两个二进制不平衡数据集,其中标签是 ether 0 或 1,预测输出介于 0 和 1 之间。正例有 10000 个样本,而负例有 90000 个样本。我在训练时使用了一批 100 个。

在计算 BinaryCrossEntropyLoss(在 pytorch 中)时,可以提供每批元素的正则化权重。

我的问题是: 要计算一般类的重量剂量,在开始时计算 1 次更有意义(因此 1/(10000/(100000) 用于阳性情况)并用这个值衡量每个样本的损失

或:

在批次级别计算权重,首先找到批次类别的不平衡(例如,在批次中可能是 25 个正数和 75 个负数,因此正数为 1/(25/(25+75))

我问这个是因为损失是整个批次的平均值

【问题讨论】:

    标签: python machine-learning pytorch


    【解决方案1】:

    如果您希望这样做,您应该计算每批类别的不平衡。

    另一方面,您可能应该确保每个批次都保留标签统计信息(例如,对于批次 64 和您的情况,您应该有 6 正样本,其余样本为负样本)。这样,只需计算一次类不平衡并将其添加到 torch.nn.BCELoss 就可以了。

    我会建议另一种方法,例如使用 PyTorch 的 Sampler 类进行过采样或欠采样(不要通过复制示例来实现,这会完全不必要地浪费空间)。您可以手动实现它或使用为您完成它的第三方库,例如torchdata(披露:我是作者)和torchdata.samplers.RandomOverSampler。

    【讨论】:

      猜你喜欢
      • 2018-07-21
      • 2020-04-12
      • 1970-01-01
      • 1970-01-01
      • 2020-08-29
      • 2019-09-12
      • 1970-01-01
      • 2013-07-29
      • 2015-10-21
      相关资源
      最近更新 更多