sklearn不平衡类别的逻辑回归

23 投票
2 回答
21936 浏览
提问于 2025-04-17 15:48

我正在用Python的sklearn库解决一个分类问题,使用的是逻辑回归。

我的问题比较普遍。我有一个数据集,里面有两个类别(正类/负类,或者说1和0),但是这个数据集非常不平衡。正类大约占5%,负类大约占95%。

我知道有很多方法可以处理这种不平衡的问题,但我还没找到一个好的解释,教我怎么用sklearn这个包来正确实现。

到目前为止,我做的事情是构建一个平衡的训练集,方法是选择一些正类的样本,然后随机选择相同数量的负类样本。这样我就可以用这个平衡的训练集来训练模型,但我不知道怎么调整模型,让它能在原来的不平衡数据集上工作。

具体应该怎么做呢?我查阅了sklearn的文档和示例,但还是没有找到好的解释。

2 个回答

10

@agentscully 你有没有看过这篇论文,

[SMOTE] (https://www.jair.org/media/953/live-953-2037-jair.pdf)。 我觉得这篇论文非常有用。这里是这个代码库的链接。

根据你平衡目标类别的方式,你可以选择:

  • 'auto':(在新版本0.17中已不推荐使用)或者选择'balance',或者自己指定类别比例,比如 {0: 0.1, 1: 0.9}。
  • 'balanced':这个模式会根据类别的出现频率来调整权重,计算方式是 n_samples / (n_classes * np.bincount(y)

如果需要更多的解释,请告诉我。

23

你有没有试过给你的 class_weight="auto" 分类器传递这个参数?并不是所有的 sklearn 分类器都支持这个功能,但有些是可以的。你可以查看一下文档说明。

另外,你还可以通过随机删除一些负样本,或者增加一些正样本来重新平衡你的数据集(也可以考虑加一点轻微的高斯噪声)。

撰写回答