机器学习特征工程:用 sklearn 实现特征标准化与编码
·
机器学习特征工程:特征标准化与编码实现
特征工程是提升模型性能的关键步骤,主要包括特征标准化(消除量纲影响)和特征编码(处理类别数据)。以下使用sklearn完整实现流程:
一、特征标准化
目标:将数值特征缩放到统一量纲
-
Z-score标准化(均值为0,方差为1)
公式:$$ z = \frac{x - \mu}{\sigma} $$from sklearn.preprocessing import StandardScaler # 示例数据 X = [[10, 2.5], [5, 1.8], [15, 3.0]] scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # 输出标准化后的数组 -
Min-Max归一化(缩放到[0,1]区间)
公式:$$ x_{\text{norm}} = \frac{x - x_{\min}}{x_{\max} - x_{\min}} $$from sklearn.preprocessing import MinMaxScaler minmax_scaler = MinMaxScaler() X_minmax = minmax_scaler.fit_transform(X) # 输出归一化后的数组
二、特征编码
目标:将类别特征转换为数值形式
-
独热编码(One-Hot Encoding)
适用场景:无序类别特征(如颜色、城市)from sklearn.preprocessing import OneHotEncoder # 示例数据 colors = [['红'], ['蓝'], ['绿'], ['红']] encoder = OneHotEncoder(sparse_output=False) colors_encoded = encoder.fit_transform(colors) # 输出如[[1,0,0],[0,1,0],[0,0,1],[1,0,0]] -
标签编码(Label Encoding)
适用场景:有序类别特征(如学历等级:小学、中学、大学)from sklearn.preprocessing import LabelEncoder education = ['小学', '大学', '中学', '大学'] le = LabelEncoder() education_encoded = le.fit_transform(education) # 输出如[0,2,1,2] -
有序编码(Ordinal Encoding)
手动指定类别顺序(需配合OrdinalEncoder)from sklearn.preprocessing import OrdinalEncoder size = [['S'], ['L'], ['M'], ['S']] categories = [['S', 'M', 'L']] # 显式定义顺序 ordinal_encoder = OrdinalEncoder(categories=categories) size_encoded = ordinal_encoder.fit_transform(size) # 输出[[0],[2],[1],[0]]
三、完整流程示例
import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
# 创建示例数据集
data = pd.DataFrame({
'age': [25, 40, 30],
'income': [50000, 80000, 60000],
'city': ['北京', '上海', '广州']
})
# 定义转换器:数值列标准化 + 类别列独热编码
preprocessor = ColumnTransformer(
transformers=[
('num', StandardScaler(), ['age', 'income']),
('cat', OneHotEncoder(), ['city'])
])
# 执行转换
X_transformed = preprocessor.fit_transform(data)
print(X_transformed)
关键说明:
- 标准化优先选择
StandardScaler(对异常值敏感时用RobustScaler)- 无序类别数据必须用独热编码避免引入虚假顺序
- 使用
ColumnTransformer可对不同列应用不同转换
通过标准化和编码,特征满足$ \text{同分布} $要求,显著提升线性模型、距离度量模型(如KNN、SVM)的性能。
更多推荐


所有评论(0)