机器学习(二十八) 特征选择与常见的特征选择方法

28.1 特征选择概述

特征选择是一个重要的"++++数据预处理++++ "(data preprocessing)过程,在现实的机器学习任务中,获得数据集之后通常先进行特征选择,此后再训练模型。这有两个很重要的原因:首先,"维数灾难"问题会大为减轻 (++特征选择与降维有相似的动机++ ,事实上,++两者是处理高维数据的两大主流技术++);其二,去除无关特征往往会降低学习任务的难度。

需注意的是,++特征选择过程必须确保不丢失重要特征++ ,否则后续学习过程会因为缺失重要信息而无法获得好的性能。++++给定数据集,若学习任务不同,选择的特征子集很可能不同++++。

28.1.1 特征子集搜索

如何评估候选特征子集的好坏?如何基于评估结果产生下一个候选特征子集?然后再对其进行评价,...... 这个过程持续进行下去,直至无法找到更好的候选子集为止。

第一个是"++子集搜索++"(subset search)问题 :

给定特征集合{a1, a2, ..., ad},首先将每个特征看作一个候选子集,对这d个候选特征子集进行评价,假定{a2}最优,于是将{a2}作为第一轮的选定集;

然后,在上一轮的选定集中分别加入一个特征,构成包含两个特征的候选子集,假定在这d-1个候选特征子集中{a2,a4}最优,且优于{a2},于是将{a2,a4}作为本轮的选定集;......

假定在第k+1轮,最优的(k+1)候选特征子集不如上一轮的选定集,则停止"子集搜索",并将上一轮选定的包含k个特征的集合作为特征选择结果。

这种选择特征的方式称为++"前向"(forward)搜索++ 。另一种选择特征的方式,从完整的特征集合开始,每次分别去掉一个特征而选择最优,称为++"后向"(backward)搜索++。还可将前向与后向搜索结合起来,称为"双向"(bidirectional)搜索。

上述策略都是贪心式的,因为它们仅考虑了每轮选定集仅在本轮为最优,例如在第三轮选择a5优于a6,于是选定集为{a2,a4,a5},然而在第四轮可能是{a2,a4,a6,ai}比所有的{a2,a4,a5,ai}都更优。这样的问题需要进行穷举搜索。

28.1.2 特征子集评估

第二个是"++子集评估++"(subset evaluation)问题 :

给定数据集D,假定D中第i类样本所占的比例为pi,样本属性均为离散型。对于特征子集A,根据样本在A上的v种取值组合将D分成v个数据子集{D1, D2, ..., Dv},即每个数据子集中的样本在A上取值组合相同。

计算特征子集A的信息增益:

Gain(A) = Ent(D) - Σ(i=1,v) (|Di|/|D|)Ent(Di)

Ent(D*) = -Σ(k=1,|y|) pk(log2pk) <pk为数据集D*中第k类样本的数量所占的比例>

++++信息增益Gain(A)越大,意味着特征子集A包含的有助于数据集分类的信息越多++++。因此,对于每个候选特征子集A,<可根据其v种取值组合将D分为v个数据子集> 计算其Gain(A)作为特征选择的评估准则。每个数据子集对应在A上的一个取值组合,每个数据子集(A的每个取值组合)对数据集标记信息Y的划分 与 数据集标记信息Y的原始划分 之间的差异越小,则说明A越好。

信息熵Ent(D*)仅是判断这个差异的一种途径,其他能判断这++++两种划分差异(特征子集对Y的划分 vs Y的原始划分)++++ 的机制都能用于特征子集评估,例如:不合度量、相关系数等"多样性度量"方法 (可详见我的博客 《机器学习(二十一) ... 与多样性》21.2.2 多样性度量),稍加调整即可用于特征子集评估。

将特征子集搜索与子集评估相结合的特征选择方法,例如将前向搜索与信息增益评估相结合,++++这与决策树算法非常相似。++++ ++++事实上,决策树可用于特征选择,每个结点选择的划分属性组成的集合就是选择出的特征子集!++++

常见的特征选择方法大致可分为三类:过滤式(filter)、包裹式(wrapper)和嵌入式(embedding):

28.2 过滤式特征选择

Relief (Relevant Features)[Kira and Rendell,1992]是一种著名的过滤式特征选择方法,此方法以"特征统计量"度量特征的重要性。++此统计量是一个向量++ ,++++每个分量对应一个初始特征++++ ,++++特征子集的重要性是由子集中每个特征对应的分量之总和决定++++。最终指定一个阈值T,选择分量比T大的特征即可;也可指定选取特征的个数k,选择分量最大的k个特征。

