21

我正在用 python 中的 sklearn 逻辑回归解决分类问题。

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

我知道有很多方法可以处理这样的不平衡问题,但还没有找到一个很好的解释来说明如何使用 sklearn 包正确实现。

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

执行此操作的具体步骤是什么?我翻遍了 sklearn 文档和示例,但没有找到好的解释。

4

2 回答 2

22

您是否尝试过传递给您的class_weight="auto"分类器?并非 sklearn 中的所有分类器都支持这一点,但有些支持。检查文档字符串。

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

于 2013-02-13T22:34:53.260 回答
6

@agentscully 你读过下面的论文吗?

[SMOTE](https://www.jair.org/media/953/live-953-2037-jair.pdf)。我发现同样非常有用。这是回购的链接。根据您平衡目标类的方式,您可以使用

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

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

于 2016-06-15T02:26:06.043 回答