Python不平衡数据集采样咨询:指定类别样本量采样方案
解决方案:按指定样本量对不平衡数据集采样
针对你的需求(保留Class 0全部2000个样本,Class 1、Class 2各抽取4000个样本),权重随机采样的核心问题是它基于概率分布抽取,无法保证小类别(Class 0)的样本被全部保留。推荐采用分类别单独处理+合并的方案,直接精准控制每个类别的样本量,具体实现如下:
基于Pandas的实现步骤
假设你的数据集是Pandas DataFrame格式,类别列名为class:
- 提取Class 0的所有样本:
class0_data = df[df['class'] == 0]
- 从Class 1中无放回随机抽取4000个样本(设置
random_state保证结果可复现):
class1_sample = df[df['class'] == 1].sample(n=4000, random_state=42)
- 同理处理Class 2:
class2_sample = df[df['class'] == 2].sample(n=4000, random_state=42)
- 合并所有样本得到最终数据集:
import pandas as pd sampled_df = pd.concat([class0_data, class1_sample, class2_sample]).reset_index(drop=True)
关键注意事项
- 如果Class 1/2的样本量不足目标数量(你的场景中10000>4000,无需考虑),可将
sample方法的replace参数设为True,启用有放回采样。 - 固定
random_state的值可以让每次采样结果一致,方便后续实验复现。
内容的提问来源于stack exchange,提问作者Geeths
相关产品推荐
相关产品推荐

