[ PROMPT_NODE_27356 ]
Scikit Learn 预处理
[ SKILL_DOCUMENTATION ]
# 数据预处理与特征工程参考
## 概述
数据预处理将原始数据转换为适合机器学习模型使用的格式。这包括缩放、编码、处理缺失值和特征工程。
## 特征缩放与归一化
### StandardScaler
**StandardScaler (`sklearn.preprocessing.StandardScaler`)**
- 将特征标准化为零均值和单位方差
- 公式:z = (x - mean) / std
- 使用场景:特征具有不同的量级,算法假设数据呈正态分布
- 必需场景:SVM、KNN、神经网络、PCA、带正则化的线性回归
- 示例:
python
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test) # 使用与训练集相同的参数
# 访问已学习的参数
print(f"均值: {scaler.mean_}")
print(f"标准差: {scaler.scale_}")
### MinMaxScaler
**MinMaxScaler (`sklearn.preprocessing.MinMaxScaler`)**
- 将特征缩放到给定范围(默认 [0, 1])
- 公式:X_scaled = (X - X.min) / (X.max - X.min)
- 使用场景:需要有界值,数据不呈正态分布
- 对异常值敏感
- 示例:
python
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))
X_scaled = scaler.fit_transform(X_train)
# 自定义范围
scaler = MinMaxScaler(feature_range=(-1, 1))
X_scaled = scaler.fit_transform(X_train)
### RobustScaler
**RobustScaler (`sklearn.preprocessing.RobustScaler`)**
- 使用中位数和四分位距 (IQR) 进行缩放
- 公式:X_scaled = (X - median) / IQR
- 使用场景:数据包含异常值
- 对异常值具有鲁棒性
- 示例:
python
from sklearn.preprocessing import RobustScaler
scaler = RobustScaler()
X_scaled = scaler.fit_transform(X_train)
### Normalizer
**Normalizer (`sklearn.preprocessing.Normalizer`)**
- 将样本单独归一化为单位范数
- 常用范数:'l1', 'l2', 'max'
- 使用场景:需要独立归一化每个样本(例如文本特征)
- 示例:
python
from sklearn.preprocessing import Normalizer
normalizer = Normalizer(norm='l2') # 欧几里得范数
X_normalized = normalizer.fit_transform(X)
### MaxAbsScaler
**MaxAbsScaler (`sklearn.preprocessing.MaxAbsScaler`)**
- 按最大绝对值进行缩放
- 范围:[-1, 1]
- 不会对数据进行平移/中心化(保留稀疏性)
- 使用场景:数据已中心化或为稀疏数据
- 示例:
python
from sklearn.preprocessing import M