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 MinMaxScaler

scaler = 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 StandardScaler

scaler = 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 MaxAbsScaler

scaler = 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 RobustScaler

scaler = 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 Normalizer

normalizer = 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 Binarizer

binarizer = Binarizer(threshold=0.5)
binarized_data = binarizer.fit_transform(data)

7. 分位数变换

QuantileTransformer

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

典型应用场景

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

示例

from sklearn.preprocessing import QuantileTransformer

quantile_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 PowerTransformer

power_transformer = PowerTransformer(method='yeo-johnson')
transformed_data = power_transformer.fit_transform(data)

9. 函数变换

FunctionTransformer

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

典型应用场景

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

示例

from sklearn.preprocessing import FunctionTransformer

def custom_transform(X):
    return X ** 2

transformer = FunctionTransformer(custom_transform)
transformed_data = transformer.fit_transform(data)

总结

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

  • 14
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值