机器学习的一百个概念(1)单位归一化

news2025/4/1 4:54:01

前言

本文隶属于专栏《机器学习的一百个概念》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见[《机器学习的一百个概念》


ima 知识库

知识库广场搜索:

知识库创建人
机器学习@Shockang
机器学习数学基础@Shockang
深度学习@Shockang

正文

在这里插入图片描述

“数据决定模型上限,预处理拯救下限”

引言

在机器学习的宏大世界中,数据预处理是一门不可或缺的艺术 🎨。在各种预处理技术中,归一化(Normalization)作为基础却又至关重要的一步,往往决定着模型性能的上限。本文将深入探讨单位归一化这一核心概念,特别是L2归一化,帮助你全面理解它的原理、应用场景以及与其他归一化方法的区别。

无论你是机器学习初学者寻求基础知识的巩固,还是经验丰富的实践者希望查漏补缺,本文都将为你提供系统而深入的理解。让我们一起揭开单位归一化的神秘面纱,看它如何在无形中提升模型性能!💪

数据预处理的重要性

在深入单位归一化之前,我们先要理解为什么数据预处理如此重要 ⚠️。

为什么需要数据预处理?

机器学习算法本质上是数学模型,它们对输入数据的质量和特性极为敏感。未经处理的原始数据通常存在以下问题:

  • 特征尺度不一致 📏:某些特征可能是千米级别,而其他特征可能是厘米级别
  • 分布不均 📊:数据可能高度倾斜或呈现异常分布
  • 噪声和异常值 🔊:原始数据中的错误和极端值会误导模型
  • 高维稀疏性 🌌:高维特征空间中的数据点通常非常稀疏

这些问题会导致:

  1. 梯度下降收敛缓慢
  2. 距离计算被大值特征主导
  3. 正则化项效果不一
  4. 某些算法(如KNN、SVM)性能严重下降

预处理的基本流程

在这里插入图片描述

在这个流程中,归一化是数据变换的重要一环,它直接影响后续模型的训练效果。

归一化的基本概念

什么是归一化?

归一化(Normalization)是将数据按比例缩放,使之落入一个小的特定区间的过程。这个过程通常用于特征工程中的数据预处理阶段。🔄

归一化的主要目标是:

  • 消除数据特征之间的量纲影响
  • 使不同度量衡标准下的数据可比较
  • 加速模型训练中的梯度收敛
  • 提高模型的鲁棒性

归一化与标准化的区别

虽然归一化(Normalization)和标准化(Standardization)在中文语境中有时会被混用,但它们在机器学习中是两个不同的概念:

方法目标常见实现结果特征
归一化缩放到特定区间Min-Max缩放、单位范数归一化范围固定
标准化服从标准正态分布Z-Score标准化均值0,标准差1

🔍 认识误区:在某些英文文献中,"Normalization"一词有时被宽泛地用于指代各种数据缩放方法,这可能导致混淆。在本文中,我们采用更为严格的定义,将归一化特指将数据缩放到特定范围的方法。

单位范数归一化详解

范数的概念

在进入单位范数归一化之前,我们需要先了解什么是范数 📏。

范数(Norm)是一种为向量空间内的所有向量赋予"长度"的函数。在机器学习中,我们常用的范数包括:

  • L0范数:向量中非零元素的个数(严格来说不是范数,因为不满足范数的三角不等式)
  • L1范数:向量中各元素绝对值之和,也称为曼哈顿距离(Manhattan Distance)
  • L2范数:向量中各元素的平方和开平方,也称为欧氏长度(Euclidean Length)
  • Lp范数:向量中各元素的p次方和的1/p次方
  • L∞范数:向量中绝对值最大的元素

数学表示如下:

  • L1范数: ∥ x ∥ 1 = ∑ i = 1 n ∣ x i ∣ \|x\|_1 = \sum_{i=1}^{n} |x_i| x1=i=1nxi
  • L2范数: ∥ x ∥ 2 = ∑ i = 1 n x i 2 \|x\|_2 = \sqrt{\sum_{i=1}^{n} x_i^2} x2=i=1nxi2
  • Lp范数: ∥ x ∥ p = ( ∑ i = 1 n ∣ x i ∣ p ) 1 / p \|x\|_p = \left(\sum_{i=1}^{n} |x_i|^p\right)^{1/p} xp=(i=1nxip)1/p
  • L∞范数: ∥ x ∥ ∞ = max ⁡ i ∣ x i ∣ \|x\|_{\infty} = \max_i |x_i| x=maxixi

单位范数归一化的定义

单位范数归一化是将向量缩放到单位长度(范数等于1)的过程。根据使用的范数类型不同,又可以分为L1归一化、L2归一化等。

单位范数归一化的核心目标是使每个样本的向量总长度为1。这通过将样本中的每个特征值除以该样本的某个范数来实现。

L1范数归一化

将向量除以其L1范数,使得向量各元素的绝对值之和等于1:

x ′ = x ∥ x ∥ 1 = x ∑ i = 1 n ∣ x i ∣ \mathbf{x}' = \frac{\mathbf{x}}{\|\mathbf{x}\|_1} = \frac{\mathbf{x}}{\sum_{i=1}^{n} |x_i|} x=x1x=i=1nxix

L1归一化后,所有特征值的绝对值和为1,也称为"曼哈顿归一化"。

L2范数归一化

将向量除以其L2范数,使得向量的欧氏长度等于1:

x ′ = x ∥ x ∥ 2 = x ∑ i = 1 n x i 2 \mathbf{x}' = \frac{\mathbf{x}}{\|\mathbf{x}\|_2} = \frac{\mathbf{x}}{\sqrt{\sum_{i=1}^{n} x_i^2}} x=x2x=i=1nxi2 x

L2归一化后的向量位于单位超球面上,也称为"向量归一化"或"单位向量化"。

单位归一化的几何解释

🌍 从几何角度看:

  • L1归一化:将数据点投影到L1单位球面上,即各坐标轴投影之和等于1的表面
  • L2归一化:将数据点投影到单位圆(二维)或单位球面(三维)或单位超球面(高维)上

在这里插入图片描述

常见实现方式

在Python中,我们可以通过以下方式实现单位范数归一化:

# 使用NumPy手动实现
def l1_normalize(x):
    return x / np.sum(np.abs(x), axis=1, keepdims=True)

def l2_normalize(x):
    return x / np.sqrt(np.sum(np.square(x), axis=1, keepdims=True))

# 使用Scikit-learn
from sklearn.preprocessing import normalize

# L1范数归一化
X_normalized_l1 = normalize(X, norm='l1')

# L2范数归一化(单位欧氏长度)
X_normalized_l2 = normalize(X, norm='l2')

L2归一化的数学原理

L2归一化的计算过程

L2归一化是最常用的单位范数归一化方法,其计算过程可分为以下步骤:

  1. 计算向量的L2范数(欧氏长度)
  2. 将向量的每个元素除以该范数

对于每个样本向量 (\mathbf{x} = (x_1, x_2, …, x_n)),其L2归一化后为:

x ′ = x ∥ x ∥ 2 = x x 1 2 + x 2 2 + . . . + x n 2 \mathbf{x}' = \frac{\mathbf{x}}{\|\mathbf{x}\|_2} = \frac{\mathbf{x}}{\sqrt{x_1^2 + x_2^2 + ... + x_n^2}} x=x2x=x12+x22+...+xn2 x

示例说明

假设我们有一个二维向量 ([3, 4]):

  1. 计算L2范数:(\sqrt{3^2 + 4^2} = \sqrt{9 + 16} = \sqrt{25} = 5)
  2. 归一化向量:([3/5, 4/5] = [0.6, 0.8])

归一化后的向量长度为:(\sqrt{0.6^2 + 0.8^2} = \sqrt{0.36 + 0.64} = \sqrt{1} = 1)

向量方向保持不变,但长度变为1。这也是为什么L2归一化适合用于只关心方向不关心大小的应用场景。

L2归一化与余弦相似度的关系

L2归一化与余弦相似度有着密切的关系。两个向量的余弦相似度定义为:

cosine ( a , b ) = a ⋅ b ∥ a ∥ 2 ∥ b ∥ 2 \text{cosine}(\mathbf{a}, \mathbf{b}) = \frac{\mathbf{a} \cdot \mathbf{b}}{\|\mathbf{a}\|_2 \|\mathbf{b}\|_2} cosine(a,b)=a2b2ab

如果向量 (\mathbf{a}) 和 (\mathbf{b}) 已经通过L2范数归一化,则余弦相似度简化为它们的点积:

cosine ( a ′ , b ′ ) = a ′ ⋅ b ′ \text{cosine}(\mathbf{a}', \mathbf{b}') = \mathbf{a}' \cdot \mathbf{b}' cosine(a,b)=ab

这就是为什么在计算文本相似度、推荐系统等应用中,常常先对特征向量进行L2归一化,然后直接计算点积作为相似度度量。

其他常见的归一化方法

除了单位范数归一化,还有其他几种常见的归一化方法,它们各有特点和适用场景。

Min-Max缩放(Min-Max Scaling)

将特征值线性变换到指定区间(通常是[0,1]或[-1,1]):

x ′ = x − min ⁡ ( x ) max ⁡ ( x ) − min ⁡ ( x ) x' = \frac{x - \min(x)}{\max(x) - \min(x)} x=max(x)min(x)xmin(x)

适用于:

  • 知道特征的确切边界时
  • 需要在固定区间内缩放数据时(如图像处理中的像素值)
  • 当特征的分布不是高斯分布时

Z-Score标准化(Standardization)

将特征转换为均值为0、标准差为1的分布:

x ′ = x − μ σ x' = \frac{x - \mu}{\sigma} x=σxμ

适用于:

  • 不知道特征分布的最大最小值时
  • 特征近似呈正态分布时
  • 线性回归、逻辑回归等假设特征服从正态分布的算法

最大绝对值缩放(MaxAbs Scaling)

按照最大绝对值缩放,使得最大绝对值为1:

x ′ = x max ⁡ ( ∣ x ∣ ) x' = \frac{x}{\max(|x|)} x=max(x)x

适用于:

  • 稀疏数据
  • 数据中含有0值具有实际意义的场景

稳健缩放(Robust Scaling)

基于百分位数的缩放方法,对异常值不敏感:

x ′ = x − Q 2 Q 3 − Q 1 x' = \frac{x - Q_2}{Q_3 - Q_1} x=Q3Q1xQ2

其中 (Q_1)、(Q_2) 和 (Q_3) 分别是第一四分位数(25%)、中位数(50%)和第三四分位数(75%)。

适用于:

  • 数据包含大量异常值或极端值时
  • 特征分布高度偏斜时

归一化方法的选择流程

在这里插入图片描述

各种归一化方法的比较

不同归一化方法的对比

方法公式结果特征保持原始分布对异常值敏感适用场景
Min-Max缩放(\frac{x - \min}{\max - \min})范围固定[0,1]图像处理、神经网络
Z-Score标准化(\frac{x - \mu}{\sigma})均值0,标准差1线性回归、PCA
L1归一化(\frac{x}{|x|_1})L1范数为1不太敏感稀疏特征、正则化
L2归一化(\frac{x}{|x|_2})L2范数为1相对敏感文本分类、余弦相似度
稳健缩放(\frac{x - Q_2}{Q_3 - Q_1})中位数0,四分位差1含异常值的数据

归一化的影响因素

选择合适的归一化方法时,需要考虑以下因素:

  1. 数据分布:正态分布适合Z-Score,均匀分布适合Min-Max
  2. 异常值:有异常值时避免Min-Max,可选稳健缩放
  3. 算法要求:不同算法对输入数据的要求不同(如SVM偏好标准化数据)
  4. 特征工程目标:方向重要时选L2归一化,比例重要时选其他方法
  5. 计算复杂度:在大数据场景中,可能需要考虑归一化的计算开销

实践案例

让我们通过几个实际案例来理解不同归一化方法的效果。

案例1:特征尺度不一致的数据

假设我们有一个数据集,包含"年龄"(范围20-80)和"年收入"(范围20000-200000)两个特征。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler, StandardScaler, Normalizer

# 创建示例数据
np.random.seed(42)
age = np.random.randint(20, 80, 100)
income = np.random.randint(20000, 200000, 100)
X = np.column_stack((age, income))

# 各种归一化方法
min_max_scaler = MinMaxScaler()
standard_scaler = StandardScaler()
l2_normalizer = Normalizer(norm='l2')

X_minmax = min_max_scaler.fit_transform(X)
X_standard = standard_scaler.fit_transform(X)
X_l2norm = l2_normalizer.fit_transform(X)

# 可视化比较
fig, axes = plt.subplots(2, 2, figsize=(12, 10))

# 原始数据
axes[0, 0].scatter(X[:, 0], X[:, 1])
axes[0, 0].set_title('原始数据')
axes[0, 0].set_xlabel('年龄')
axes[0, 0].set_ylabel('年收入')

# MinMax缩放
axes[0, 1].scatter(X_minmax[:, 0], X_minmax[:, 1])
axes[0, 1].set_title('MinMax缩放')
axes[0, 1].set_xlabel('归一化后的年龄')
axes[0, 1].set_ylabel('归一化后的年收入')

# 标准化
axes[1, 0].scatter(X_standard[:, 0], X_standard[:, 1])
axes[1, 0].set_title('Z-Score标准化')
axes[1, 0].set_xlabel('标准化后的年龄')
axes[1, 0].set_ylabel('标准化后的年收入')

# L2归一化
axes[1, 1].scatter(X_l2norm[:, 0], X_l2norm[:, 1])
axes[1, 1].set_title('L2归一化')
axes[1, 1].set_xlabel('L2归一化后的年龄')
axes[1, 1].set_ylabel('L2归一化后的年收入')

plt.tight_layout()
plt.show()

观察结果,我们会发现:

  • 原始数据中,收入的数值远大于年龄,导致两者在图上分布极不均衡
  • MinMax缩放后,两个特征都被压缩到[0,1]区间,但点的分布模式不变
  • Z-Score标准化后,两个特征的分布都集中在原点附近,且分布更均衡
  • L2归一化后,所有点都被投影到单位圆上,形成一个弧形分布

案例2:文本向量的余弦相似度计算

在NLP任务中,L2归一化经常用于计算文档向量的相似度:

from sklearn.feature_extraction.text import TfidfVectorizer

# 示例文档
documents = [
    "机器学习是人工智能的一个子领域",
    "深度学习是机器学习的一种方法",
    "自然语言处理是人工智能的应用",
    "计算机视觉研究图像识别技术"
]

# 使用TF-IDF向量化
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(documents)

# 计算余弦相似度矩阵(方法1:手动计算)
from sklearn.metrics.pairwise import cosine_similarity
similarity_matrix = cosine_similarity(X)

print("文档余弦相似度矩阵:")
print(np.round(similarity_matrix, 2))

# 直接使用L2归一化,然后计算点积
from sklearn.preprocessing import normalize
X_normalized = normalize(X, norm='l2')
dot_product_matrix = X_normalized.dot(X_normalized.T).toarray()

print("\n归一化后的点积矩阵(应该与余弦相似度相同):")
print(np.round(dot_product_matrix, 2))

输出结果会显示两种计算方法得到的相似度矩阵是一致的,证明了L2归一化与余弦相似度的关系。

在不同模型中的应用

不同的机器学习算法对特征缩放有不同的敏感度。下面我们来看看单位归一化等方法在不同模型中的应用。

1. 基于距离的算法 📏

**K最近邻(KNN)K均值聚类(K-Means)**等基于距离的算法对特征尺度非常敏感:

  • 为什么需要归一化:避免大尺度特征主导距离计算
  • 推荐方法:MinMax缩放或Z-Score标准化
  • 实践建议
    • KNN中,如果特征具有明确的物理意义和边界,优先使用MinMax缩放
    • 如果数据分布接近正态,Z-Score标准化通常效果更好
    • 对于衡量方向相似性的场景(如文本相似度),L2归一化效果好

2. 线性模型 📈

线性回归逻辑回归SVM等线性模型在特征尺度不一致时性能会受到影响:

  • 为什么需要归一化:使各特征对模型的贡献均衡,加速收敛
  • 推荐方法:Z-Score标准化
  • 实践建议
    • 带有正则化的线性模型(如Ridge、Lasso)更需要特征缩放
    • 对于带有L1正则的模型,有时L2归一化可以与其良好配合

3. 树模型 🌲

决策树随机森林梯度提升树等树模型对特征缩放不敏感:

  • 为什么:树模型基于特征的排序或分割,而非原始值
  • 推荐方法:通常不需要归一化
  • 实践建议
    • 尽管不需要归一化,但异常值处理仍然重要
    • 如果与其他需要归一化的算法一起使用,仍可应用归一化

4. 神经网络 🧠

深度学习模型对输入数据的尺度非常敏感:

  • 为什么需要归一化:加速收敛,避免梯度爆炸或消失
  • 推荐方法:MinMax缩放(到[0,1]或[-1,1])或Z-Score标准化
  • 实践建议
    • 卷积神经网络(CNN)通常使用MinMax缩放将像素值归一化到[0,1]
    • 循环神经网络(RNN)通常使用Z-Score标准化
    • 对于文本嵌入向量,L2归一化有助于稳定训练过程

5. 主成分分析(PCA) 🔍

PCA作为降维技术,对特征缩放非常敏感:

  • 为什么需要归一化:避免大方差特征主导主成分
  • 推荐方法:Z-Score标准化
  • 实践建议
    • PCA几乎总是需要标准化预处理
    • 在某些应用中,使用带有L2归一化的PCA可以获得方向主成分

常见陷阱和注意事项

在应用归一化方法时,需要注意一些常见的陷阱:

1. 训练集和测试集的一致性 ⚖️

错误做法:对训练集和测试集分别进行归一化

正确做法:使用训练集的参数(如最小值、最大值、均值、标准差)来转换测试集

# 正确的归一化流程
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)  # 拟合并转换训练集
X_test_scaled = scaler.transform(X_test)  # 仅转换测试集,不拟合

