深度学习中几种常见数据标准化方法

news2024/12/25 23:36:34

目录

一、介绍

二、总结

三、详情 

1. StandardScaler

2. MinMaxScaler

3. RobustScaler

4. MaxAbsScaler

5. Normalizer

6. QuantileTransformer

7. PowerTransformer

8. Log Transform

四、示例 

五、心得


一、介绍

方法名称缩放范围适用条件
StandardScaler均值为0,方差为1数据具有正态分布的情况下效果最佳
MinMaxScaler[0, 1]数据分布不平衡或有明显的上下界限
RobustScaler根据四分位数缩放数据包含异常值
MaxAbsScaler[-1, 1]数据已经中心化,即没有偏移
Normalizer每个样本的范数为1样本之间有显著的差异,需要将其归一化
QuantileTransformer[0,1]或正态分布数据分布不均匀
PowerTransformer (Yeo-
Johnson)
均值为0,方差为1数据具有正态分布或接近正态分布
Log Transform非负数据的对数缩放数据必须为正值或非负值

二、总结

  • StandardScaler:适用于数据本身的分布近似正态分布,通过将数据缩放到均值为0、方差为1,消除不同特征的量纲影响。
  • MinMaxScaler:将数据缩放到指定的最小值和最大值(默认是0和1)之间,适合数据分布有明显上下界的情况。
  • RobustScaler:基于四分位数进行缩放,对于异常值不敏感,适用于数据包含离群点的情况。
  • MaxAbsScaler:将数据缩放到最大绝对值为1,适用于已经中心化的数据,特别适合稀疏数据
  • Normalizer:对每个样本独立进行缩放,将其范数缩放为1,适用于需要将样本归一化的情况。
  • QuantileTransformer:通过非线性变换将数据转换为均匀分布或正态分布,适用于数据分布不均匀的情况。
  • PowerTransformer (Yeo-Johnson):对数据进行幂变换,使其更接近正态分布,适用于包含负值的数据。
  • Log Transform:对数据进行对数变换,适用于数据呈指数型增长的情况,但要求数据必须为正值或非负值

 

三、详情 

1. StandardScaler

        功能: 通过将数据的均值调整为0,标准差调整为1,使数据服从标准正态分布。

        公式: X_{\text {scaled }}=\frac{X-\mu}{\sigma}  其中,\mu 是均值,\sigma 是标准差。

        适用场景: 大多数机器学习算法,特别是假设数据服从正态分布的算法,如线性回归、逻辑回归和支持向量机。

2. MinMaxScaler

        功能: 将数据缩放到给定的最小值和最大值(通常是0和1)之间。

        公式: X_{\text {scaled }}=\frac{X-X_{\min }}{X_{\max }-X_{\min }}

        适用场景: 数据范围已知且确定要将数据缩放到特定范围内的场景,例如图像处理(像素值通常在0到255之间)。

3. RobustScaler

        功能: 使用中位数和四分位距进行缩放,适用于包含异常值的数据。

        公式: X_{\text {scaled }}=\frac{X-\operatorname{median}(X)}{I Q R(X)} 其中,I Q R 表示四分位距(75th percentile - 25th percentile)。

        适用场景: 数据中存在较多异常值。

4. MaxAbsScaler

        功能: 按每个特征的最大绝对值进行缩放,使数据在 [-1, 1] 范围内。

        公式: X_{\text {scaled }}=\frac{X}{\max (|X|)}

        适用场景: 数据已经被稀疏化且包含正负值。

5. Normalizer

        功能: 将每个样本缩放为单位范数(通常是L2范数),使每个样本的向量长度为1。

        公式: X_{\text {scaled }}=\frac{X}{\|X\|}

        适用场景: 当你希望将数据缩放为相同的尺度(单位向量)以用于聚类或其它机器学习算法。

6. QuantileTransformer

        功能: 通过将数据转换为服从均匀分布或高斯分布,减小数据中的偏态和异常值的影响。

        方法:使用分位数进行转换。

        适用场景: 当数据具有很强的偏态或需要服从特定分布时。

7. PowerTransformer

        功能: 使用幂变换(如Box-Cox或Yeo-Johnson)将数据变换为更接近正态分布的形式。

         公式: Box-Cox变换: X_{\text {new }}=\frac{X^\lambda-1}{\lambda}​ (需要所有值为正)

                   Yeo-Johnson变换: 适用于正负值数据。

        适用场景: 当数据分布明显偏离正态分布且包含负值时。

