Python处理不平衡数据
所谓的不平衡数据集指的是数据集各个类别的样本量极不均衡。以⼆分类问题为例,假设正类的样本数量远⼤于负类的样本数量,通常情况下通常情况下把多数类样本的⽐例接近100:1这种情况下的数据称为不平衡数据。不平衡数据的学习即需要在分布不均匀的数据集中学习到有⽤的信息。
本⽂主要介绍从数据⾓度出发的不平衡数据集的处理⽅法以及对应的python库(imblearn)。
1.过采样
从少数类的样本中进⾏随机采样来增加新的样本,对应Python库中函数为RandomOverSampler:
from imblearn.over_sampling import RandomOverSampler
ROS = RandomOverSampler(random_state=0)
X_resampled, y_resampled = ROS.fit_sample(X, y)
2.⽋采样
与过采样相反,⽋采样是从多数类样本中随机选择少量样本,再合并原有少数类样本作为新的训练数据
集。
随机⽋采样有两种类型分别为有放回和⽆放回两种,⽆放回⽋采样在对多数类某样本被采样后不会再被重复采样,有放回采样则有可能。
对应Python库中函数为RandomUnderSampler,通过设置RandomUnderSampler中的replacement=True参数, 可以实现⾃助法(boostrap)抽样。
from imblearn.under_sampling import RandomUnderSampler
random pythonRUS = RandomUnderSampler(random_state=0)
X_resampled, y_resampled = RUS.fit_sample(X, y)
3.SMOTE采样
SMOTE算法的基本思想是对少数类样本进⾏分析并根据少数类样本⼈⼯合成新样本添加到数据集中,具体下图所⽰,算法流程如下:
1、对于少数类中每⼀个样本x,计算该点与少数类中其他样本点的距离,得到最近的k个近邻(即对少数类点进⾏KNN算法)。
2、根据样本不平衡⽐例设置⼀个采样⽐例以确定采样倍率,对于每⼀个少数类样本x,从其k近邻中随机选择若⼲个样本,假设选择的近邻为x'。
3、对于每⼀个随机选出的近邻x',分别与原样本按照如下的公式构建新的样本:
x new=x+rand(0,1) ∗ (x′−x)
但是SMOTE算法缺点也⼗分明显:⼀⽅⾯是增加了类之间重叠的可能性(由于对每个少数类样本都⽣成新样本,因此容易发⽣⽣成样本重叠(Overlapping)的问题),
另⼀⽅⾯是⽣成⼀些没有提供有益信息的样本
对应Python库中函数为SMOTE:
from imblearn.over_sampling import SMOTE
X_resampled_smote, y_resampled_smote = SMOTE().fit_sample(X, y)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论