Scikit-learn:机器学习中的统计特征工程
在机器学习中,特征工程是提升模型性能的核心环节。Scikit-learn提供了一套完整的工具集,用于实现统计特征工程。
·
Scikit-learn中的统计特征工程
在机器学习中,特征工程是提升模型性能的核心环节。Scikit-learn提供了一套完整的工具集,用于实现统计特征工程。以下从关键方法、应用场景和代码实现三个层面展开:
一、统计特征工程的核心方法
-
特征提取
从原始数据生成新特征:- 分箱离散化:将连续变量分段为离散区间
$$ \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) $$
- 分箱离散化:将连续变量分段为离散区间
-
特征转换
改变特征分布以适应模型假设:- 标准化:使特征符合$N(0,1)$分布
$$ z = \frac{x - \mu}{\sigma} $$ - 归一化:将特征缩放到$[0,1]$区间
$$ x_{\text{norm}} = \frac{x - \min(x)}{\max(x) - \min(x)} $$
- 标准化:使特征符合$N(0,1)$分布
-
特征选择
筛选高价值特征:- 方差阈值法:删除方差低于阈值$ \alpha $的特征
$$ \text{Var}(X_j) < \alpha \Rightarrow \text{discard} $$ - 统计检验:基于$p$值选择特征(如卡方检验、ANOVA)
- 方差阈值法:删除方差低于阈值$ \alpha $的特征
二、典型应用场景
| 场景 | 适用工具 | 统计目标 |
|---|---|---|
| 文本分类 | 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)
更多推荐



所有评论(0)