8. Log Transform

        功能: 通过对数据应用对数变换,减小数据的偏态。

        公式: X_{\text {new }}=\log (X+1)

        适用场景: 数据具有指数增长或极度偏态分布。

四、示例 

import numpy as np
from sklearn.preprocessing import StandardScaler, MinMaxScaler, RobustScaler, MaxAbsScaler, Normalizer, QuantileTransformer, PowerTransformer

# 示例数据
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# StandardScaler
standard_scaler = StandardScaler()
data_standard_scaled = standard_scaler.fit_transform(data)
print("StandardScaler:", data_standard_scaled)

# MinMaxScaler
minmax_scaler = MinMaxScaler()
data_minmax_scaled = minmax_scaler.fit_transform(data)
print("MinMaxScaler:", data_minmax_scaled)

# RobustScaler
robust_scaler = RobustScaler()
data_robust_scaled = robust_scaler.fit_transform(data)
print("RobustScaler:", data_robust_scaled)

# MaxAbsScaler
max_abs_scaler = MaxAbsScaler()
data_max_abs_scaled = max_abs_scaler.fit_transform(data)
print("MaxAbsScaler:", data_max_abs_scaled)

# Normalizer
normalizer = Normalizer()
data_normalized = normalizer.fit_transform(data)
print("Normalizer:", data_normalized)

# QuantileTransformer
quantile_transformer = QuantileTransformer(output_distribution='normal')
data_quantile_transformed = quantile_transformer.fit_transform(data)
print("QuantileTransformer:", data_quantile_transformed)

# PowerTransformer (Yeo-Johnson)
power_transformer_yeo_johnson = PowerTransformer(method='yeo-johnson')
data_power_yeo_johnson_transformed = power_transformer_yeo_johnson.fit_transform(data)
print("PowerTransformer (Yeo-Johnson):", data_power_yeo_johnson_transformed)

# Log Transform
data_log_transformed = np.log1p(data)  # 使用log1p避免对零值进行log变换时出现负无穷大
print("Log Transform:", data_log_transformed)

五、心得

        最常用的还是 StandardScaler 或者 MinMaxScaler,其他的几种标准化方法很少用到,不到特殊情况下不要轻易尝试。

        当换了一种标准化方法时,切记模型中的激活函数可能也要跟随调整。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1806486.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

山水有相逢 来日皆可期

毕业接踵而至,大家都在拍照记录留恋毕业的美好时光碎片。但由于最近实在“玩得太嗨”,无心拍毕业照。 默海笑,当然是需要用自己的方式来为这浑浑噩噩的大学生活画上句号。 我相信,毕业时的你我都会无比的感慨,为什么时…

Matlab|遗传粒子群-混沌粒子群-基本粒子群

目录 1 主要内容 2 部分代码 3 效果图 4 下载链接 1 主要内容 很多同学在发文章时候最犯愁的就是创新点创新点创新点(重要的事情说三遍),对于采用智能算法的模型,可以采用算法改进的方式来达到提高整个文章创新水平的目的&…

Autosar 通讯栈配置-手动配置PDU及Signal-基于ETAS软件

文章目录 前言System配置ISignalSystem SignalPduFrameISignal到System Signal的mapSystem Signal到Pdu的mapPdu到Frame的mapSignal配置Can配置CanHwFilterEcuC配置PduR配置CanIf配置CanIfInitCfgCanIfRxPduCfgCom配置ComIPduComISignalSWC配置Data mappingRTE接口Com配置补充总…

AXI Quad SPI IP核中的STARTUPEn原语参数

启动STARTUPEn Primitive (原语)参数在 FPGA的主 SPI模式下非常有用。当你启用这个参数时,对于 7 系列设备,STARTUPE2 原语会被包含在设计中;而对于 UltraScale™ 设备,则是 STARTUPE3 原语。这些原语在 FP…

时隔很久运行苍穹外卖项目,出现很多错误

