Python脚本数据归一化有哪些方法

wen 实用脚本 1

本文目录导读:

Python脚本数据归一化有哪些方法

  1. Min-Max 归一化(最值归一化)
  2. Z-Score 归一化(标准化)
  3. 最大绝对值归一化
  4. 单位向量归一化(L2归一化)
  5. 稳健归一化(Robust Scaler)
  6. Decimal Scaling 归一化
  7. 选择建议
  8. 完整示例

在Python中,数据归一化(Normalization)主要有以下几种常用方法,每种方法适用于不同的场景:

Min-Max 归一化(最值归一化)

将数据缩放到 [0, 1] 区间(或指定区间)。

import numpy as np
from sklearn.preprocessing import MinMaxScaler
# 原始数据
data = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
# 方法1:使用 scikit-learn
scaler = MinMaxScaler(feature_range=(0, 1))  # 可指定区间
normalized_data = scaler.fit_transform(data)
# 方法2:手动实现
def min_max_normalize(x):
    return (x - np.min(x)) / (np.max(x) - np.min(x))

公式: ( X{norm} = \frac{X - X{min}}{X{max} - X{min}} )

Z-Score 归一化(标准化)

将数据转换为均值为0,标准差为1的分布。

from sklearn.preprocessing import StandardScaler
# 使用 scikit-learn
scaler = StandardScaler()
standardized_data = scaler.fit_transform(data)
# 手动实现
def z_score_normalize(x):
    return (x - np.mean(x)) / np.std(x)

公式: ( X_{norm} = \frac{X - \mu}{\sigma} )

最大绝对值归一化

将数据缩放到 [-1, 1] 区间,保留数据的稀疏性。

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

公式: ( X_{norm} = \frac{X}{max(|X|)} )

单位向量归一化(L2归一化)

将每个样本转换为单位向量(长度为1)。

from sklearn.preprocessing import Normalizer
# L2归一化(默认)
scaler = Normalizer(norm='l2')
normalized_data = scaler.fit_transform(data)
# L1归一化
scaler_l1 = Normalizer(norm='l1')

公式: ( X_{norm} = \frac{X}{||X||} )

稳健归一化(Robust Scaler)

使用中位数和四分位数范围,对异常值更稳健。

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

公式: ( X_{norm} = \frac{X - median}{IQR} )

Decimal Scaling 归一化

通过移动小数点位置进行归一化。

def decimal_scaling(x):
    max_val = np.max(np.abs(x))
    j = np.ceil(np.log10(max_val))
    return x / (10 ** j)

选择建议

方法 适用场景 注意事项
Min-Max 需要固定范围,数据分布已知 对异常值敏感
Z-Score 数据近似正态分布 不保证特定范围
MaxAbs 稀疏数据 保留零值
单位向量 需要特征方向而非大小 改变数据分布
Robust 数据含有异常值 计算成本较高

完整示例

import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler
# 生成示例数据
np.random.seed(42)
data = pd.DataFrame({
    'feature1': np.random.randn(100),
    'feature2': np.random.randn(100) * 10,
    'feature3': np.random.randn(100) * 100
})
# 多种归一化方法对比
scalers = {
    'Min-Max': MinMaxScaler(),
    'Z-Score': StandardScaler(),
    'Robust': RobustScaler()
}
normalized_data = {}
for name, scaler in scalers.items():
    normalized_data[name] = pd.DataFrame(
        scaler.fit_transform(data),
        columns=data.columns
    )

在实际应用中,需要根据数据的特性和后续模型的要求选择合适的归一化方法。

抱歉,评论功能暂时关闭!