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

目录

一、介绍

二、总结

三、详情 

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.mfbz.cn/a/693918.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实用软件分享---简单菜谱 0.3版本 几千种美食(安卓)

专栏介绍:本专栏主要分享一些实用的软件(Po Jie版); 声明1:软件不保证时效性;只能保证在写本文时,该软件是可用的;不保证后续时间该软件能一直正常运行;不保证没有bug;如果软件不可用了,我知道后会第一时间在题目上注明(已失效)。介意者请勿订阅。 声明2:本专栏的…

IO-源码阅读 glibc 2.35

文章目录 参考缓存机制IO_FILE_PLUSfopenfopen_internal_IO_no_init_IO_old_init _IO_new_file_init_internal_IO_link_in _IO_new_file_fopen_IO_file_open fread_IO_fread_IO_sgetn_IO_doallocbuf_IO_file_doallocate_IO_file_stat_IO_setb __underflow_IO_new_file_underflo…

深入Llama2:掌握未来语言模型的秘密

Llama2是一个基于Transformer架构的大型语言模型,它旨在处理和理解大规模的文本数据。作为技术人员,了解Llama2的工作原理、模型结构和训练方法对于有效利用该模型至关重要。本文将详细介绍Llama2的基本概念、主要作用、使用方法及注意事项。 一、简介 …

Linux---Linux编译器-gcc与g++的使用

GCC是以GPL许可证所发行的自由软件,也是GNU计划的关键部分。GCC的初衷是为GNU操作系统专门编写一款编译器,现已被大多数类Unix操作系统(如Linux、BSD、MacOS X等)采纳为标准的编译器。 gcc是专门用来编译C语言的,而g是…

VSC++: 民意调查比例法

void 民意调查比例法() {//缘由https://bbs.csdn.net/topics/396521294?page1#post-411408461从题目描述看:902/3~300.7,1498/5~299.6也就是大约求2个数的公约数,并使得这个公约数尽量求出最小误差?且商小于某值。int a 0, aa …

Django Forbidden (CSRF cookie not set.)解决办法

解决办法就是在setting.py文件中注释: django.middleware.csrf.CsrfViewMiddleware, 这个中间件是为了防止跨站请求伪造的,平时用网页表单请求时,post提交是没有问题的,但是用api调用时就会被禁止,为了能使用接口调用…

【Java面试】十七、并发篇(上)

文章目录 1、synchronized关键字的底层原理:Monitor2、synchronized相关2.1 为什么说synchronized是重量级锁2.2 synchronized锁升级之偏向锁2.3 synchronized锁升级之轻量级锁 3、Java内存模型JMM4、CAS4.1 CAS流程4.2 CAS底层实现 5、volatile关键字的理解5.1 可见…

使用python绘制季节图

使用python绘制季节图 季节图效果代码 季节图 季节图(Seasonal Plot)是一种数据可视化图表,用于展示时间序列数据的季节性变化。它通过将每个时间段(如每个月、每个季度)的数据绘制在同一张图表上,使得不同…

文件怎么去重?5个技巧,教你删除重复文件!

一般来说,在处理大量文件时,你可能会遇到重复的类似文件。这些文件占据了电脑上不必要的磁盘空间,导致系统性能下降。而这些文件可以是不同类型的,如照片、视频、音频、存档、文档等。正因如此,您需要通过文件去重来删…

SpringBoot+Vue学科竞赛系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 角色对应功能 学生教师管理员 功能截图

SQL Developer迁移第三方数据库单表到Oracle

在SQL Developer中,除可用Migration Wizard迁移第三方数据库到Oracle外,单表的迁移可以用Copy To Oracle ...菜单。右键单击源表即可。 本例的源表为MySQL数据库employees中的表:departments。 Options页面:指定目标库&#xff…

【零基础一看就会】Python爬虫从入门到应用(下)

目录 一、urllib的学习 1.1 urllib介绍 1.2 urllib的基本方法介绍 urllib.Request (1)构造简单请求 (2)传入headers参数 (3)传入data参数 实现发送post请求(示例) response.…

RDK X3(aarch64) 测试手柄

0. 环境 - 亚博智能的ROSMASTER-X3 标准版 - XDK X3 1.0 - 冰原狼等win10免驱的手柄 1. RDK X3 1.0 串口通信 波特率 921600 root/root mobaterm -> Session -> VNC -> 192.168.8.108:5900 -> runrise 2. 测试 ROSMASTER-X3 标准版 配套的手柄 安装 …

umap降维,c++用法纪实

全是血泪&#xff0c;可惜对于大量数据&#xff0c;速度还是太慢。 一、代码 // ConsoleApplication2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //#include <iostream>#include "knncolle/knncolle.hpp" #include "Umap.…

登Cell Press子刊,武汉理工大学团队基于集成学习提出简化电化学模型,0.17s完成3500s的1C恒流放电

2022 年 7 月&#xff0c;不老男神林志颖突发车祸&#xff0c;作为专业赛车手的他驾驶的特斯拉 Model X 在行驶过程中忽然偏离既定轨迹&#xff0c;一头撞向路边的隔离带&#xff0c;随后车辆起火&#xff0c;并在救援车拖吊过程中二次起火&#xff0c;最终整辆车被烧到只剩下了…

解决Win10系统ping不通、无法远程的问题

1、概述 某天要使用微软的远程桌面程序mstsc.exe远程到旁边的一台测试电脑上,结果远程不了,ping都ping不通,于是详细研究了这个问题。在此大概地记录一下该问题排查的过程,以供参考。 2、ping不通 使用mstsc.exe远程到测试电脑,远程不了,没有反应。于是手动ping一…

股票数据集2-纳斯达克NASDAQ 100 分析

1. 数据清洗 用邻近均值的方法&#xff0c;去掉Non_Padding中的NaN数据 这里没用df.fillna(), 因为其只有前向(ffill )和 后向 (bfill) 插值&#xff0c;不适合大量连续的NaN pd转换为np&#xff0c;写一个函数, 返回np数组的空值&#xff0c;lambda的匿名函数返回y轴空值的索…

TinyVision V851s 使用 OpenCV + NPU 实现 Mobilenet v2 目标分类识别

用39块钱的V851se视觉开发板做了个小相机。 可以进行物品识别、自动追焦&#xff01; 这个超低成本的小相机是在V851se上移植使用全志在线开源版本的Tina Linux与OpenCV框架开启摄像头拍照捕获视频&#xff0c;并结合NPU实现Mobilenet v2目标分类识别以及运动追踪等功能......并…

Web学习_sqli-labs_1~10关

less1-GET-Error based - Single quotes - String &#xff08;基于错误的GET单引号字符型注入&#xff09; 我每次操作都会在Hackbar中&#xff0c;代码都在Hackbar框中&#xff0c;可放大看 有题目知道了是字符型注入&#xff0c;我们先判断表格有几列&#xff0c;可以发现…

层次聚类分析星

clc,clear a [73,40,7;60,15,5;61,19,2;34,18,6;67,126,10;91,40,4;101,40,13;81,40,6;88,40,8;122,40,17;102,50,17;87,50,12;110,50,14;164,50,17;40,30,1;76,40,17;118,50,9;160,50,15];[m,n] size(a);d zeros(m); d mandist(a); % mandist 求矩阵列向量组之间的两两…