中途运行了很多其他项目,maven的配置文件还被我修改了一次。导致再次运行苍穹外卖项目出现很多错误。 发现没有办法,把本地的仓库删了个干干净净。然后点击clean发现报错: Cannot access alimaven (http://mavejavascript:void(0);n.aliyun.…

线性代数|机器学习-P11方程Ax=b求解研究

文章目录 1. 变量数和约束条件数大小分类2. 最小二乘法和Gram-schmidt变换2.1 Gram-schmidt变换2.2 最小二乘法2.2.1 损失函数-Lasso 和regression2.2.2 损失函数-Lasso2.2.3 损失函数-regression2.2.4 Regression岭回归-矩阵验证2.2.5 Regression岭回归-导数验证 3. 迭代和随机…

牛客网刷题 | BC119 最高分与最低分之差

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 输入n个成绩&#…

STM32F103C8T6 HAL库串口重定向

前言: 这里仅用做个人记录,实现USART1串口通信,并通过printf重定向输出“串口打印测试” 正文开始: 首先在STM32CubeMX上对串口进行配置,其实方法也非常简单。 按照箭头顺序,先点击Connectivity找到USART1…

NineData云原生智能数据管理平台新功能发布|2024年5月版

重点发布​ 数据库 DevOps - 表分组查询​ 在企业用户规模达到一定程度后,分库分表成为一种常见的数据库架构选择。在这种情况下,查询和维护数据需要高效的解决方案,以避免手动逐一查询、变更和汇总多个分库和分表的繁琐操作。 库分组变更…

泛微开发修炼之旅--13通过Ecology拦截器(注解的方式),拦截后端接口,实现接口执行成功后或执行前操作源码示例

文章链接:泛微开发修炼之旅--13通过Ecology拦截器(注解的方式),拦截后端接口,实现接口执行成功后或执行前操作源码示例

[个人感悟] Java基础问题应该考察哪些问题?

前言 “一切代码无非是数据结构和算法流程的结合体.” 忘了最初是在何处看见这句话了, 这句话, 对于Java基础的考察也是一样. 正如这句话所说, 我们对于基础的考察主要考察, 数据结构, 集合类型结构, 异常类型, 已经代码的调用和语法关键字. 其中数据结构和集合类型结构是重点…

牛客网刷题 | BC117 逆序输出

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 输入10个整数&…

ssm629基于SSM的二手交易平台设计与开发+jsp【已测试】

前言:👩‍💻 计算机行业的同仁们,大家好!作为专注于Java领域多年的开发者,我非常理解实践案例的重要性。以下是一些我认为有助于提升你们技能的资源: 👩‍💻 SpringBoot…

安装windows11系统跳过微软账号登录,使用本地账号登录方法

在安装win11系统,进行到如图下所示界面的时候,暂停下 我们可以按下键盘的ShiftF10按键(部分电脑是FnShiftF10),这时屏幕会出现命令行窗口,如图下所示 我们需要在命令行内输入代码oobe\bypassnro.cmd然后回车…

Linxu: Dynamic debug 简介

文章目录 1. 前言2. 什么是 Dynamic debug (dyndbg) ?3. Dynamic debug (dyndbg) 的使用3.1 开启 Dynamic debug (dyndbg) 功能3.2 使用 Dynamic debug (dyndbg) 功能 4. Dynamic debug (dyndbg) 的实现4.1 内核接口 dynamic_pr_debug() 的实现4.2 debugfs 导出控制节点 contr…

嵌入式中C语言经典的面试题分享

#error的作用是什么? #error 指令让预处理器发出一条错误信息,并且会中断编译过程。下面我们从Linux代码中抽取出来一小段代码并做修改得到示例代码: 这段示例代码很简单,当RX_BUF_IDX宏的值不为0~3时,在预处理阶段就会通过 #error 指令输出一条错误提示信息: "…

spring boot +Scheduled 动态定时任务配置

通常情况下我们设定的定时任务都是固定的,有时候需要我们动态的配置定时任务,下面看代码 import com.mybatisflex.core.query.QueryWrapper; import com.yzsec.dsg.web.modules.exportpwd.entity.ExportPwd; import com.yzsec.dsg.web.modules.exportpwd.entity.table.Export…

嵌入式单片机产品微波炉拆解分享

在厨房电器中,微波炉可以说是最具技术含量的电器,它的工作原理不像其他电器那样一眼就能看个明白,于是拆解了一个微波炉,分析内部电路。 微波炉的结构 微波炉由箱体、磁控管、变压器、高压电容器、高压二极管、散热风扇、转盘装置及一系列控制保护开关组成,大多数微波炉还…

人工智能和物联网如何结合

欢迎来到 Papicatch的博客 文章目录 🍉引言 🍉AI与IoT的结合方式 🍈数据处理和分析 🍍实例 🍈边缘计算 🍍实例 🍈自动化和自主操作 🍍实例 🍈安全和隐私保护 &…

【Python】探索 One-Class SVM:异常检测的利器

我已经从你的 全世界路过 像一颗流星 划过命运 的天空 很多话忍住了 不能说出口 珍藏在 我的心中 只留下一些回忆 🎵 牛奶咖啡《从你的全世界路过》 在数据科学和机器学习领域,异常检测(Anomaly Detection)是…