【scikit-learn】sklearn.preprocessing.Normalizer 类:对每个样本(行)进行归一化
Normalizer是sklearn.preprocessing提供的归一化方法,用于对每个样本(行)进行归一化,使其欧几里得范数(L2范数)或其他范数为1,适用于文本数据或特征数值相差较大的数据。适用于KNN、SVM、神经网络、文本数据。如果数据需要标准化(均值0,标准差1),可选择StandardScaler,如果数据有异常值,可使用RobustScaler。
·
sklearn.preprocessing.Normalizer
Normalizer 是 sklearn.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′=∥X∥2X=∑Xi2X - L1 归一化:
X′=X∥X∥1=X∑∣Xi∣ X' = \frac{X}{\|X\|_1} = \frac{X}{\sum |X_i|} X′=∥X∥1X=∑∣Xi∣X - 最大值归一化(max 归一化):
X′=X∥X∥∞=Xmax∣Xi∣ X' = \frac{X}{\|X\|_{\infty}} = \frac{X}{\max |X_i|} X′=∥X∥∞X=max∣Xi∣X
解释
- 所有样本(行)的范数变为 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−XminXmax−XminX' = \frac{X - X_{\min}}{X_{\max} - X_{\min}}X′=Xmax−XminX−Xmin |
RobustScaler |
适用于 含异常值数据 | X′=X−medianIQRX' = \frac{X - \text{median}}{IQR}X′=IQRX−median |
MaxAbsScaler |
适用于 稀疏数据,不会改变 0 值 | X′=X∣Xmax∣X' = \frac{X}{|X_{\max}|}X′=∣Xmax∣X |
Normalizer |
适用于 KNN、SVM、神经网络、文本数据 | X′=X∣X∣X' = \frac{X}{|X|}X′=∣X∣X |
示例:
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。
更多推荐

所有评论(0)