Python-在样本不均衡数据集中对样本量很多的类别进行降采样

可以使用pandas库来读取数据,并使用sklearn库中的resample函数来进行降采样。

import pandas as pd
from sklearn.utils import resample

# 对样本量很多的类别进行降采样
target_col = 'label'  # 标签列名
majority_classes = data[target_col].value_counts().head(2)  # 样本量最多的前两个类别
minority_classes = data[target_col].value_counts().drop(majority_classes.index)  # 其他类别

# 对样本量多的每个类别进行降采样
downsampled_data = pd.DataFrame()
for majority_class, count in majority_classes.items():
    majority_data = data[data[target_col] == majority_class]
    majority_downsampled = resample(majority_data, replace=False, n_samples=10000)
    downsampled_data = pd.concat([downsampled_data, majority_downsampled])
    
# 未处理的数据
ori_data = pd.DataFrame()
for minority_class, count in minority_classes.items():
    minority_data = data[data[target_col] == minority_class]
    ori_data = pd.concat([ori_data, minority_data])
    
# 将降采样后的数据与未进行处理类别的数据合并
downsampled_data = pd.concat([downsampled_data, ori_data])
downsampled_data = downsampled_data.reset_index(drop=True)

# 输出降采样后的结果
print(downsampled_data.count())

上述过程,首先读取了数据,然后通过value_counts()函数找到了样本量最多的类别和其他类别。
接着,使用resample函数对样本量最多的类别进行了降采样,并将结果与未处理的类别的数据合并。
最后,输出了降采样后的结果。

你可能感兴趣的:(Python,python,开发语言)