机器学习特征工程:特征选择与降维(PCA/t-SNE)

一、特征选择

特征选择是从原始特征集中筛选出最相关特征的子集,目标包括:

  1. 减少维度:降低计算复杂度
  2. 消除噪声:提高模型鲁棒性
  3. 增强可解释性:突出关键特征

常用方法

  1. 过滤法(Filter)

    • 计算特征与目标变量的相关性
    • 常用指标:皮尔逊相关系数 $r = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum (x_i - \bar{x})^2 \sum (y_i - \bar{y})^2}}$
    • 卡方检验 $\chi^2 = \sum \frac{(O_i - E_i)^2}{E_i}$
  2. 包裹法(Wrapper)

    • 递归特征消除(RFE)
    • 前向/后向选择
    • 示例代码:
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

model = LogisticRegression()
selector = RFE(model, n_features_to_select=5)
selected_features = selector.fit_transform(X, y)

  1. 嵌入法(Embedded)
    • L1正则化(Lasso):$ \min_w | y - Xw |_2^2 + \alpha | w |_1 $
    • 树模型特征重要性
二、降维技术

当特征间存在强相关性时,降维更有效:

1. 主成分分析(PCA)
  • 核心思想:通过正交变换将相关特征转换为线性无关的主成分
  • 数学原理
    1. 标准化数据:$ z = \frac{x - \mu}{\sigma} $
    2. 计算协方差矩阵:$ C = \frac{1}{n} Z^T Z $
    3. 特征分解:$ C = V \Lambda V^T $
    4. 选择前 $k$ 个最大特征值对应的特征向量

$$ \text{投影:} Y = Z V_k $$

  • 优缺点
    • ✅ 去除特征相关性
    • ❌ 丢失可解释性(主成分是原始特征的线性组合)
from sklearn.decomposition import PCA

pca = PCA(n_components=0.95)  # 保留95%方差
X_pca = pca.fit_transform(X)

2. t-SNE(t-Distributed Stochastic Neighbor Embedding)
  • 核心思想:保持高维空间中的局部结构

  • 数学原理

    1. 计算高维相似度: $$ p_{j|i} = \frac{\exp(-|x_i - x_j|^2 / 2\sigma_i^2)}{\sum_{k \neq i} \exp(-|x_i - x_k|^2 / 2\sigma_i^2)} $$
    2. 定义低维相似度(使用t分布): $$ q_{ij} = \frac{(1 + |y_i - y_j|^2)^{-1}}{\sum_{k \neq l} (1 + |y_k - y_l|^2)^{-1}} $$
    3. 最小化KL散度: $$ \min KL(P|Q) = \sum_i \sum_j p_{ij} \log \frac{p_{ij}}{q_{ij}} $$
  • 特点

    • 擅长保留局部结构(聚类可视化)
    • 计算复杂度 $O(n^2)$,适合中小数据集
    • 参数敏感(困惑度perplexity)
from sklearn.manifold import TSNE

tsne = TSNE(n_components=2, perplexity=30)
X_tsne = tsne.fit_transform(X)

三、应用场景对比
方法 适用场景 注意事项
特征选择 需要保留原始特征含义 可能遗漏特征组合信息
PCA 高维数据压缩/线性关系强的数据 主成分方向受异常值影响
t-SNE 数据可视化/探索聚类结构 结果不可逆/不适用于新样本预测
四、实践建议
  1. 预处理顺序
    graph LR
    A[数据清洗] --> B[特征选择] --> C[降维]
    

  2. 组合策略
    • 先用特征选择去除无关特征
    • 再用PCA处理多重共线性
    • 最后用t-SNE可视化
  3. 评估指标
    • 分类任务:准确率/F1值
    • 聚类任务:轮廓系数 $s = \frac{b - a}{\max(a, b)}$

关键提示:PCA适用于特征压缩和去噪,t-SNE主要用于探索性分析而非特征工程。实际应用中常配合使用,如先用PCA降至50维,再用t-SNE降至2维可视化。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