数据标准化:机器学习预处理的关键
·
数据标准化处理概述
数据标准化是机器学习预处理的关键步骤,通过调整特征尺度使数据符合均值为0、标准差为1的分布。Pandas结合Scikit-learn的StandardScaler可实现高效标准化,适用于基于距离的算法(如SVM、KNN)和梯度下降优化。
StandardScaler核心原理
标准化公式为: [ z = \frac{x - \mu}{\sigma} ] 其中$\mu$是均值,$\sigma$是标准差。该转换使不同量纲的特征具有可比性,同时保留原始数据分布形状。
实现步骤
加载必要库
import pandas as pd
from sklearn.preprocessing import StandardScaler
import numpy as np
创建示例数据
data = {'Age': [25, 30, 45, 62, 22],
'Income': [40000, 60000, 80000, 120000, 35000]}
df = pd.DataFrame(data)
初始化并拟合StandardScaler
scaler = StandardScaler()
scaler.fit(df[['Age', 'Income']])
转换数据
scaled_data = scaler.transform(df[['Age', 'Income']])
df_scaled = pd.DataFrame(scaled_data, columns=['Age_scaled', 'Income_scaled'])
查看统计量验证
print(df_scaled.mean()) # 应接近0
print(df_scaled.std()) # 应接近1
关键参数说明
with_mean: 布尔值,是否居中数据(默认True)with_std: 布尔值,是否缩放至单位方差(默认True)copy: 是否创建数据副本(默认True)
高级应用技巧
管道集成
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import LogisticRegression
pipeline = make_pipeline(
StandardScaler(),
LogisticRegression()
)
分类特征处理 需先将分类变量编码为数值,再对数值特征单独标准化:
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
preprocessor = ColumnTransformer(
transformers=[
('num', StandardScaler(), ['Age', 'Income']),
('cat', OneHotEncoder(), ['Gender'])
])
逆变换还原数据
original_data = scaler.inverse_transform(scaled_data)
注意事项
- 测试集应使用训练集的均值和方差进行转换,避免数据泄露
- 对稀疏矩阵需设置
with_mean=False - 存在异常值时考虑改用RobustScaler
- 标准化后的数据范围无固定界限,与归一化(Normalization)不同
性能优化方案
部分拟合 对于大型数据集,可使用partial_fit分批处理:
scaler.partial_fit(batch_data)
稀疏矩阵支持
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler(with_mean=False)
scaler.fit(sparse_matrix)
并行处理 通过n_jobs参数加速多特征处理:
from sklearn.experimental import enable_hist_gradient_boosting
from sklearn.ensemble import HistGradientBoostingRegressor
est = HistGradientBoostingRegressor(scoring='neg_mean_squared_error', n_jobs=2)
更多推荐


所有评论(0)