我有一个多标签分类问题,我试图用 Pytorch 中的 CNN 解决这个问题。我有 80,000 个训练示例和 7900 个课程;每个示例可以同时属于多个类,每个示例的平均类数为 130。
问题是我的数据集非常不平衡。对于某些课程,我只有大约 900 个示例,大约 1%。对于“过度代表”的课程,我有大约 12000 个示例(15%)。当我训练模型时,我使用来自pytorch 的BCEWithLogitsLoss和正权重参数。我计算权重的方式与文档中描述的相同:负例数除以正例数。
结果,我的模型几乎高估了每一个类……无论是小类还是大类,我得到的预测几乎是真实标签的两倍。而我的 AUPRC 只有 0.18。尽管它比完全没有加权要好得多,因为在这种情况下,模型将所有内容都预测为零。
所以我的问题是,如何提高性能?还有什么我可以做的吗?我尝试了不同的批量采样技术(对少数类进行过采样),但它们似乎不起作用。