如何对DataFrame中的多数类进行40%比例的随机欠采样?
多数类随机欠采样(按比例移除样本)
针对你的需求,不需要强制平衡到1:1比例,直接按指定比例保留多数类样本即可,用Pandas就能轻松实现,步骤如下:
- 分离少数类与多数类样本
先把DataFrame里的两类数据拆分出来,假设你的目标类别列名为target,多数类是类别1:
- 分离少数类与多数类样本
import pandas as pd # 读取CSV为DataFrame(如果还没完成这一步) df = pd.read_csv('your_dataset.csv') # 拆分两类样本 minority = df[df['target'] == 0] majority = df[df['target'] == 1]
- 按比例采样多数类
如果你想移除30%的多数类样本,就保留70%;移除40%则保留60%。用sample()方法指定保留比例即可:
- 按比例采样多数类
# 设置保留比例:移除30%则设为0.7,移除40%设为0.6 keep_ratio = 0.7 # random_state用于固定采样结果,保证可复现,可根据需求调整或删除 sampled_majority = majority.sample(frac=keep_ratio, random_state=42)
- 合并得到最终数据集
把采样后的多数类和少数类合并,重置索引避免混乱:
- 合并得到最终数据集
undersampled_df = pd.concat([minority, sampled_majority], axis=0).reset_index(drop=True)
- 验证采样结果
可以查看新数据集的类别分布,确认是否符合预期:
print(undersampled_df['target'].value_counts())
这种方法完全按照你要求的比例移除多数类样本,不需要调整到严格的1:1平衡状态,灵活适配你的需求。
内容的提问来源于stack exchange,提问作者Jacob Issac
相关产品推荐
相关产品推荐

