sklearn逻辑回归与不平衡的类

age*_*lly 21 python classification scikit-learn

我在python中用sklearn的逻辑回归解决了一个分类问题.

我的问题是一般/通用问题.我有一个包含两个类/结果(正/负或1/0)的数据集,但该集非常不平衡.有约5%的阳性和~95%的阴性.

我知道有很多方法可以解决像这样的不平衡问题,但是没有找到如何使用sklearn软件包正确实现的良好解释.

到目前为止,我所做的是通过选择具有正结果和相同数量的随机选择的否定条目的条目来建立平衡训练集.然后我可以将模型训练到这个集合,但我仍然坚持如何修改模型,然后处理原始的不平衡人口/集合.

这样做的具体步骤是什么?我已经倾倒了sklearn文档和示例,并没有找到一个很好的解释.

ogr*_*sel 20

你试过传递给你的class_weight="auto"分类器吗?并非sklearn中的所有分类器都支持此功能,但有些分类器可以支持.检查文档字符串.

您还可以通过随机删除负示例和/或过度采样正例(+可能添加一些轻微的高斯特征噪声)来重新平衡数据集.

  • 它不是那个黑盒子:它只是通过算法优化的经验目标函数中的样本重新加权.欠抽样的过度代表类很好,因为训练更快:)但是你丢弃的数据很糟糕,特别是如果你的模型已经处于过度拟合状态(火车和测试分数之间存在显着差距).过采样通常在数学上等同于重新加权,但由于重复操作而较慢. (8认同)

Pra*_*mit 5

@agentscully 你读过下面的论文,

[SMOTE] ( https://www.jair.org/media/953/live-953-2037-jair.pdf )。我发现同样的信息非常丰富。这是Repo的链接。根据您如何平衡目标类,您可以使用

  • 'auto' :(在较新版本 0.17 中已弃用)或 'balanced' 或自己指定类比 {0: 0.1, 1: 0.9}。
  • 'balanced' : 这种模式调整权重与类频率成反比n_samples / (n_classes * np.bincount(y)

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