2. 归一化的顺序 🔄

错误做法:先分割数据集,再对训练集和测试集分别归一化

正确做法:先归一化整个数据集,再进行分割,或者先分割后用训练集的参数归一化测试集

为什么这很重要?因为在实际应用中,模型部署后接收的新数据需要使用与训练数据相同的参数进行归一化,以确保预测的一致性。

3. 特征选择与归一化的关系 🔎

错误做法:先进行归一化,再进行特征选择

正确做法:根据算法特点决定顺序

  • 对于受特征尺度影响的特征选择方法(如基于L1、L2正则化的方法),应先归一化再选择特征
  • 对于不受特征尺度影响的方法(如基于信息增益的方法),顺序影响较小

在这里插入图片描述

4. 过度依赖单一归一化方法 🚫

错误做法:不考虑数据特点,固定使用某一种归一化方法

正确做法:根据数据分布特点和模型需求选择合适的归一化方法,必要时进行对比实验

5. 处理稀疏特征 📊

错误做法:对稀疏矩阵(如文本的TF-IDF表示)应用标准的MinMax或Z-Score

正确做法

  • 对于稀疏数据,优先考虑L1或L2归一化
  • 或使用MaxAbs缩放以保持稀疏性
  • 避免使用会破坏稀疏结构的方法(如Z-Score)
