[机器学习-从入门到入土] 特征选择

[机器学习-从入门到入土] 特征选择

个人导航

知乎:https://www.zhihu.com/people/byzh_rc

CSDN:https://blog.csdn.net/qq_54636039

注:本文仅对所述内容做了框架性引导,具体细节可查询其余相关资料or源码

参考文章:各方资料

文章目录

  • [[机器学习-从入门到入土] 特征选择](#[机器学习-从入门到入土] 特征选择)
  • 个人导航
  • 核心概念
        • [Relevant feature(相关特征)](#Relevant feature(相关特征))
        • [Irrelevant feature(无关特征)](#Irrelevant feature(无关特征))
        • [Redundant feature(冗余特征)](#Redundant feature(冗余特征))
        • 为什么要做特征选择
  • [子集搜索 Subset Search](#子集搜索 Subset Search)
        • [1.序列前向搜索(SFS, Sequential Forward Selection)](#1.序列前向搜索(SFS, Sequential Forward Selection))
        • [2.序列后向搜索(SBS, Sequential Backward Selction)](#2.序列后向搜索(SBS, Sequential Backward Selction))
  • [子集评价 Subset Evaluation](#子集评价 Subset Evaluation)
  • 特征选择方法
        • [1.过滤式 Filter](#1.过滤式 Filter)
        • [2.包裹式 Wrapper](#2.包裹式 Wrapper)
        • [3.嵌入式 Embedded](#3.嵌入式 Embedded)
  • [字典学习 Dictionary Learning](#字典学习 Dictionary Learning)

核心概念

Relevant feature(相关特征)

对预测或分类任务有帮助的特征。

例:在预测房价时,"房屋面积"就是相关特征。

Irrelevant feature(无关特征)

对预测或分类任务没用的特征。

例:预测房价时,"房屋颜色"可能无关。

Redundant feature(冗余特征)

与其他特征高度相关,可以从其他特征推导出来。

例:房屋"面积"与"每层面积×楼层数"可能高度相关,第二个特征就是冗余特征。

为什么要做特征选择
  1. 降低模型复杂度
    少量特征 → 模型更简单 → 更容易理解、训练快
  2. 缓解维度灾难(curse of dimensionality)
    维度过高会导致样本稀疏、模型泛化差

"在所有特征中找到最佳子集"

问题是:如果有 20 个特征,子集组合有 2 20 ≈ 10 6 2^{20} \approx 10^6 220≈106 种,枚举太慢

解决办法 :贪心策略(Greedy Strategy)

-> 一次只增加或删除一个特征 → 找到局部最优

1.序列前向搜索(SFS, Sequential Forward Selection)
  • 策略:从空集合开始,每次加入一个最优特征(提升性能最多的)
  • 优点:直观,容易实现
  • 缺点:局部最优
2.序列后向搜索(SBS, Sequential Backward Selction)
  • 策略:从全特征开始,每次删除一个最不重要的特征(性能下降最小的)
  • 优点:适合特征少时从整体优化
  • 缺点计算量大,仍可能局部最优

子集评价 Subset Evaluation

数据集 D D D 根据特征 A A A 分为 V V V 个子集: { D 1 , D 2 , . . . , D V } \{D^1, D^2, ..., D^V\} {D1,D2,...,DV}

信息增益(Gain)

  • 思想:衡量一个特征划分数据集后"减少混乱(entropy)"的程度。
  • 公式

Gain ⁡ ( A ) = Ent ⁡ ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ Ent ⁡ ( D v ) \operatorname{Gain}(A) = \operatorname{Ent}(D) - \sum_{v=1}^{V} \frac{|D^v|}{|D|} \operatorname{Ent}(D^v) Gain(A)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)

  • Ent ⁡ ( D ) = − ∑ n p n log ⁡ 2 p n \operatorname{Ent}(D) = -\sum_n p_n \log_2 p_n Ent(D)=−∑npnlog2pn
    • p n p_n pn:第 n 类在数据集中的比例
    • Entropy 越大 → 数据越"混乱"(类别越均匀)
  • 直观理解用特征 A A A 划分后,如果子集内部类别更纯 → 信息增益大 → 特征重要

特征选择方法

1.过滤式 Filter

近似理解: "只看特征本身和标签的关系,先把'看起来没用的特征'筛掉"

  • 思路先评估特征与目标的相关性,再选特征,不依赖学习器
  • 例子:信息增益、相关系数、Chi-square 测试等
  • δ j = ∑ i − diff ( x i j , x i , n h j ) 2 + diff ( x i j , x i , n m j ) 2 \delta^j = \sum_i -\text{diff}(x_i^j, x_{i,nh}^j)^2 + \text{diff}(x_i^j, x_{i,nm}^j)^2 δj=∑i−diff(xij,xi,nhj)2+diff(xij,xi,nmj)2
    • diff():两个样本在第 j 个特征上的差异
    • near-hit:同类最近样本 → 想让相似
      ( x i , n h x_{i, nh} xi,nh为距离 x i x_i xi 最近且类别相同的样本)
    • near-miss:异类最近样本 → 想让差异大
      ( x i , n m x_{i, nm} xi,nm为距离 x i x_i xi 最近且类别不同的样本)
    • 直观理解 :好的特征 → 同类差距小、异类差距大 → δ j \delta^j δj 大
  • 优点:速度快
  • 缺点:忽略特征间的组合效果
2.包裹式 Wrapper

近似理解: "哪个特征组合让模型表现最好,我就选哪个"

  • 思路 :把"特征子集"当作模型的超参数,用学习器的性能直接评价特征好坏
  • 核心机制
    • 给定一个特征子集
    • 用该子集 训练一个学习器
    • 分类准确率 / 损失函数 / 验证集性能 作为评价指标
    • 搜索"性能最优"的特征子集
  • 优点
    • 直接以"最终任务性能"为目标
    • 能考虑特征之间的组合效应
    • 通常比 Filter 更准确
  • 缺点
    • 计算开销极大(每次评估都要训练模型)
3.嵌入式 Embedded

近似理解: "在训练模型时,顺手把没用的特征权重压成 0"

  • 思路将特征选择过程"嵌入"到模型训练中,训练完成即完成特征选择

  • 核心区别(与 Filter / Wrapper):

    • Filter:训练前选特征
    • Wrapper:反复训练模型来选特征
    • Embedded:训练模型的同时选特征
  • 关键技术:稀疏正则化(Sparse Regularization)

    设线性模型:
    y = w T x y = w^T x y=wTx

    在损失函数中加入正则项:
    min ⁡ w    L ( w ) + λ Ω ( w ) w \min_w \; \mathcal{L}(w) + \lambda \Omega(w)w wminL(w)+λΩ(w)w

  • 不同范数的作用

    • L2 正则化(Ridge)

      Ω ( w ) = ∥ w ∥ 2 2 \Omega(w) = \|w\|_2^2 Ω(w)=∥w∥22

      • 权重变小,但几乎不为 0
      • ❌ 不能真正做特征选择
    • L1 正则化(Lasso)

      Ω ( w ) = ∥ w ∥ 1 = ∑ j ∣ w j ∣ \Omega(w) = \|w\|_1 = \sum_j |w_j| Ω(w)=∥w∥1=∑j∣wj∣

      • 会让部分权重严格变为 0
      • ✔ 自动删除不重要特征
    • L0 正则化(理想但不可用)

      ∥ w ∥ 0 = # { w j ≠ 0 } \|w\|_0 = \#\{w_j \neq 0\} ∥w∥0=#{wj=0}

      • 直接表示"使用了多少特征"
      • ❌ 非连续、NP-hard,无法优化

    用 L1 近似 L0,实现可优化的特征选择

  • 优点

    • 计算效率高于 Wrapper
    • 自动完成特征选择
    • 与模型训练高度一致
  • 缺点

    • 强依赖模型假设(如线性)
    • 对特征缩放敏感

最典型的稀疏建模目标:不关心数值大小, 只关心有多少个分量被使用

但 L 0 L_0 L0非凸,不连续,组合爆炸(NP-hard)

理想替身需要满足:

  1. 偏好 0(能产生稀疏解)
  2. (全局最优)
  3. 尽量"像" L0L_0L0

在 x ≈ 0 x\approx 0 x≈0 附近:

  • L 1 L_1 L1:斜率是常数 (会"持续推动"小系数 → 0)
  • L 2 L_2 L2:斜率趋近 0 (在 0 附近几乎不管你)

L 1 L_1 L1是菱形, 优化时, 线性等值线最先接触到尖角

(尖角 = 某一维恰好为 0)

而 p < 1 p<1 p<1 时: 虽然更像 L 0 L_0 L0, 但 非凸 -> 优化再次变难

字典学习 Dictionary Learning

字典学习 = 学一组"基元",让每个样本只用其中很少几个来表示自己

字典学习不是选特征,而是学"可被稀疏使用的特征表示"

为什么要引入字典 B B B

在传统线性模型中:
x ≈ W z x \approx W z x≈Wz

  • W W W 是固定的特征基(如原始特征、PCA 基)
  • 问题:这些基不一定最适合当前数据

字典学习的核心升级:

  • 不再使用固定基
  • 而是直接从数据中学一组"最适合表示数据的基"

这组基就是 字典矩阵 B B B

字典矩阵 B B B 的每一行(或列)是一个 dictionary atom(原子)

为什么强调"稀疏表示" α i \alpha_i αi

对每个样本 x i x_i xi:
x i ≈ B α i x_i \approx B \alpha_i xi≈Bαi

但有一个强约束

α i \alpha_i αi 里 大多数元素必须是 0

也就是说:

  • 每个样本 只使用很少几个原子
  • 不同样本 使用的原子不同

-> "0 元素是散列分布的,而不是某一整行 / 整列为 0"

说明:被"关掉"的不是某个特征, 而是**"某个样本是否使用某个原子"**

目标函数

min ⁡ B , α i ∑ i = 1 m ∥ x i − B α i ∥ 2 2 ⏟ 重建误差 + λ ∥ α i ∥ 1 ⏟ 稀疏性约束 \min_{B, \alpha_i} \sum_{i=1}^m \underbrace{\|x_i - B\alpha_i\|2^2}{\text{重建误差}} + \lambda \underbrace{\|\alpha_i\|1}{\text{稀疏性约束}} B,αimini=1∑m重建误差 ∥xi−Bαi∥22+λ稀疏性约束 ∥αi∥1

  • 第一项:重建误差(data fidelity)
    字典 + 稀疏系数,必须能把原样本"拼出来", 否则字典没有表达能力

  • 第二项:稀疏约束(sparsity)
    逼迫 α i \alpha_i αi 里尽量多的元素变成 0

  • λ λ λ 的物理意义:

    • λ ↑ \lambda \uparrow λ↑:表示更稀疏(更少原子),但重建误差变大
    • λ ↓ \lambda \downarrow λ↓:表示重建更精确,但用的原子更多
不能一次性优化

B B B 和 α \alpha α 都是未知的

若固定 B B B:

→ 每个 α i \alpha_i αi​ 是一个 Lasso 问题(凸)

若固定 α \alpha α:

→ B B B 是一个 最小二乘问题(凸)

但同时对 B B B 和 α \alpha α 优化 → 非凸问题

交替优化

虽然不是全局最优,但实践中非常有效

  1. 固定字典 B B B,求每个样本的稀疏表示 α i \alpha_i αi
    • 本质:L1 正则回归
  2. 固定所有 α i \alpha_i αi,更新字典 B B B
    • 本质:最小二乘拟合
  3. 重复 1--2,直到收敛
相关推荐
码农水水1 小时前
米哈游Java面试被问:机器学习模型的在线服务和A/B测试
java·开发语言·数据库·spring boot·后端·机器学习·word
产品何同学2 小时前
在线问诊医疗APP如何设计?2套原型拆解与AI生成原型图实战
人工智能·产品经理·健康医疗·在线问诊·app原型·ai生成原型图·医疗app
星爷AG I2 小时前
9-14 知觉整合(AGI基础理论)
人工智能·agi
开源技术2 小时前
Violit: Streamlit杀手,无需全局刷新,构建AI面板
人工智能·python
递归尽头是星辰2 小时前
大模型与向量检索的融合:从核心原理到 Spring AI 落地
人工智能·大模型·向量检索·rag·spring ai·向量库
gihigo19982 小时前
希尔伯特-黄变换(HHT)完整MATLAB实现
人工智能·算法·matlab
min1811234562 小时前
AI金融风控:智能反欺诈与个性化理财
大数据·人工智能
2013092416272 小时前
1982年霍普菲尔德网络奠基之作:深度导读与全景解析报告
人工智能
wanghao6664552 小时前
机器学习三大流派:监督、无监督与强化学习
人工智能·机器学习
爱喝可乐的老王2 小时前
神经网络的基础:核心是 “搭积木 + 激活信号”
人工智能·深度学习·神经网络