机器学习特征工程:用 sklearn 实现特征标准化与编码
·
机器学习特征工程:特征标准化与编码实现
在机器学习中,特征工程是提升模型性能的关键步骤。以下是使用sklearn实现特征标准化和编码的完整指南,包含数学原理和代码示例。
一、特征标准化
标准化通过调整特征尺度,消除量纲影响。常见方法:
-
Z-score 标准化
数学原理:
将特征转换为均值为0、标准差为1的分布:
$$ z = \frac{x - \mu}{\sigma} $$
其中 $\mu$ 为均值,$\sigma$ 为标准差。from sklearn.preprocessing import StandardScaler import numpy as np # 示例数据 X = np.array([[30, 5000], [40, 8000], [25, 4000]]) scaler = StandardScaler() X_scaled = scaler.fit_transform(X) print("标准化结果:\n", X_scaled) -
Min-Max 归一化
数学原理:
将特征缩放到 $[0,1]$ 区间:
$$ x_{\text{norm}} = \frac{x - x_{\min}}{x_{\max} - x_{\min}} $$from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() X_normalized = scaler.fit_transform(X) print("归一化结果:\n", X_normalized)
二、特征编码
编码将类别特征转换为数值形式,便于模型处理。
-
独热编码 (One-Hot Encoding)
适用场景:无序类别特征(如颜色、城市)。
原理:为每个类别创建二元特征列。from sklearn.preprocessing import OneHotEncoder # 示例数据 colors = [['红'], ['蓝'], ['绿'], ['红']] encoder = OneHotEncoder(sparse_output=False) colors_encoded = encoder.fit_transform(colors) print("独热编码结果:\n", colors_encoded) -
标签编码 (Label Encoding)
适用场景:有序类别特征(如学历等级)。
原理:为每个类别分配唯一整数:
$ \text{高} \rightarrow 2, \text{中} \rightarrow 1, \text{低} \rightarrow 0 $from sklearn.preprocessing import LabelEncoder levels = ['高', '中', '低', '中', '高'] encoder = LabelEncoder() levels_encoded = encoder.fit_transform(levels) print("标签编码结果:", levels_encoded)
三、完整流程示例
结合标准化与编码处理混合型数据:
import pandas as pd
from sklearn.compose import ColumnTransformer
# 创建示例数据
data = pd.DataFrame({
'年龄': [30, 40, 25],
'收入': [5000, 8000, 4000],
'颜色': ['红', '蓝', '绿'],
'等级': ['高', '中', '低']
})
# 定义转换器
preprocessor = ColumnTransformer(
transformers=[
('num', StandardScaler(), ['年龄', '收入']), # 数值列标准化
('cat', OneHotEncoder(), ['颜色']) # 类别列独热编码
],
remainder='passthrough' # 保留未处理的列(如'等级')
)
# 应用转换
transformed_data = preprocessor.fit_transform(data)
print("最终特征矩阵:\n", transformed_data)
关键注意:
- 标准化需在拆分训练/测试集后进行,避免数据泄露
- 高基数类别特征(如邮编)优先用
Target Encoding替代独热编码- 标签编码可能引入虚假顺序关系,需谨慎使用
通过标准化和编码,原始特征被转化为适合线性模型、树模型等算法的规范化输入,显著提升模型收敛速度和预测精度。
更多推荐
所有评论(0)