Python3环境下移除数据点调整数据集为均匀分布的方法咨询
数据集中心倾斜降采样为近似均匀分布的Python实现方案
你需要用到的都是Python数据生态的常用库,无需额外安装小众依赖,操作逻辑对初学者也比较友好:
依赖安装
如果还没装相关库可以先执行安装命令:
pip install pandas numpy scikit-learn
步骤1:读取原始CSV数据
用pandas直接读取本地csv文件即可:
import pandas as pd # 替换引号内的路径为你自己的数据集文件路径 raw_df = pd.read_csv("your_dataset_path.csv")
步骤2:选择重采样方案
推荐两种实现思路,你可以根据自己的需求选:
方案1:分箱均匀采样(逻辑简单,易调试)
核心思路是把特征空间切分为等大小的区块,每个区块保留相同数量的样本,中心样本多的区块自动丢弃多余样本:
import numpy as np # 👇 这里替换成你自己数据集里的特征列名,比如如果是二维特征就写["col1", "col2"] feature_cols = ["x", "y"] # 分箱数量,数值越大采样结果越接近均匀,可自行调整 n_bins = 20 # 给每个样本分配所属的区块ID bin_labels = [] for col in feature_cols: bin_labels.append(pd.cut(raw_df[col], bins=n_bins, labels=False)) raw_df["bin_id"] = sum([bin_labels[i] * (n_bins ** i) for i in range(len(feature_cols))]) # 取所有区块的最小样本数作为每个区块的保留数量 min_sample_per_bin = raw_df["bin_id"].value_counts().min() # 每个区块随机采样对应数量的样本 uniform_df = raw_df.groupby("bin_id", group_keys=False).apply( lambda x: x.sample(min_sample_per_bin, random_state=42) ) # 删除辅助计算的bin_id列 uniform_df = uniform_df.drop("bin_id", axis=1)
方案2:密度加权采样(结果更平滑,适合多维度数据)
核心思路是计算每个样本的分布密度,中心区域密度高的样本采样保留概率更低,自动实现均匀化:
from sklearn.neighbors import KernelDensity import numpy as np # 👇 替换成你自己的特征列名 feature_cols = ["x", "y"] # 拟合核密度模型计算每个样本的密度 kde = KernelDensity(kernel="gaussian", bandwidth=0.5).fit(raw_df[feature_cols]) raw_df["density"] = np.exp(kde.score_samples(raw_df[feature_cols])) # 密度越高的样本保留概率越低,0.8为调整系数,可自行修改控制中心样本保留比例 max_density = raw_df["density"].max() raw_df["sample_weight"] = 1 - (raw_df["density"] / max_density) * 0.8 # 按权重采样,可自行修改保留的样本数量/比例 # 示例为保留原始数据集40%的样本: uniform_df = raw_df.sample( n=int(len(raw_df) * 0.4), weights="sample_weight", random_state=42 ).reset_index(drop=True) # 删除辅助计算列 uniform_df = uniform_df.drop(["density", "sample_weight"], axis=1)
步骤3:导出处理后的数据集
# 导出为新的csv文件,避免覆盖原始数据 uniform_df.to_csv("uniform_dataset.csv", index=False)
初学者调试提示
- 固定
random_state参数可以保证每次运行结果一致,方便对比参数调整效果 - 分箱数量、密度计算的带宽、采样比例都可以根据你实际的分布效果调整,调整后可以用
matplotlib画散点图确认均匀度 - 如果是一维数据集,只需要保留一个特征列即可,多维数据往
feature_cols里加列名就行
内容的提问来源于stack exchange,提问作者sheep_skins
相关产品推荐
相关产品推荐