Relief的关键是如何确定特征统计量,即每个特征的分量。给定训练集{(x1,y1), (x2,y2), ..., (xm,ym)},Relief先在 xi 的同类样本中寻找其最近邻 xi_nh,称为"++++猜对近邻++++ "(near-hit),再从 xi 的异类样本中寻找其最近邻 xi_nm,称为"++++猜错近邻++++"(near-miss),然后,特征统计量中特征 j 的分量为

δj = Σ(i)[diff(xij, xi_nm_j)^2 - diff(xij, xi_nh_j)^2]

<即每个样本在特征j上与其猜错近邻的差异平方 - 与其猜对近邻的差异平方 之全体样本的总和。

diff(xij, xi*j)的计算取决于特征 j 的类型:

若 j 为离散型,若 xij = xi*j 时,diff(xij, xi*j) = 0,否则为1;

若 j 为连续型,diff(xij, xi*j) = |xij - xi*j| / (max_j - min_j) 归一化到[0,1]区间。

>

从特征分量计算式可看出,若 xi 与其猜错近邻 xi_nm 在特征j上的差异越大,可增大特征 j 的统计分量,表明特征 j 对区分同类与异类样本是有益的;反之,若 xi 与其猜对近邻 xi_nh 在特征j上的差异越大,会减小特征 j 的统计分量,说明特征 j 对区分同类与异类样本起负面作用。++特征分量值越大,其特征的分类能力就越强++。<特征分量总和越大,特征子集的重要性越大>

