You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

除Min-Max Normalization、Quantile Transformation外,有哪些[0,1]区间的数据缩放方法?

可将特征缩放到[0,1]区间的其他数据缩放方法

除了你提到的Min-Max归一化和分位数变换,还有几种实用方法能把特征压缩到[0,1]区间,适配不同的数据分布场景:

  • 截断后再做Min-Max归一化
    如果数据集存在极端异常值,直接用Min-Max会让大部分数据集中在极小区间。可以先把特征值截断到指定分位数范围(比如0.01到0.99分位数),将超出范围的极端值限制在边界上,之后再用常规Min-Max缩放到[0,1],能弱化异常值干扰,保留大部分数据的区分度。示例代码:

    import numpy as np
    # 确定截断边界
    lower_bound = np.quantile(feature, 0.01)
    upper_bound = np.quantile(feature, 0.99)
    # 截断特征值
    clipped_feature = np.clip(feature, lower_bound, upper_bound)
    # 缩放到[0,1]
    scaled_feature = (clipped_feature - clipped_feature.min()) / (clipped_feature.max() - clipped_feature.min())
    
  • 对数变换+Min-Max归一化
    针对右偏分布的特征(比如用户消费金额、点击量这类数据),先做对数变换拉平分布,再用Min-Max把结果缩到[0,1]。如果特征有0值,用log1p(即log(x+1))避免计算错误。示例:

    import numpy as np
    # 对数变换
    log_transformed = np.log1p(feature)
    # 缩放至[0,1]
    scaled_feature = (log_transformed - log_transformed.min()) / (log_transformed.max() - log_transformed.min())
    
  • Sigmoid映射
    Sigmoid函数能把任意实数映射到(0,1)区间,近似满足[0,1]需求。直接用原始特征的话极端值会被压到极接近0或1的位置,建议先做标准化(减均值除以标准差)再转换。示例:

    from scipy.special import expit
    # 标准化特征
    standardized = (feature - feature.mean()) / feature.std()
    # 用sigmoid映射到(0,1)
    scaled_feature = expit(standardized)
    
  • 反双曲正弦变换+Min-Max归一化
    和对数变换类似,但反双曲正弦(arcsinh)能处理包含0和负值的特征,适合重尾分布数据。变换后用Min-Max缩放到[0,1]即可,numpy里直接用np.arcsinh就能实现。

内容的提问来源于stack exchange,提问作者Jacob Issac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 01:05:04