# 处理稀疏矩阵的正确方式
from sklearn.preprocessing import MaxAbsScaler, normalize
from scipy.sparse import csr_matrix

# 假设X_sparse是一个稀疏矩阵
X_sparse = csr_matrix(X_sparse)

# 方法1:MaxAbsScaler保持稀疏性
scaler = MaxAbsScaler()
X_scaled = scaler.fit_transform(X_sparse)  # 结果仍是稀疏矩阵

# 方法2:L2归一化
X_normalized = normalize(X_sparse, norm='l2')  # 结果仍是稀疏矩阵

6. 避免数据泄露 🔒

错误做法:在交叉验证前对整个数据集进行归一化

正确做法:将归一化步骤包含在交叉验证的管道中,确保每个fold的训练集和验证集分别处理

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression

# 正确的方法:在管道中包含归一化步骤
pipe = Pipeline([
    ('scaler', StandardScaler()),
    ('classifier', LogisticRegression())
])

# 交叉验证会在每个fold中正确应用归一化
scores = cross_val_score(pipe, X, y, cv=5)

高级应用

随着机器学习的不断发展,单位归一化在一些高级应用场景中发挥着重要作用。

1. 深度学习中的批归一化(Batch Normalization) 🧠

批归一化是深度神经网络中的一项重要技术,它在每个mini-batch上进行归一化:

