系列文章:
《PyTorch 基础学习》文章索引
归一化是数据预处理中的重要步骤之一,它可以将数据调整到特定的范围或分布,有助于加速训练并提高模型的性能。在机器学习中,不同的归一化方法适用于不同的场景。本文将详细介绍 scikit-learn 中的常见归一化方法及其应用。
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=Xmax−XminX−Xmin×(max−min)+min
min
和 max
是目标缩放范围的下限和上限。典型应用场景:
示例:
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data)
StandardScaler
标准化通过移除均值并缩放到单位方差来标准化特征,适用于假设数据符合高斯分布的模型。
公式:
X s c a l e d = X − μ σ X_{scaled} = \frac{X - \mu}{\sigma} Xscaled=σX−μ
典型应用场景:
示例:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)
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
典型应用场景:
示例:
from sklearn.preprocessing import MaxAbsScaler
scaler = MaxAbsScaler()
scaled_data = scaler.fit_transform(data)
RobustScaler
RobustScaler
使用中位数和四分位数范围缩放数据,对异常值不敏感,适合包含异常值的数据集。
公式:
X s c a l e d = X − Q 1 Q 3 − Q 1 X_{scaled} = \frac{X - Q1}{Q3 - Q1} Xscaled=Q3−Q1X−Q1
典型应用场景:
示例:
from sklearn.preprocessing import RobustScaler
scaler = RobustScaler()
scaled_data = scaler.fit_transform(data)
Normalizer
Normalizer 将每个样本(而不是特征)缩放到单位范数(通常是 L2 范数为 1),常用于文本分类和聚类中的向量归一化。
公式:
X s c a l e d = X ∥ X ∥ p X_{scaled} = \frac{X}{\|X\|_p} Xscaled=∥X∥pX
典型应用场景:
示例:
from sklearn.preprocessing import Normalizer
normalizer = Normalizer()
normalized_data = normalizer.fit_transform(data)
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
典型应用场景:
示例:
from sklearn.preprocessing import Binarizer
binarizer = Binarizer(threshold=0.5)
binarized_data = binarizer.fit_transform(data)
QuantileTransformer
QuantileTransformer
对数据进行非线性变换,使得数据分布符合指定分布(如均匀分布或高斯分布),对异常值处理效果较好。
典型应用场景:
示例:
from sklearn.preprocessing import QuantileTransformer
quantile_transformer = QuantileTransformer(output_distribution='normal')
transformed_data = quantile_transformer.fit_transform(data)
PowerTransformer
PowerTransformer
使用幂变换来稳定数据的方差并使其更接近正态分布,有两种方法:Yeo-Johnson 和 Box-Cox。
典型应用场景:
示例:
from sklearn.preprocessing import PowerTransformer
power_transformer = PowerTransformer(method='yeo-johnson')
transformed_data = power_transformer.fit_transform(data)
FunctionTransformer
FunctionTransformer
允许自定义函数对数据进行变换,适用于非常规归一化或特定数据处理的场景。
典型应用场景:
示例:
from sklearn.preprocessing import FunctionTransformer
def custom_transform(X):
return X ** 2
transformer = FunctionTransformer(custom_transform)
transformed_data = transformer.fit_transform(data)
不同的归一化方法适用于不同的数据特性和模型需求。在实际应用中,选择合适的归一化方法能够有效提高模型的性能和训练速度。通过理解各类归一化方法的工作原理,您可以在机器学习项目中更好地处理数据并优化模型表现。