如何基于分布自动对多列数据做适配变换以完成聚类数据预处理
聚类特征自动适配变换方案
完全可以实现自动化的分布检测和对应变换,不需要手动处理200多列特征,核心逻辑是通过统计检验判定每个连续特征的分布类型,再自动匹配对应的预处理方法,具体实现如下:
实现逻辑
- 特征筛选:优先过滤非连续数值类型的特征(如分类特征、时间特征等),这类特征不需要做分布类变换
- 分布检测规则:
- 幂律分布判定:使用KS检验拟合帕累托分布,p值高于预设阈值(通常取0.05)则判定为服从幂律分布
- 高斯分布判定:使用Anderson-Darling检验做正态性校验,p值高于阈值则判定为近似高斯分布
- 不符合上述两类的特征统一归类为未知分布
- 变换匹配规则:
- 幂律分布特征:优先使用
log1p做对数变换,若存在负值则先加常数平移到所有值大于0后再做对数变换 - 近似高斯分布特征:直接用
StandardScaler做Z-score归一化即可 - 未知分布特征:使用
QuantileTransformer设置output_distribution='normal'做分位数变换,强制映射为近似正态分布
- 幂律分布特征:优先使用
核心代码示例
import pandas as pd import numpy as np from scipy.stats import kstest, pareto, anderson from sklearn.preprocessing import StandardScaler, QuantileTransformer def auto_transform_features(df, p_threshold=0.05): # 仅筛选数值型特征 numeric_cols = df.select_dtypes(include=[np.number]).columns.tolist() transformed_df = df.copy() transform_mapping = {} for col in numeric_cols: col_data = df[col].dropna() # 先检测幂律分布(帕累托分布) shape, loc, scale = pareto.fit(col_data) ks_stat, ks_p = kstest(col_data, 'pareto', args=(shape, loc, scale)) if ks_p > p_threshold: # 幂律分布:对数变换 min_val = col_data.min() offset = 0 if min_val > 0 else abs(min_val) + 1e-6 transformed_df[col] = np.log1p(col_data + offset) transform_mapping[col] = ('log1p', {'offset': offset}) continue # 检测高斯分布 ad_result = anderson(col_data, dist='norm') # 取5%显著性水平对应的临界值判断 if ad_result.statistic < ad_result.critical_values[2]: # 高斯分布:归一化 scaler = StandardScaler() transformed_df[col] = scaler.fit_transform(col_data.values.reshape(-1,1)).flatten() transform_mapping[col] = ('standard_scaler', {'scaler': scaler}) continue # 未知分布:分位数变换 qt = QuantileTransformer(output_distribution='normal', random_state=42) transformed_df[col] = qt.fit_transform(col_data.values.reshape(-1,1)).flatten() transform_mapping[col] = ('quantile_transform', {'transformer': qt}) return transformed_df, transform_mapping
实用建议
- 分布检验的p值阈值可以根据实际场景调整,阈值越高分布判定越严格
- 输出的
transform_mapping可以保存下来,线上推理时直接复用对应变换规则,不需要重新检测分布 - 如果业务侧有明确的特征含义要求,可以手动指定个别关键特征的变换规则,其余特征走自动化逻辑即可
内容的提问来源于stack exchange,提问作者lte__
相关产品推荐
相关产品推荐

