scikit-learn中的不平衡问题
我在我的Python程序中使用scikit-learn来进行一些机器学习的操作。问题是我的数据集存在严重的不平衡问题。
有没有人知道在scikit-learn或者Python中解决数据不平衡的方法?在Java中有一个叫SMOTE的机制。Python中有没有类似的东西?
5 个回答
14
我在这里发现了另一个库,它可以实现欠采样和多种过采样技术,包括多种 SMOTE
的实现,还有一个是使用 SVM
的:
38
在Scikit Learn中,有一些处理数据不平衡的技巧,这些技巧会根据你使用的学习算法有所不同。
其中一些算法,比如支持向量机(SVM)和逻辑回归,都有一个叫做class_weight
的参数。如果你用这个参数设置为'balanced'
来创建一个SVC
,那么它会根据每个类别出现的频率来给每个类别的样本加权,也就是说,出现频率低的类别会被赋予更高的权重。
不过,遗憾的是,目前没有一个预处理工具专门用于这个目的。
99
这里有一个新的资源
https://github.com/scikit-learn-contrib/imbalanced-learn
里面包含了很多算法,主要分为以下几类,包括SMOTE:
- 对大多数类别进行下采样。
- 对少数类别进行上采样。
- 结合上采样和下采样。
- 创建平衡的集合。