趋近智
为您的数值特征选择合适的缩放或转换方法是特征工程流程中的一个重要环节。正如我们所见,不同的方法应对不同的问题,例如量纲不同、分布偏斜或存在异常值。没有唯一的“最佳”方法;最优选择很大程度上取决于您的数据特点以及您打算使用的机器学习算法的要求。让我们分析一下需要考虑的因素。
缩放的主要原因通常是算法本身。
敏感算法: 许多算法对输入特征的量纲敏感。
StandardScaler) 或归一化 (MinMaxScaler) 在此处通常是不错的选择。如果异常值很明显,通常优选鲁棒缩放 (RobustScaler),因为它使用的统计量对极端值(中位数和四分位距)不那么敏感。不那么敏感的算法:
缩放和转换旨在重塑特征的分布,这对于某些模型或分析有益。
处理偏斜: 线性模型(如线性/逻辑回归)在输入特征(以及回归中的目标变量)的分布更接近高斯(正态)时通常表现更好。高度偏斜的特征可能违反线性度和同方差性(误差方差恒定)的假设。
np.log 或 np.log1p,用于包含零值的数据)是减少偏斜的简单且通常有效的方法。scipy.stats.boxcox 或 PowerTransformer(method='box-cox')),但这要求数据必须严格为正。PowerTransformer(method='yeo-johnson')) 更灵活,因为它支持正值、零值和负值,也旨在使分布更对称、更接近高斯。非参数转换: 如果您希望数据服从特定分布,例如均匀分布或正态分布,而不论其原始形状如何,那么分位数转换 (QuantileTransformer) 是有用的。它根据分位数映射数据,有效地分散最频繁的值并压缩稀疏的值。这对于具有复杂、多峰分布的特征或处理异常值时特别有效。
异常值,即极端值,会显著扭曲某些缩放方法的结果。
RobustScaler 通常是最适合的缩放方法。output_distribution='normal' 的分位数转换也可以将异常值映射到标准正态分布的尾部,减少它们的极端影响。有时,保持特征的可解释性很重要。
仅在训练数据上拟合: 这极为重要。始终只使用训练数据来拟合您的缩放器或转换器。然后,使用已拟合的对象来转换训练集、验证集和测试集。这可以防止验证/测试集的信息泄露到训练过程。
# StandardScaler 示例
from sklearn.preprocessing import StandardScaler
import numpy as np
# 假设 X_train, X_val, X_test 是 numpy 数组或 pandas DataFrame
scaler = StandardScaler()
# 仅在训练数据上拟合
X_train_scaled = scaler.fit_transform(X_train)
# 将相同的已拟合缩放器应用于验证和测试数据
X_val_scaled = scaler.transform(X_val)
X_test_scaled = scaler.transform(X_test)
谨慎结合技术: 您有时可能会先应用转换(例如,对数转换),然后缩放结果(例如,标准化)。这可以使用 Scikit-learn 的 Pipeline 或 ColumnTransformer 实现。
实验: 通常,最佳选择方法是经验性的。根据您的数据分析和算法选择,尝试几种合理的缩放/转换方法。使用交叉验证评估您的机器学习模型在训练集上每种方法的性能,并选择根据您选择的指标获得最佳结果的方法。
这是一个简化的流程图来指导您的决策过程:
一个流程图,概述了根据数据特征(异常值、偏斜)和算法敏感性选择缩放或转换方法的一个可能的决策流程。注意,通常需要进行实验。
通过考虑这些因素、算法要求、数据分布、异常值和可解释性,并通过实验验证您的选择,您可以有效应用缩放和转换技术来提升机器学习模型的性能。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造