数据预处理

一、样本不均衡

下述方法仅适用于训练数据,不能更改测试数据的分布情况

1.随机过采样

将数量少的类别复制一直到所有类别数量一致

import pandas as pd
from imblearn.over_sampling import RandomOverSampler 

path = "C:/Users/haxia/Desktop/text_and_label.csv"
dataframe = pd.read_csv(path,header=0,index_col=0,sep=',')
label = dataframe["Emotion"]    #抽离出目标变量
df = dataframe.drop("Emotion",axis=1)  #删掉目标变量获得特征
ros = RandomOverSampler(random_state=23)  #种子保证每次采样的结果一致
df,y = ros.fit_resample(df,label)  #过采样
del label  #后续不需要了,可以删掉
df["label"] = y
print(df.shape)

2.随机欠采样

将数量多的类别随机删除部分直到所有类别数量一致

import pandas as pd
from imblearn.over_sampling import RandomUnderSampler 

path = "C:/Users/haxia/Desktop/text_and_label.csv"
dataframe = pd.read_csv(path,header=0,index_col=0,sep=',')
label = dataframe["Emotion"]    #抽离出目标变量
df = dataframe.drop("Emotion",axis=1)  #删掉目标变量获得特征
rus = RandomUnderSampler(random_state=23)  #种子保证每次采样的结果一致
df,y = rus.fit_resample(df,label)  #过采样
del label  #后续不需要了,可以删掉
df["label"] = y
print(df.shape)

3.将过采样和欠采样结合

  二分类:在管道的最后,少数类和多数类之间的比率将为0.5。

from imblearn.over_sampling import RandomOverSampler 
from imblearn.under_sampling import RandomUnderSampler 
 
over = RandomOverSampler(sampling_strategy=0.1)  #0.1采样策略的RandomOverSampler将少类提高到“ 0.1 *多数类”
under = RandomUnderSampler(sampling_strategy=0.5)  #0.5采样策略的RandomUnderSampler将多数类的数量减少为“ 2 *少数类”
 
from imblearn.pipeline import Pipeline 
 
steps = [('o', over), ('u', under)] 
pipeline = Pipeline(steps=steps) 
 
X_smote, label = pipeline.fit_resample(X_train, label)  #少数类和多数类之间的比率将为0.5

多分类:

from imblearn.over_sampling import RandomOverSampler

# 定义每个类别的采样策略
sampling_strategy = {
    'class1': 100,  # class1的数量将被增加到100个
    'class2': 200,  # class2的数量将被增加到200个
    'class3': 150   # class3的数量将被增加到150个
}

# 创建RandomOverSampler对象,并使用字典类型的sampling_strategy参数
over_sampler = RandomOverSampler(sampling_strategy=sampling_strategy)

# 使用over_sampler对训练数据进行过采样
X_resampled, y_resampled = over_sampler.fit_resample(X_train, y_train)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值