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

PyTorch 基础学习(14)- 归一化

系列文章:
《PyTorch 基础学习》文章索引

概述

归一化是数据预处理中的重要步骤之一,它可以将数据调整到特定的范围或分布,有助于加速训练并提高模型的性能。在机器学习中,不同的归一化方法适用于不同的场景。本文将详细介绍 scikit-learn 中的常见归一化方法及其应用。

1. Min-Max 归一化

MinMaxScaler

Min-Max 归一化将数据缩放到指定范围,通常是 [0, 1]。这种方法保留了数据的相对关系,但容易受到异常值的影响。

公式

X s c a l e d = X − X m i n X m a x − X m i n × ( m a x − m i n ) + m i n X_{scaled} = \frac{X - X_{min}}{X_{max} - X_{min}} \times (max - min) + min Xscaled=XmaxXminXXmin×(maxmin)+min

  • X m i n X_{min} Xmin X m a x X_{max} Xmax 分别是数据的最小值和最大值。
  • minmax 是目标缩放范围的下限和上限。

典型应用场景:

  • 图像处理:在计算机视觉中,像素值通常在 [0, 255] 范围内,通过 Min-Max 归一化将其缩放到 [0, 1] 以加快神经网络的训练。
  • 神经网络模型:输入数据在 [0, 1] 或 [-1, 1] 范围内通常可以提升模型的收敛速度。

示例

from sklearn.preprocessing import MinMaxScalerscaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data)

2. 标准化

StandardScaler

标准化通过移除均值并缩放到单位方差来标准化特征,适用于假设数据符合高斯分布的模型。

公式

X s c a l e d = X − μ σ X_{scaled} = \frac{X - \mu}{\sigma} Xscaled=σXμ

  • μ \mu μ 是均值, σ \sigma σ 是标准差。

典型应用场景

  • 线性模型:如线性回归、逻辑回归、SVM 等,这些模型对特征的尺度敏感,标准化可以提高模型的稳定性和准确性。
  • PCA:主成分分析(PCA)通常要求数据具有零均值和单位方差,以确保不同特征具有相同的权重

示例

from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
scaled_data = scaler.fit_transform(data)

3. 绝对值最大值归一化

MaxAbsScaler

MaxAbsScaler 将每个特征缩放到 [-1, 1] 范围内,不改变数据的中心,适用于稀疏矩阵。

公式
X s c a l e d = X max ( ∣ X ∣ ) X_{scaled} = \frac{X}{\text{max}(|X|)} Xscaled=max(X)X

典型应用场景

  • 文本数据:在文本分类任务中,TF-IDF 特征经常会产生稀疏矩阵,使用 MaxAbsScaler 可以在保持稀疏性的同时进行归一化。
  • 稀疏矩阵:任何稀疏数据的处理,如用户行为数据,点击率预测等。

示例

from sklearn.preprocessing import MaxAbsScalerscaler = MaxAbsScaler()
scaled_data = scaler.fit_transform(data)

4. 鲁棒缩放

RobustScaler

RobustScaler 使用中位数和四分位数范围缩放数据,对异常值不敏感,适合包含异常值的数据集。

公式

X s c a l e d = X − Q 1 Q 3 − Q 1 X_{scaled} = \frac{X - Q1}{Q3 - Q1} Xscaled=Q3Q1XQ1

  • Q 1 Q1 Q1 Q 3 Q3 Q3 分别是第 1 和第 3 四分位数。

典型应用场景

  • 金融数据:金融时间序列数据经常包含异常值,如股票价格波动,使用 RobustScaler 可以减少异常值的影响。
  • 工业数据:在工业数据中,传感器可能会出现噪声和异常值,鲁棒缩放适合此类应用。

示例

from sklearn.preprocessing import RobustScalerscaler = RobustScaler()
scaled_data = scaler.fit_transform(data)

5. 单位范数归一化

Normalizer

Normalizer 将每个样本(而不是特征)缩放到单位范数(通常是 L2 范数为 1),常用于文本分类和聚类中的向量归一化。

公式

X s c a l e d = X ∥ X ∥ p X_{scaled} = \frac{X}{\|X\|_p} Xscaled=XpX

  • ∥ X ∥ p \|X\|_p Xp 是样本的 p 范数,通常是 L2 范数。

典型应用场景

  • 文本分类:在自然语言处理任务中,使用 Normalizer 可以将 TF-IDF 或词向量进行单位范数归一化,从而保证向量长度一致。
  • 聚类算法:如 K-means,通常要求输入数据的每个样本具有相同的尺度。

示例

from sklearn.preprocessing import Normalizernormalizer = Normalizer()
normalized_data = normalizer.fit_transform(data)

6. 二值化

Binarizer

Binarizer 将数据按阈值转换为 0 或 1,适用于将连续特征转化为二元特征的情况。