Relief是为二分类问题设计的,其扩展变体 Relief-F [Kononenko,1994]能处理多分类问题 : 若 xi 属于第k类(k∈{1,2,...,|y|},Relief-F 先在k类样本中寻找 xi 的猜对近邻xi_nh,然后在k类之外每个类中寻找 xi 的猜错近邻,记为xi_nm_l (l∈{1,2,...,|y| | l≠k}),则特征j的统计分量为

δj = Σ(i)[ - diff(xij, xi_nh_j)^2 + Σ(l≠k)(pl×diff(xij, xi_nm_l_j)^2)]

其中pl为第l类样本在数据集D中所占的比例。

28.3 包裹式特征选择

与过滤式特征选择不考虑后续学习器不同,包裹式特征选择直接把将要使用的学习器的性能作为特征子集的评估准则。换言之,++包裹式特征选择是为学习器选择最有利于其性能、"量身定做"的特征子集。++

<拉斯维加斯方法、蒙特卡罗方法是两个以著名赌城命名的随机化方法。两者的主要区别是:若有时间限制,拉斯维加斯方法或者给出满足要求的解,或者不给出解;而蒙特卡罗方法一定会给出解,虽然给出的解未必满足要求;若无时间限制,两者最终都能给出满足要求的解。>

LVW(Las Vegas Wrapper)[Liu and Setiono,1996]是一个典型的包裹式特征选择方法,它在拉斯维加斯方法(Las Vegas method)框架下使用随机策略来进行子集搜索:

随机产生特征子集A'

  • ++++在数据集D且特征子集A'上,使用交叉验证法估计学习器的误差,即特征子集A′上的误差;++++

  • ++若它比其他特征子集上的误差更小,或误差相当但A′包含的特征个数更少,则将A′保留下来。++

需注意的是,由于LVW算法基于拉斯维加斯方法框架(特征子集搜索)采用了随机策略,而每次特征子集评估都需要训练并验证学习器,计算开销很大,因此算法设置了停止条件参数T,也就是说,若有运行时间限制,则有可能给不出解。

28.4 嵌入式特征选择

与过滤式和包裹式特征选择方法不同,嵌入式特征选择是将特征选择过程与学习器训练过程融为一体,即++++在学习器训练过程中优化目标自动进行特征选择++++。

28.4.1 L1正则化与稀疏解

给定训练集{(x1,y1), (x2,y2), ..., (xm,ym)},考虑最简单的线性回归模型,其优化目标为

min(w) Σ(i=1,m)(yi - wᵀxi)^2

++当样本特征很多,而样本数量相对较少时,上述计算式很容易陷入过拟合。为了缓解过拟合,可对优化目标引入L2范数正则化++:

min(w) Σ(i=1,m)(yi - wᵀxi)^2 + λ||w||^2

此称为"岭回归"(ridge regression)[Tikhonov and Arsenin,1977],其中正则化参数λ>0。

若采用L1范数正则化,则有

min(w) Σ(i=1,m)(yi - wᵀxi)^2 + λ||w||1

此称为LASSO(Least Absolute Shrinkage and Selection Operator)[Tibshirani,1996]​,其中正则化参数λ>0。

++L1范数和L2范数正则化都有助于降低过拟合风险++ ,但++++前者++++ ++++L1++++ ++++比后者++++ ++++L2++++ ++++更易获得"稀疏"(sparse)解,即它求得的w会有更少的非零分量++++ ++++(更多的零),如图所示++++:

假定xi仅有两个属性(xi1, xi2),则w只有两个分量,即w=(w1, w2),我们将其作为两个坐标轴 ... 图中 "平方误差项等值线" 与 "L1、L2正则化项等值线" 的相交点即为最优解。可看出,"L1正则化项等值线" 与 "平方误差项等值线" 的相交点常出现在坐标轴上,即w1或w2为0,也就是说,采用L1范数比L2范数更易于得到稀疏解。

++w取得稀疏解意味着初始的d个特征中仅有非零分量的wi对应的特征才会出现在最终模型中++ ,因此,++++求解L1范数正则化的结果是仅采用了一部分初始特征的模型。也就是说,基于L1正则化的学习方法是一种嵌入式特征选择方法++++。

28.4.2 L1正则化问题的求解

L1正则化问题的求解可使用近端梯度下降 (Proximal Gradient Descent,简称PGD)​[Combettes and Wajs,2005]​。

对于优化目标 min(x) f(x)+λ||x||1 ,若f(x)可导,且∇f 满足L-Lipschitz条件,即存在常数 L>0 使得

||∇f(x') - ∇f(x)||^2 ≤ L||x' - x||^2

<∇f(x) 是损失函数 f(x) 在点x处的++梯度向量++ ,其第i个分量为偏导数∂f(x)/∂xi 。++梯度向量指向函数值增长最快的方向,指导参数的更新方向,其数值表示增长速率++。

++++L-Lipschitz条件++:梯度的平滑性约束,此条件限制梯度变化的"陡峭程度",若L较小,梯度随x变化平缓;若L较大,梯度可能剧烈波动++。例如:

二次函数f(x)=(1/2)xᵀAx + bx+c (A为对称矩阵 | xᵀx=||x||^2) 的梯度为∇f(x)=Ax+b,其Lipschitz常数为∥A∥2 (矩阵的谱范数)。

++++这一性质是梯度下降收敛性证明的核心! 若梯度不满足L-Lipschitz条件,算法可能发散或振荡++++。

总结:∇f(x)是梯度向量,指导参数更新方向;L-Lipschitz条件约束梯度变化速率,保障学习算法收敛。>

则在xk附近可将f(x)通过二阶泰勒展式近似为 f(x) = (L/2)||x - (xk - (1/L)∇f(xk))||^2 + const
其中const是与X无关的常数。

上式的最小值在xk+1获得:xk+1 = xk - (1/L)∇f(xk)
通过梯度下降法对f(x)进行最小化,将f(x)二阶泰勒展式代入优化目标,

在每一步对f(x)进行梯度下降迭代的同时考虑L1范数最小化。
可先计算 z=xk - (1/L)∇f(xk),然后求解 xk+1 = argmin(x) (L/2)||x-z||^2 + λ||x||1
令(x)i、(xk+1)i、(z)i分别表示x、xk+1与z的第i个分量,上述xk+1计算式有闭式解,如图所示:

通过PGD能使LASSO和其他基于L1范数最小化的方法得以求解。

<PGD交替处理f(x)梯度的平滑下降与非平滑的正则项。>

相关推荐
小陈工2 小时前
2026年3月31日技术资讯洞察:AI智能体安全、异步编程突破与Python运行时演进
开发语言·jvm·数据库·人工智能·python·安全·oracle
香港科大商学院内地办事处2 小时前
港科资讯|郑光廷教授出席国际科技组织发展与全球科技治理论坛 分享协作实践
人工智能·科技
Westward-sun.2 小时前
基于 OpenCV DNN 模块实现图像风格迁移
人工智能·神经网络·opencv·计算机视觉·dnn
AI枫林晚2 小时前
源码解析Claude Code 项目 queryLoop 运行机制分析
人工智能·架构
AI攻城狮2 小时前
OpenClaw Exec Approvals 机制:在安全与效率之间寻找平衡
人工智能·云原生·aigc
太难了啊2 小时前
5分钟实现你的第一个 Node.js 智能体
人工智能·node.js
灵机一物2 小时前
灵机一物AI智能电商小程序(已上线)-从需求到上线,2天用AI搞定电商签到、分享送积分功能
人工智能·ai编程·github copilot·claude code·电商开发·积分系统·全流程开发
Ferries2 小时前
《从前端到 Agent》系列|02:应用层-提示词工程 (Prompt Engineering)
前端·人工智能·深度学习
太难了啊2 小时前
智能体的两种灵魂:ReAct 与 Plan-and-Solve 深度对决
人工智能