sklearn.preprocessing.Normalizer

Normalizersklearn.preprocessing 提供的 归一化方法用于对每个样本(行)进行归一化,使其欧几里得范数(L2 范数)或其他范数为 1,适用于 文本数据或特征数值相差较大的数据


1. Normalizer 计算公式

归一化是 按行计算,而不是按列计算。

常见的归一化方法

  • L2 归一化(默认)
    X′=X∥X∥2=X∑Xi2 X' = \frac{X}{\|X\|_2} = \frac{X}{\sqrt{\sum X_i^2}} X=X2X=Xi2 X
  • L1 归一化
    X′=X∥X∥1=X∑∣Xi∣ X' = \frac{X}{\|X\|_1} = \frac{X}{\sum |X_i|} X=X1X=XiX
  • 最大值归一化(max 归一化)
    X′=X∥X∥∞=Xmax⁡∣Xi∣ X' = \frac{X}{\|X\|_{\infty}} = \frac{X}{\max |X_i|} X=XX=maxXiX

解释

  • 所有样本(行)的范数变为 1,但 特征之间的相对大小保持不变
  • 适用于文本数据、神经网络输入、KNN、SVM 等。

2. Normalizer 代码示例

(1) L2 归一化(默认)

from sklearn.preprocessing import Normalizer
import numpy as np

# 示例数据(每行代表一个样本)
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 初始化 Normalizer
normalizer = Normalizer()

# 归一化数据
X_normalized = normalizer.fit_transform(X)

print("L2 归一化后数据:\n", X_normalized)

输出

L2 归一化后数据:
[[0.26726124 0.53452248 0.80178373]
 [0.45584231 0.56980288 0.68376346]
 [0.50257071 0.57436653 0.64616234]]

解释

  • 每行的 欧几里得范数(L2 范数)变为 1
    0.2672+0.5342+0.8012=1 \sqrt{0.267^2 + 0.534^2 + 0.801^2} = 1 0.2672+0.5342+0.8012 =1

(2) L1 归一化

normalizer = Normalizer(norm="l1")
X_normalized = normalizer.fit_transform(X)

print("L1 归一化后数据:\n", X_normalized)

输出

L1 归一化后数据:
[[0.16666667 0.33333333 0.5       ]
 [0.26666667 0.33333333 0.4       ]
 [0.29166667 0.33333333 0.375     ]]

解释

  • 每行的 绝对值和(L1 范数)变为 1
    ∣0.166∣+∣0.333∣+∣0.5∣=1 |0.166| + |0.333| + |0.5| = 1 ∣0.166∣+∣0.333∣+∣0.5∣=1

(3) Max 归一化

normalizer = Normalizer(norm="max")
X_normalized = normalizer.fit_transform(X)

print("Max 归一化后数据:\n", X_normalized)

输出

Max 归一化后数据:
[[0.33333333 0.66666667 1.        ]
 [0.66666667 0.83333333 1.        ]
 [0.77777778 0.88888889 1.        ]]

解释

  • 每行的 最大值变为 1,即:
    X′=Xmax⁡(X) X' = \frac{X}{\max(X)} X=max(X)X

3. Normalizer 的参数

Normalizer(norm='l2', copy=True)
参数 说明
norm 选择归一化方法('l1', 'l2', 'max'),默认 'l2'
copy 是否复制数据(默认 True,不会修改原始数据)

4. 适用场景

  • 文本数据(如 TF-IDF 向量、词频向量)
  • KNN(K 近邻算法)
  • SVM(支持向量机)
  • 神经网络输入数据
  • 特征数值范围相差较大的情况

5. Normalizer vs. 其他数据缩放方法

方法 适用情况 计算方式
StandardScaler 适用于 正态分布数据 X′=X−μσX' = \frac{X - \mu}{\sigma}X=σXμ
MinMaxScaler 适用于 非正态分布数据 X′=X−Xmin⁡Xmax⁡−Xmin⁡X' = \frac{X - X_{\min}}{X_{\max} - X_{\min}}X=XmaxXminXXmin
RobustScaler 适用于 含异常值数据 X′=X−medianIQRX' = \frac{X - \text{median}}{IQR}X=IQRXmedian
MaxAbsScaler 适用于 稀疏数据,不会改变 0 值 X′=X∣Xmax⁡∣X' = \frac{X}{|X_{\max}|}X=XmaxX
Normalizer 适用于 KNN、SVM、神经网络、文本数据 X′=X∣X∣X' = \frac{X}{|X|}X=XX

示例:

from sklearn.preprocessing import StandardScaler, MinMaxScaler, RobustScaler

std_scaler = StandardScaler()
X_std = std_scaler.fit_transform(X)

minmax_scaler = MinMaxScaler()
X_minmax = minmax_scaler.fit_transform(X)

robust_scaler = RobustScaler()
X_robust = robust_scaler.fit_transform(X)

print("StandardScaler:\n", X_std)
print("MinMaxScaler:\n", X_minmax)
print("RobustScaler:\n", X_robust)

6. 结论

  • Normalizer 对每个样本(行)进行归一化,使其 L1/L2/最大值范数为 1,适用于 KNN、SVM、神经网络、文本数据
  • 如果数据需要 标准化(均值 0,标准差 1),可选择 StandardScaler,如果数据有异常值,可使用 RobustScaler
Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