# PyTorch中的批归一化示例
import torch.nn as nn

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(784, 100)
        self.bn1 = nn.BatchNorm1d(100)  # 批归一化层
        self.fc2 = nn.Linear(100, 10)
        
    def forward(self, x):
        x = self.fc1(x)
        x = self.bn1(x)  # 应用批归一化
        x = F.relu(x)
        x = self.fc2(x)
        return x

批归一化与传统的数据预处理归一化的区别:

  • 批归一化是网络结构的一部分,在训练过程中动态进行
  • 对每个mini-batch内的数据进行归一化,而不是整个数据集
  • 包含可学习的缩放和偏移参数,可以恢复原始分布的表达能力

2. 词嵌入中的归一化 📝

在自然语言处理中,对词嵌入向量进行L2归一化是一种常见的实践:

# 对Word2Vec嵌入向量进行L2归一化
from sklearn.preprocessing import normalize
import gensim

# 加载预训练的词向量模型
model = gensim.models.KeyedVectors.load_word2vec_format('word2vec.bin', binary=True)

# 提取词向量矩阵
word_vectors = model.vectors

# L2归一化
normalized_vectors = normalize(word_vectors, norm='l2')

归一化词向量的好处:

  • 使余弦相似度计算更简单(仅需点积)
  • 减少高频词的向量长度偏大的现象
  • 改善在下游任务中的表现

