当前位置: 首页 > news >正文

机器学习07-归一化与标准化

归一化与标准化

一、基本概念

  1. 归一化(Normalization)
    • 定义:将数据缩放到一个固定的区间,通常是[0,1]或[-1,1],以消除不同特征之间的量纲影响和数值范围差异。
    • 公式:对于数据 ( x ),归一化后的值 ( x’ ) 为
      [
      x’=\frac{x-\min(x)}{\max(x)-\min(x)}
      ]
      其中,(\min(x)) 和 (\max(x)) 分别是该特征列的最小值和最大值。
    • 作用:使不同特征的数据处于同一量纲水平,便于模型处理和比较,避免某些特征因数值范围大而对模型产生主导作用。
  2. 标准化(Standardization)
    • 定义:将数据进行变换,使其均值为0,标准差为1,从而消除数据的分布差异。
    • 公式:对于数据 ( x ),标准化后的值 ( x’ ) 为
      [
      x’=\frac{x-\mu}{\sigma}
      ]
      其中,(\mu) 是该特征列的均值,(\sigma) 是该特征列的标准差。
    • 作用:使数据符合标准正态分布,适用于对数据分布有一定假设的模型,如线性回归、逻辑回归等,能够提高模型的收敛速度和性能。

二、使用场景

  1. 归一化
    • 适用场景
      • 当数据的量纲不同,且数值范围差异较大时,如身高(cm)和体重(kg)。
      • 对于基于距离的模型,如K近邻(KNN)、K均值聚类(K-Means)等,归一化可以避免距离计算时某些特征的主导作用。
      • 数据挖掘中,用于数据预处理,使数据更加易于处理和分析。
    • 不适用场景
      • 当数据中存在异常值时,归一化可能会受到异常值的影响,导致归一化后的数据范围不准确。
      • 对于一些对数据分布有特定要求的模型,如假设数据服从正态分布的模型,归一化可能不适用。
  2. 标准化
    • 适用场景
      • 当数据服从正态分布或近似正态分布时,标准化可以将数据转换为标准正态分布,便于模型处理。
      • 对于基于梯度下降的优化算法,如线性回归、逻辑回归等,标准化可以加快模型的收敛速度,提高模型的性能。
      • 在机器学习模型中,当需要对特征进行加权求和或线性组合时,标准化可以使不同特征的权重更加合理。
    • 不适用场景
      • 当数据的分布不符合正态分布,且模型对数据分布没有特定要求时,标准化可能没有明显的优势。
      • 对于一些非线性模型,如决策树、随机森林等,标准化对模型性能的提升可能不明显。

三、优缺点

  1. 归一化
    • 优点
      • 简单易实现,计算速度快。
      • 可以将数据缩放到指定的区间,便于模型处理和比较。
      • 对于基于距离的模型,可以有效避免数值范围差异对模型的影响。
    • 缺点
      • 对异常值敏感,异常值可能会导致归一化后的数据范围不准确。
      • 如果数据的最小值和最大值发生变化,需要重新计算归一化参数。
      • 归一化后的数据范围固定,可能会丢失数据的原始分布信息。
  2. 标准化
    • 优点
      • 可以将数据转换为标准正态分布,适用于对数据分布有特定要求的模型。
      • 对异常值的鲁棒性较好,不会受到异常值的较大影响。
      • 可以加快基于梯度下降的优化算法的收敛速度,提高模型的性能。
    • 缺点
      • 计算过程相对复杂,需要计算均值和标准差。
      • 对于非正态分布的数据,标准化后的数据可能仍然不符合标准正态分布。
      • 如果数据的均值和标准差发生变化,需要重新计算标准化参数。

四、代码实现

  1. 归一化(Python代码)
    import numpy as np
    from sklearn.preprocessing import MinMaxScaler# 示例数据
    data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 使用MinMaxScaler进行归一化
    scaler = MinMaxScaler()
    normalized_data = scaler.fit_transform(data)print("归一化后的数据:")
    print(normalized_data)
    
  2. 标准化(Python代码)
    import numpy as np
    from sklearn.preprocessing import StandardScaler# 示例数据
    data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 使用StandardScaler进行标准化
    scaler = StandardScaler()
    standardized_data = scaler.fit_transform(data)print("标准化后的数据:")
    print(standardized_data)
    

五、总结

  1. 选择依据
    • 如果数据的量纲不同,且数值范围差异较大,可以选择归一化。
    • 如果数据服从正态分布或近似正态分布,且模型对数据分布有特定要求,可以选择标准化。
    • 对于基于距离的模型,如KNN、K-Means等,归一化通常更合适;对于基于梯度下降的优化算法,如线性回归、逻辑回归等,标准化通常更有效。
  2. 注意事项
    • 在进行归一化或标准化时,需要保存归一化或标准化的参数(如最小值、最大值、均值、标准差等),以便在对新数据进行预处理时使用相同的参数。
    • 对于异常值较多的数据,可以考虑先对数据进行异常值处理,再进行归一化或标准化。
    • 在实际应用中,可以根据模型的性能和数据的特点,尝试不同的归一化和标准化方法,选择最适合的方法。

相关文章:

  • 4.7/Q1,GBD数据库最新文章解读
  • Andorid之TabLayout+ViewPager
  • Go语言——docker-compose部署etcd以及go使用其服务注册
  • SpringBoot中的拦截器
  • Web 架构之负载均衡会话保持
  • 互联网大厂Java求职面试:优惠券服务架构设计与AI增强实践-5
  • Java自定义线程池:从原理到高性能实践
  • DAY 24 元组和OS模块
  • Visual studio 打包方法
  • Nacos源码—9.Nacos升级gRPC分析七
  • MySQL 8.0 OCP 英文题库解析(四)
  • docker 快速部署若依项目
  • SimScape物理建模实例2--带控制的单质量弹簧阻尼系统
  • Linux云计算训练营笔记day07(MySQL数据库)
  • MySQL 8.0 OCP 1Z0-908 51-60题
  • SSH免密登录的5种实现方法
  • k8s初始化时候,报错无法通过 CRI(容器运行时接口)与 containerd 通信
  • 2025.05.10京东机考真题算法岗-第二题
  • 【数据结构】——栈和队列OJ
  • TCP核心机制
  • 中巴续签双边本币互换协议,进一步深化金融战略合作
  • 国务院关税税则委员会关于调整对原产于美国的进口商品加征关税措施的公告
  • 首映|奥斯卡最佳国际影片《我仍在此》即将公映
  • 第四届长三角国际应急博览会开幕,超3000件前沿装备技术亮相
  • 睡觉总做梦是睡眠质量差?梦到这些事,才要小心
  • 何立峰:中方坚定支持多边主义和自由贸易,支持世贸组织在全球经济治理中发挥更大作用