当前位置: 首页 > 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.xdnf.cn/news/417799.html

相关文章:

  • mybatis中${}和#{}的区别
  • 【RabbitMQ】工作队列和发布/订阅模式的具体实现
  • 微服务八股(自用)
  • React Native告别图标体积大手动更换慢的噩梦:让图标更新像修改文字一样简单
  • 聊一聊Electron中Chromium多进程架构
  • 数据结构day1
  • 使用 IntelliJ IDEA 和 Maven 创建 Spark 项目
  • 云原生|kubernetes|kubernetes的etcd集群备份策略
  • 高防服务器部署实战:从IP隐匿到协议混淆
  • Scala和Go差异
  • 【面试 · 三】react大集合(类式/函数式)
  • 需求与技术实现不匹配,如何协调
  • 【 Redis | 实战篇 秒杀实现 】
  • 在虚拟机Ubuntu18.04中安装NS2教程及应用
  • Spark SQL 读取 CSV 文件,并将数据写入 MySQL 数据库
  • niushop单商户V5多门店版V5.5.0全插件+商品称重、商家手机端+搭建环境教程
  • Unity引擎源码-物理系统详解-其一
  • centos中libc.so.6No such file的解决方式
  • AI+企业应用级PPT生成(实战)
  • 初识XML
  • 软件测试(概念1)
  • 使用CAS操作实现乐观锁的完整指南
  • C++的历史与发展
  • 原创-业务接口数据监控
  • MyBatis-Plus的批量插入与原生JDBC效率对比
  • git 怎么更改本地的存储的密码
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】金融风控分析案例-10.3 风险指标可视化监控
  • Yarn-概述
  • 用自写的jQuery库+Ajax实现了省市联动
  • 专题三:穷举vs暴搜vs深搜vs回溯vs剪枝(全排列)决策树与递归实现详解