preprocessing 是 Scikit-learn 库中的一个 数据预处理模块,提供了许多数据转换工具,主要用于标准化、归一化、编码和特征工程等任务。数据预处理对于机器学习来说非常重要,因为原始数据可能存在不同的尺度、不均衡的分布或类别特征,需要进行转换以提高模型的效果。
1. 主要功能
(1) 数据标准化(Standardization)
方法:StandardScaler()
- 作用:将数据转换为均值为 0,标准差为 1 的标准正态分布。
- 适用场景:适用于 大多数机器学习模型,特别是基于梯度下降的算法(如线性回归、逻辑回归、SVM、神经网络等)。
示例
from sklearn.preprocessing import StandardScaler
import numpy as np
# 创建数据
data = np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]])
# 初始化 StandardScaler
scaler = StandardScaler()
# 进行标准化
data_scaled = scaler.fit_transform(data)
print(data_scaled)
标准化公式:
(2) 数据归一化(Normalization)
方法:MinMaxScaler()
- 作用:将数据缩放到 指定范围(默认是 [0,1])。
- 适用场景:适用于 深度学习、KNN、SVM 等对数据范围敏感的模型。
示例
from sklearn.preprocessing import MinMaxScaler
# 初始化 MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))
# 归一化数据
data_normalized = scaler.fit_transform(data)
print(data_normalized)
归一化公式:
(3) 归一化处理(Normalization for Samples)
方法:normalize()
- 作用:按 行 归一化,使每个样本的 L2 范数(欧几里得长度) 变为 1。
- 适用场景:用于文本处理(如 TF-IDF)、KNN、深度学习等。
示例
from sklearn.preprocessing import normalize
# 进行归一化
data_l2_normalized = normalize(data, norm='l2')
print(data_l2_normalized)
L2 归一化公式:

(4) 独热编码(One-Hot Encoding)
方法:OneHotEncoder()
- 作用:将分类变量转换为 独热编码(One-Hot Encoding)。
- 适用场景:适用于类别型数据(如性别、城市、职业等)。
示例
from sklearn.preprocessing import OneHotEncoder
# 创建类别数据
categories = np.array([["red"], ["green"], ["blue"], ["red"]])
# 初始化 OneHotEncoder
encoder = OneHotEncoder(sparse=False)
# 进行独热编码
encoded_categories = encoder.fit_transform(categories)
print(encoded_categories)
输出:
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]
[1. 0. 0.]]
(5) 标签编码(Label Encoding)
方法:LabelEncoder()
- 作用:将类别变量转换为整数索引(0, 1, 2...)。
- 适用场景:适用于类别变量,但一般只用于有序类别,否则可能导致模型误解类别间的关系。
示例
from sklearn.preprocessing import LabelEncoder
# 创建类别数据
labels = np.array(["red", "green", "blue", "red"])
# 初始化 LabelEncoder
encoder = LabelEncoder()
# 进行标签编码
encoded_labels = encoder.fit_transform(labels)
print(encoded_labels)
输出:
[2 1 0 2]
注意:
LabelEncoder将类别变量 按照字母顺序 转换为数值,如blue -> 0, green -> 1, red -> 2。- 如果类别是无序的(如“城市名”),请使用
OneHotEncoder()而不是LabelEncoder()。
(6) 生成多项式特征
方法:PolynomialFeatures(degree=n)
- 作用:生成 多项式特征,用于非线性回归和特征交互。
- 适用场景:用于线性模型扩展到非线性场景。
示例
from sklearn.preprocessing import PolynomialFeatures
# 创建示例数据
X = np.array([[2, 3]])
# 初始化 PolynomialFeatures,degree=2
poly = PolynomialFeatures(degree=2)
# 进行特征扩展
X_poly = poly.fit_transform(X)
print(X_poly)
输出:
[[1. 2. 3. 4. 6. 9.]]
解释:
X = [[2, 3]]- 生成的新特征:
1(常数项)2(原始特征 1)3(原始特征 2)4(2^2)6(2*3)9(3^2)
2. 预处理的选用建议
| 任务 | 推荐方法 | 适用场景 |
|---|---|---|
| 归一化(Normalization) | MinMaxScaler() |
适用于深度学习、KNN、SVM |
| 标准化(Standardization) | StandardScaler() |
适用于线性回归、SVM、神经网络 |
| 归一化处理(L2 范数) | normalize() |
文本处理、KNN、推荐系统 |
| 独热编码(One-Hot Encoding) | OneHotEncoder() |
类别变量(无序) |
| 标签编码(Label Encoding) | LabelEncoder() |
类别变量(有序) |
| 多项式特征扩展 | PolynomialFeatures() |
非线性回归 |
3. 总结
preprocessing模块主要用于数据标准化、归一化、编码、特征工程等任务。StandardScaler()适用于大多数机器学习算法(如线性回归、SVM)。MinMaxScaler()适用于神经网络、KNN 等对数值范围敏感的模型。OneHotEncoder()适用于类别变量(无序),LabelEncoder()适用于类别变量(有序)。PolynomialFeatures()用于生成多项式特征,扩展线性模型的能力。


评论