3. 对比学习中的特征归一化 🔄

对比学习是自监督学习的重要方法,其中特征归一化至关重要:

# SimCLR等对比学习框架中的特征归一化(PyTorch示例)
def normalized_features(features):
    features_norm = torch.norm(features, p=2, dim=1, keepdim=True)
    features_normalized = features.div(features_norm)
    return features_normalized
    
# 计算对比损失
def contrastive_loss(features):
    features = normalized_features(features)  # L2归一化
    # 计算相似度矩阵
    sim_matrix = torch.mm(features, features.t())
    # 后续损失计算...

在对比学习中,L2归一化有以下作用:

  • 将所有特征向量投影到单位超球面上,使余弦相似度成为有效的相似性度量
  • 防止模型通过简单地增大特征范数来减小损失
  • 提高对比学习的稳定性和效果

4. 图神经网络中的特征归一化 🕸️

在图神经网络(GNN)中,节点特征的归一化对模型性能有显著影响:

# PyTorch Geometric中的特征归一化
import torch_geometric.nn as nn
from torch_geometric.nn import GCNConv
from torch_geometric.utils import normalize_features

# 归一化节点特征
x_normalized = normalize_features(x)  # 默认应用L2归一化

# 在GNN中使用归一化特征
class GCN(torch.nn.Module):
    def __init__(self):
        super(GCN, self).__init__()
        self.conv1 = GCNConv(num_features, 16)
        self.conv2 = GCNConv(16, num_classes)
        
    def forward(self, x, edge_index):
        # x已经过归一化
        x = self.conv1(x, edge_index)
        x = F.relu(x)
        x = F.dropout(x, training=self.training)
        x = self.conv2(x, edge_index)
        return F.log_softmax(x, dim=1)

