当前位置: 首页 > 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. 注意事项
    • 在进行归一化或标准化时,需要保存归一化或标准化的参数(如最小值、最大值、均值、标准差等),以便在对新数据进行预处理时使用相同的参数。
    • 对于异常值较多的数据,可以考虑先对数据进行异常值处理,再进行归一化或标准化。
    • 在实际应用中,可以根据模型的性能和数据的特点,尝试不同的归一化和标准化方法,选择最适合的方法。
http://www.dtcms.com/a/188089.html

相关文章:

  • 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核心机制
  • list基础用法
  • Docker疑难杂症解决指南
  • ThingsBoard3.9.1 MQTT Topic(4)
  • python常用算法总结(下)
  • 基于STM32、HAL库的TLV320AIC3101IRHBR音频接口芯片驱动程序设计
  • [250512] Node.js 24 发布:ClangCL 构建,升级 V8 引擎、集成 npm 11
  • webservice获取全国省份区县编码(拼音全拼+拼音简写)
  • linux 抓包工具tcpdump使用小记(使用时注意权限和系统资源)
  • OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——mqtt库
  • 时间序列预测建模的完整流程以及数据分析【学习记录】