公式
X b i n a r i z e d = { 1 if  X > threshold 0 otherwise X_{binarized} = \begin{cases} 1 & \text{if } X > \text{threshold} \\ 0 & \text{otherwise} \end{cases} Xbinarized={10if X>thresholdotherwise

典型应用场景

  • 图像处理:将灰度图像转换为二值图像,用于图像识别或边缘检测。
  • 特征工程:将数值特征转化为布尔特征,如将年龄特征转化为 “是否大于 30 岁” 的二值特征。

示例

from sklearn.preprocessing import Binarizerbinarizer = Binarizer(threshold=0.5)
binarized_data = binarizer.fit_transform(data)

7. 分位数变换

QuantileTransformer

QuantileTransformer 对数据进行非线性变换,使得数据分布符合指定分布(如均匀分布或高斯分布),对异常值处理效果较好。

典型应用场景

  • 非正态分布数据:当数据不符合正态分布时,可以使用分位数变换将数据转换为近似正态分布,用于提高模型的效果。
  • 异常值处理:在异常值较多的数据集中,使用分位数变换可以降低异常值的影响。

示例

from sklearn.preprocessing import QuantileTransformerquantile_transformer = QuantileTransformer(output_distribution='normal')
transformed_data = quantile_transformer.fit_transform(data)

8. 幂变换

PowerTransformer

PowerTransformer 使用幂变换来稳定数据的方差并使其更接近正态分布,有两种方法:Yeo-Johnson 和 Box-Cox。

典型应用场景

  • 对数变换:在对数正态分布数据中,幂变换(如 Box-Cox 变换)可以将数据转换为正态分布,更适合于线性模型。
  • 数据的方差稳定:当数据的方差随着值的变化而变化时,使用幂变换可以使方差更稳定。

示例

from sklearn.preprocessing import PowerTransformerpower_transformer = PowerTransformer(method='yeo-johnson')
transformed_data = power_transformer.fit_transform(data)

9. 函数变换

FunctionTransformer

FunctionTransformer 允许自定义函数对数据进行变换,适用于非常规归一化或特定数据处理的场景。

典型应用场景

  • 自定义变换:当标准的归一化方法不适合特定的数据集时,可以使用自定义函数来执行特定的变换。
  • 特征工程:可以用于创建复杂的特征变换,如平方、开方或其他非线性变换。

示例

from sklearn.preprocessing import FunctionTransformerdef custom_transform(X):return X ** 2transformer = FunctionTransformer(custom_transform)
transformed_data = transformer.fit_transform(data)

总结

不同的归一化方法适用于不同的数据特性和模型需求。在实际应用中,选择合适的归一化方法能够有效提高模型的性能和训练速度。通过理解各类归一化方法的工作原理,您可以在机器学习项目中更好地处理数据并优化模型表现。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 二极管、电阻、电容、电感的种类及作用
  • PHP EOF(heredoc) 速成技巧
  • 如何借助前端表格控件实现软硬一体化数据管理平台
  • 深度学习速通系列:贝叶思SVM
  • spring boot 根据实体类生成表
  • 背包习题
  • CSS 中高度 100%和高度 100vh 有什么区别
  • 第二证券:静态市盈率与动态市盈率有什么区别?
  • 区块链(币圈)常用网址大全
  • STM32F411 标准库硬件SPI (硬件NSS/CS)驱动st7735--1.8寸TFT显示屏
  • 搭建自己的金融数据源和量化分析平台(八):解析PDF财报中的资产负债表
  • 深入浅出神经网络-学习小结
  • 大数据技术之Flume 企业开发案例——负载均衡和故障转移(6)
  • 行为模式6.备忘录模式------文本的撤销和保存
  • 专业的固定资产管理系统平台|一分钟带你了解它的特色功能,引领企业智能化转型!
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • canvas 高仿 Apple Watch 表盘
  • conda常用的命令
  • JavaScript 奇技淫巧
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Javascript基础之Array数组API
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • React-生命周期杂记
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • use Google search engine
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 浅谈web中前端模板引擎的使用
  • 如何胜任知名企业的商业数据分析师?
  • 使用Swoole加速Laravel(正式环境中)
  • ​力扣解法汇总946-验证栈序列
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • # linux 中使用 visudo 命令,怎么保存退出?
  • # Maven错误Error executing Maven
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (顺序)容器的好伴侣 --- 容器适配器
  • (一)Linux+Windows下安装ffmpeg
  • .NET Core跨平台微服务学习资源
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .net快速开发框架源码分享
  • .NET连接MongoDB数据库实例教程
  • .NET之C#编程:懒汉模式的终结,单例模式的正确打开方式
  • @SpringBootApplication 包含的三个注解及其含义
  • [ 数据结构 - C++]红黑树RBTree
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [ActionScript][AS3]小小笔记
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [ASP.NET MVC]Ajax与CustomErrors的尴尬
  • [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型