图神经网络中特征归一化的好处:

  • 平衡不同节点的特征影响
  • 改善消息传递机制的效果
  • 加快模型收敛速度

总结与最佳实践

单位归一化的核心要点 🌟

经过全文的讨论,我们可以总结出关于单位归一化的几个核心要点:

  1. 单位归一化是一种重要的数据预处理方法,将向量缩放到单位长度(范数为1)
  2. L2归一化是最常用的单位范数归一化方式,特别适用于方向比大小更重要的场景
  3. 不同的归一化方法各有优缺点,需要根据数据特点和模型需求进行选择
  4. 正确应用归一化可以显著提升模型性能,加速收敛并提高稳定性

最佳实践建议 ✅

针对不同场景,以下是一些实用的最佳实践建议:

  1. 了解你的数据:在选择归一化方法前,先分析数据分布、特征尺度和异常值情况
  2. 考虑算法需求:不同算法对数据缩放的敏感度不同,选择适合的归一化方法
  3. 保持一致性:确保训练集和测试集使用相同的归一化参数
  4. 使用管道:将归一化步骤集成到机器学习管道中,避免数据泄露
  5. 进行对比实验:在关键应用中,对比不同归一化方法的效果
  6. 关注稀疏数据:对于稀疏矩阵,选择能保持稀疏性的归一化方法
  7. 注意时序数据:对于时间序列数据,可能需要特殊处理(如滑动窗口归一化)

归一化方法选择指南 📋

特征情况建议的归一化方法不推荐的方法
正态分布特征Z-Score标准化Min-Max缩放
非正态分布特征Min-Max缩放, L2归一化Z-Score标准化
存在异常值稳健缩放, 分位数变换Min-Max缩放
稀疏特征L1/L2归一化, MaxAbs缩放Z-Score标准化
方向重要性大于大小L2归一化Min-Max缩放
需要保持正负号Z-Score标准化, MaxAbs缩放绝对值归一化

结语 🔚

单位归一化,特别是L2归一化,是机器学习中一项看似简单但作用深远的技术。掌握它不仅能帮助你更好地预处理数据,还能让你更深入地理解算法背后的数学原理。

在实践中,归一化并非一成不变的固定步骤,而是需要根据具体问题灵活选择的工具。通过本文的学习,希望你能够在面对不同的机器学习任务时,根据数据特点和模型需求,选择最合适的归一化方法,从而构建出更加高效、稳定的模型。

记住,在机器学习中,数据预处理往往与模型选择同等重要,甚至更为关键。正如古老的计算机谚语所说:“垃圾进,垃圾出”(Garbage In, Garbage Out)。良好的数据归一化是迈向成功模型的第一步。

希望这篇文章能够帮助你在《机器学习的一百个概念》系列中更好地理解单位归一化这一重要概念。下一篇文章中,我们将继续探索机器学习中的其他关键概念,敬请期待!🚀

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

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

相关文章

SpringCould微服务架构之Docker(5)

Docker的基本操作: 镜像相关命令: 1.镜像名称一般分两部分组成:[repository]:[tag]。 2. 在没有指定tag时,默认是latest,代表着最新版本的镜像。 镜像命令的案例: 镜像操作常用的命令: dock…

SpringAI与JBoltAI深度对比:从工具集到企业级AI开发范式的跃迁

一、Java生态下大模型开发的困境与需求 技术公司的能力断层 多数企业缺乏将Java与大模型结合的标准开发范式,停留在碎片化工具使用阶段。 大模型应用需要全生命周期管理能力,而不仅仅是API调用。 工具集的局限性 SpringAI作为工具集的定位&#xff1…

Python中multiprocessing的使用详解

