原标题:Python中试验非平衡数据采样SMOTE算法
点击图片,查看Python爬虫教学大纲
在大数据分类问题中,许多情况下我们能获得样本数量很有限,特别是在异常检测、欺诈检测等实际问题中,异常类的样本相比于正常类要少得多,从而产生了典型的非平衡数据分类问题。
非平衡问题研究得相对比较早,目前的方法总的看来可以在数据层面、分类器层面进行分类效果的改善。基于数据的基本思路是对数据重新平衡,减小类别倾斜带来的影响。
经典的做法是 SMOTE算法,它对小类中的样本进行复制、创造以增加该类中的样本数,或者对多数类进行抽样,使之与少数类样本平衡。这两种思路分别对应于过采样、欠采样。
SMOTE算法的实现并不难,在Python中有现成的包 imblearn可以使用。但是该算法的变体很多,改进的思路也很多。有必要了解Python包所能支持的采样。
安装imblearn
pip install imblearn
使用:import
# 欠抽样处理库RandomUnderSampler
from imblearn.under_sampling import RandomUnderSampler
# 过抽样处理库RandomOverSampler
from imblearn.over_sampling import RandomOverSampler
from imblearn.over_sampling import SVMSMOTE
#数据集生成器
from sklearn.datasets import make_classification
#生成非平衡的样本数据,为方便展示,x是二维空间的样本,y是类别标签。
from sklearn.datasets import make_classification
x, y = make_classification(n_samples=100, n_features=2, n_informative=2,
n_redundant=0, n_repeated=0, n_classes=2,
n_clusters_per_class=1,
weights=[0.3, 0.7],
class_sep=0.8, random_state=0)
生成30个少数类、70个多数类样本。
过采样
print('过采样')
ros = RandomOverSampler(random_state=42)
nx, ny= ros.fit_sample(x, y)
结果发现该函数进行了重复采样,即简单随机复制现有的少数类样本,不太能满足实际分类器训练的要求。
ros = SVMSMOTE(random_state=42)
nx, ny= ros.fit_sample(x, y)
这个函数能生成新的少数类样本。
欠采样
print('欠采样')
rus = RandomUnderSampler(random_state=0)
nx, ny= rus.fit_sample(x, y)
此为欠采样,即减少多数类的样本数,使之和少数类数量相同。
关于其他采样方法可以查阅imblearn的文档。
提供300分钟视频讲解,教学大纲、课件、教案、习题答案、程序源码等配套资源。
扫码,优惠购书
凡是在京东购书的用户,可以将订单信息和评价发到itbook8@163.com,将会获取超值大礼包(包括案例源码,超多的视频教程,数据集等资源)
“ 在看”的永远18岁~ 返回搜狐,查看更多
责任编辑: