不平衡二分类训练数据处理

先生成不平衡数据集

import pandas as pd
df = pd.DataFrame([0,0,0,0,0,0,0,0,0,1,1])
df.columns = ['label']
df.value_counts()

在这里插入图片描述

上采样方法,根据最多的数据集将少的数据集进行填充和打乱,数据集少的情况考虑,数据集太大会导致训练成本的提高

import warnings 
warnings.filterwarnings('ignore')

# 统计每个类别的样本数量
class_counts = newtotal_df['目标值'].value_counts()

# 取出样本数量最多的类别
max_class_count = class_counts.max()

# 对每个类别进行上采样
balanced_data = pd.concat([
    newtotal_df[newtotal_df['目标值'] == label].sample(max_class_count, replace=True)
    for label in class_counts.index
])

# 将数据打乱
balanced_data2 = balanced_data.sample(frac=1)

结果如下
不平衡二分类训练数据处理_第1张图片

下采样

根据最少的值进行的取样办法,数据集多的情况下考虑,太少不建议使用

import warnings 
warnings.filterwarnings('ignore')

# 统计每个类别的样本数量
class_counts = newtotal_df['目标值'].value_counts()

# 取出样本数量最少的类别
min_class_count = class_counts.min()

# 对每个类别进行上采样
balanced_data = pd.concat([
    newtotal_df[newtotal_df['目标值'] == label].sample(min_class_count , replace=True)
    for label in class_counts.index
])

# 将数据打乱
balanced_data2 = balanced_data.sample(frac=1)

结果如下
在这里插入图片描述

你可能感兴趣的:(分类,python,数据挖掘)