1.实现多进程 代码实现: from multiprocessing import Process import datetime import timedef task01(name):current_timedatetime.datetime.now()start_timecurrent_time.strftime(%Y-%m-%d %H:%M:%S). "{:03d}".format(current_time.microsecond //…

强化学习与神经网络结合(以 DQN 展开)

目录 基于 PyTorch 实现简单 DQN double DQN dueling DQN Noisy DQN:通过噪声层实现探索,替代 ε- 贪心策略 Rainbow_DQN如何计算连续型的Actions 强化学习中,智能体(Agent)通过与环境交互学习最优策略。当状态空间或动…

飞书电子表格自建应用

背景 coze官方的插件不支持更多的飞书电子表格操作,因为需要自建应用 飞书创建文件夹 创建应用 开发者后台 - 飞书开放平台 添加机器人 添加权限 创建群 添加刚刚创建的机器人到群里 文件夹邀请群 创建好后,就可以拿到id和key 参考教程: 创…

深度学习四大核心架构:神经网络(NN)、卷积神经网络(CNN)、循环神经网络(RNN)与Transformer全概述

目录 📂 深度学习四大核心架构 🌰 知识点概述 🧠 核心区别对比表 ⚡ 生活化案例理解 🔑 选型指南 📂 深度学习四大核心架构 第一篇: 神经网络基础(NN) 🌰 知识点概述…

MCP Server 实现一个 天气查询

​ Step1. 环境配置 安装 uv curl -LsSf https://astral.sh/uv/install.sh | shQuestion: 什么是 uv 呢和 conda 比有什么区别? Answer: 一个用 Rust 编写的超快速 (100x) Python 包管理器和环境管理工具,由 Astral 开发。定位为 pip 和 venv 的替代品…

Headless Chrome 优化:减少内存占用与提速技巧

在当今数据驱动的时代,爬虫技术在各行各业扮演着重要角色。传统的爬虫方法往往因为界面渲染和资源消耗过高而无法满足大规模数据采集的需求。本文将深度剖析 Headless Chrome 的优化方案,重点探讨如何利用代理 IP、Cookie 和 User-Agent 设置实现内存占用…

知识就是力量——HELLO GAME WORD!

你好!游戏世界! 简介环境配置前期准备好文章介绍创建头像小功能组件安装本地中文字库HSV颜色空间音频生成空白的音频 游戏UI开发加载动画注册登录界面UI界面第一版第二版 第一个游戏(贪吃蛇)第二个游戏(俄罗斯方块&…

电脑连不上手机热点会出现的小bug

一、问题展示 注意: 不要打开 隐藏热点 否则他就会在电脑上 找不到自己的热点 二、解决办法 把隐藏热点打开即可

JAVA反序列化深入学习(八):CommonsCollections6

与CC5相似: 在 CC5 中使用了 TiedMapEntry#toString 来触发 LazyMap#get在 CC6 中是通过 TiedMapEntry#hashCode 来触发 LazyMap#get 之前看到了 hashcode 方法也会调用 getValue() 方法然后调用到其中 map 的 get 方法触发 LazyMap,那重点就在于如何在反…

鸿蒙项目源码-外卖点餐-原创!原创!原创!

鸿蒙外卖点餐外卖平台项目源码含文档包运行成功ArkTS语言。 我半个月写的原创作品,请尊重原创。 原创作品,盗版必究!!! 原创作品,盗版必究!!! 原创作品,盗版…

React程序打包与部署

===================== 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 为生产环境准备React应用最小化和打包环境变量错误处理部署到托管服务部署到Netlify探索高级主题:Hooks、Su…

Leetcode算法方法总结

1. 双指针法解决链表/数组题目 只要数组有序,就要想到双指针做法。还有二分法 回文串一般也会用到双指针,回文串的长度由于可能是奇数也可能是偶数,所以在寻找时,既需要寻找奇数长度的回文串,也需要寻找偶数长度的回文…

全包圆玛奇朵样板间亮相,极简咖啡风引领家装新潮流

在追求品质生活的当下,家居装修风格的选择成为了许多消费者关注的焦点。近日,全包圆家居装饰有限公司精心打造的玛奇朵样板间正式对外开放,以其独特的咖啡色系极简风格,为家装市场带来了一股清新的潮流。玛奇朵样板间不仅展示了全…

大数据学习(92)-spark详解

🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…

免费下载 | 2025年网络安全报告

报告总结了2024年的网络安全态势,并对2025年的安全趋势进行了预测和分析。报告涵盖了勒索软件、信息窃取软件、云安全、物联网设备安全等多个领域的安全事件和趋势,并提供了安全建议和最佳实践。 一、报告背景与目的 主题:2024企业信息安全峰…

RCE--解法

目录 一、利用php伪协议 1.代码分析 2.过程 3.结果 ​编辑 4.防御手段 二、RCE(php中点的构造&#xff09; 1.代码分析 2.过程 一、利用php伪协议 <?php error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/flag|system|php|cat|sort…

JAVA反序列化深入学习(九):CommonsCollections7与CC链总结

CC7 依旧是寻找 LazyMap 的触发点 CC6使用了 HashSet而CC6使用了 Hashtable JAVA环境 java version "1.8.0_74" Java(TM) SE Runtime Environment (build 1.8.0_74-b02) Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode) 依赖版本 Apache Commons …