Scikit-learn中的统计特征工程

在机器学习中,特征工程是提升模型性能的核心环节。Scikit-learn提供了一套完整的工具集,用于实现统计特征工程。以下从关键方法、应用场景和代码实现三个层面展开:


一、统计特征工程的核心方法
  1. 特征提取
    从原始数据生成新特征:

    • 分箱离散化:将连续变量分段为离散区间
      $$ \text{age} \rightarrow [0,18): \text{child}, \quad [18,65): \text{adult} $$
    • 多项式特征:通过特征组合生成非线性项
      $$ (x_1, x_2) \rightarrow (x_1^2, x_1x_2, x_2^2) $$
  2. 特征转换
    改变特征分布以适应模型假设:

    • 标准化:使特征符合$N(0,1)$分布
      $$ z = \frac{x - \mu}{\sigma} $$
    • 归一化:将特征缩放到$[0,1]$区间
      $$ x_{\text{norm}} = \frac{x - \min(x)}{\max(x) - \min(x)} $$
  3. 特征选择
    筛选高价值特征:

    • 方差阈值法:删除方差低于阈值$ \alpha $的特征
      $$ \text{Var}(X_j) < \alpha \Rightarrow \text{discard} $$
    • 统计检验:基于$p$值选择特征(如卡方检验、ANOVA)

二、典型应用场景
场景 适用工具 统计目标
文本分类 CountVectorizer 词频统计$tf(t,d)$
金融风控 KBinsDiscretizer 数值分箱统计
图像识别 PCA 协方差矩阵降维
时间序列预测 PolynomialFeatures 滞后项统计特征

三、Scikit-learn代码实现
from sklearn.preprocessing import StandardScaler, PolynomialFeatures
from sklearn.feature_selection import VarianceThreshold

# 1. 特征转换:标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 2. 特征提取:多项式扩展
poly = PolynomialFeatures(degree=2, include_bias=False)
X_poly = poly.fit_transform(X_scaled)

# 3. 特征选择:方差阈值过滤
selector = VarianceThreshold(threshold=0.1)
X_selected = selector.fit_transform(X_poly)

print(f"原始特征数: {X.shape[1]}, 筛选后特征数: {X_selected.shape[1]}")

关键参数说明:
  • PolynomialFeatures.degree:控制多项式阶数$n$,影响特征空间维度$O(n^d)$
  • VarianceThreshold.threshold:设置方差阈值$\alpha$,需结合数据分布调整
  • 标准化优先于多项式扩展,避免高阶项放大噪声

最佳实践:通过Pipeline整合流程:

from sklearn.pipeline import Pipeline
pipe = Pipeline([
    ('scaler', StandardScaler()),
    ('poly', PolynomialFeatures(degree=2)),
    ('selector', VarianceThreshold(threshold=0.1))
])
X_transformed = pipe.fit_transform(X)

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