python imblearn toolbox 解决数据不平衡问题(一)——imblearn简介

我们在处理医疗诊断等问题,会遇到不平衡数据,即病人的数据量相对于正常人的数据量要小的多。而大多数机器学习算法需要较为平衡的数据。如果不对不平衡数据处理,往往会导致模型向majority class方向偏移。在Python中,有个很好用的库imbalanced-learn——imblearn.在本博文,只借鉴论文进行关键点总结。

参考

先放参考,后文是我在阅读参考资料时整理的笔记,因此难免疏漏.
论文网址
Github
文档

实现的采样方法

  1. Under-sampling:即下采样,减少多数样本的数量;
  2. Over-sampling:即上采样,生成少数样本;
  3. Over-sampling followed by under-sampling:先上采样再下采样,防止过拟合;
  4. Ensemble classifier using samplers internally:集成学习的方法.

win10安装

pip install imblearn
  • 依赖:numpy, scipy, scikit-learn

使用方式

与sklearn相似,主要是fitfit_resample.论文中给出的一个例子为:

#基本用法
from sklearn.datasets import make_classification 
from sklearn.decomposition import PCA 
from imblearn.over_sampling import SMOTE

#Generate the dataset
x, y = make_classification(n_classes=2,weights=[0,1,0.9],
                           n_features=20,n_samples=5000)

#Apply the SMOTE over-sampling
sm = SMOTE(ratio='auto', kind='regular') #可选其它采样方式
X_resampled, y_resampled = sm.fit_resample(X,y)

samplers的调用方法

  • Way1
estimator = obj.fit(data, target) 
  • Way2
data_resampled, target_resampled = obj.fit_resample(data, targets)

可以接受的input数据格式:

data: array-like (2-D list, pandas.Dataframe or numpy.array) or sparse
matrices targets: array-like(1-D list, pandas.Serise, numpy.array)

猜你喜欢

转载自blog.csdn.net/mathlxj/article/details/89604127