如何为Pandas DataFrame前45列添加适配分布的噪声增强时序数据?
针对时序DataFrame前45列添加适配分布的噪声方案
方法1:核密度估计(KDE)生成同分布噪声
KDE无需预设分布类型,能直接拟合每列数据的真实分布,生成匹配的噪声扰动,适合特征分布差异显著的场景。
代码实现:
import pandas as pd import numpy as np from scipy.stats import gaussian_kde # 假设df是你的原始时序DataFrame augmented_df = df.copy() # 遍历前45列添加适配分布的噪声 for col in df.columns[:45]: col_data = df[col].values # 拟合当前列的KDE模型 kde_model = gaussian_kde(col_data) # 生成与原数据行数一致的噪声,可通过系数调整扰动强度(示例用0.1) # 噪声基于该列分布的偏差生成,避免破坏原有分布特征 noise = (kde_model.resample(len(col_data))[0] - col_data.mean()) * 0.1 # 应用噪声到增强数据 augmented_df[col] += noise
方法2:Bootstrap采样生成噪声
直接从列的现有数据中带放回采样作为噪声,完全匹配原分布,实现简单且无分布假设。
代码实现:
import pandas as pd import numpy as np augmented_df = df.copy() for col in df.columns[:45]: col_data = df[col].values # 带放回采样生成噪声,缩放系数控制扰动幅度(示例用0.05) noise = np.random.choice(col_data, size=len(col_data), replace=True) * 0.05 augmented_df[col] += noise
异常值处理建议
先甄别异常值成因:
- 如果是传感器故障、数据录入错误导致的无效异常值,建议用中位数插值、时序插值等方式填充,而非直接删除(避免破坏时序连续性);
- 如果是业务场景中的真实突发异常(如设备故障、峰值事件),建议保留,这类数据对模型学习极端场景很重要。
噪声生成前预处理异常值:
异常值会干扰分布拟合的准确性,导致生成的噪声包含不合理的极端值,因此建议在生成噪声前处理掉无效异常值。不建议主动添加异常值:
常规数据增强的目标是扩充正常分布的样本,提升模型泛化能力,主动添加异常值会引入无关干扰,除非你的任务是异常检测,需要针对性生成异常样本。
内容的提问来源于stack exchange,提问作者Perrupi
相关产品推荐
相关产品推荐

