python - 进行类别不平衡正则化的正确位置(数据级别或批处理级别)

标签 python machine-learning pytorch

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

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

我的问题是: 要计算一般类(class)体重剂量,更有意义的是在开始时计算 1 次(对于阳性病例为 1/(10000/(100000)),并用该值缩放每个样本的损失

或者:

通过首先找到批处理类别不平衡来计算批处理级别的权重(例如,在批处理中可能有 25 个正例和 75 个负例,因此对于正例为 1/(25/(25+75))

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

最佳答案

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

另一方面,您应该确保每个批处理保留标签统计信息(例如,对于批处理 64 和您的案例,您应该有 6 个正样本,其余的样本消极的)。这样,计算一次类不平衡并将其添加到torch.nn.BCELoss就足够了。以每批处理为基础。

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

关于python - 进行类别不平衡正则化的正确位置(数据级别或批处理级别),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58233328/

相关文章:

python - 使用维度切片读取单个 NetCDF 文件的子集

python - 获取已排序的 numpy 矩阵或 pandas 数据帧的最后一个非 nan 索引

r - 如何将RFE选定的变量插入到r中的机器学习模型中?

pytorch - 如何将 Pytorch DataLoader 用于具有多个标签的数据集

python - 将键值对添加到嵌套字典

python - 使用 python mechanize 自动登录

python - 值错误 : Shape must be rank 2 but is rank 3 for 'MatMul'

machine-learning - 谷歌Colab : Can we restore all the data even after the runtime disconnects?

python - 如何在 Pytorch 中可视化网络?

algorithm - 直观理解 Adam 优化器