Feature Selection详解(附带Relief、Relief-F、LVM详解)(一)

本文详细介绍了特征选择的重要性,包括避免维度灾难和提高学习效率。重点阐述了过滤式特征选择方法,特别是Relief和Relief-F算法,解释了它们的工作原理、优缺点,并指出Relief-F如何解决原始Relief算法在处理不完全数据和多类别问题上的局限性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Feature Selection详解

第二十五次写博客,本人数学基础不是太好,如果有幸能得到读者指正,感激不尽,希望能借此机会向大家学习。这一篇主要是针对特征选择问题的几种常见方法进行阐述,并介绍其中几种比较经典的特征选择算法(Relief、Relief-F、LVM)。

特征选择

  “特征选择”(Feature Selection)是一种数据预处理(Data Preprocessing)手段,一般是在明确机器学习任务并且获得数据后,就对数据进行特征选择,然后再使用这一批数据训练学习器。
  为什么需要特征选择呢?在现实任务中,我们常常会遇到维度很高(属性很多)的数据集,在这种情况下常常会在训练学习器的过程中遇到“维度灾难”(Dimension Disaster)问题,这时对数据集的重要特征提取就变得十分重要。因此,特征选择作为另一种处理高维数据的技术,与之前讲过的降维有相似的目的,都可以大大减轻学习过程中的维数灾难问题。由于原始样本空间中存在一些“无关属性”(即与学习任务无关的属性),或是一些“冗余属性”(即可以通过其他属性推演出来的属性,例如房屋价格可以通过房屋面积和每平方米的价格推演出来)。
  特征选择的最终目标是从原始特征集合中选取一个包含了所有重要信息的特征子集,基本的方法是首先产生一个“候选子集”,然后评价他的好坏,并基于评价结果产生下一个候选子集,再对其进行评价,循环往复直到无法找到更好的候选子集为止。这其中涉及到了两个重要的步骤,一是子集搜索,二是子集评价。

子集搜索

  “前向搜索”(Forward Search)首先从数据集的全部属性中选择一个最优的特征作为初始候选子集,然后每次都在上一轮得到的候选子集中加入一个属性,使该候选子集成为当前最优的,如果该轮得到的最优候选子集与上一轮得到的候选子集相比评价比较差,那么选择上一轮的候选子集作为这个数据集的最优特征子集。
  “后向搜索”(Backward Search)与前向搜索的过程正好相反,他首先将数据集的全部属性的集合作为初始候选子集,然后从该集合中剔除一个属性以得到该轮的最优候选子集,重复这一步骤直到无法找到更好的候选子集为止,同样,如果该轮得到的最优候选子集与上一轮得到的候选子集相比评价比较差,那么选择上一轮的候选子集作为这个数据集的最优特征子集。
  “双向搜索”(Bidirectional Search)则是上述两种搜索方法的综合,在每一轮迭代中增加一个相关属性,而且这些增加的属性在和后续迭代中不会被剔除,同时剔除无关或者冗余的属性。
  上述方法都是“贪心”的,如果不使用上述方法就不得不对整个特征空间进行穷举。

子集评价

  给定数据集DDD,假定DDD中第iii类样本所占的比例为pi(i=1,2,...,∣y∣)p_{i}\left(i=1,2,...,|y|\right)pi(i=1,2,...,y),假设样本属性均为离散型,对于特征子集AAA,假定根据其取值将DDD分成了个VVV子集{ D1,D2,...,DV}\{D^1,D^2,...,D^V\}{ D1,D2,...,DV},每个子集中的样本在AAA上的取值相同,于是特征子集AAA的信息增益可以通过下式计算
Gain(A)=Ent(D)−∑v=1V∣Dv∣∣D∣Ent(Dv) \text{Gain}\left(A\right)=Ent\left(D\right)-\sum^{V}_{v=1}\frac{|D^{v}|}{|D|}Ent\left(D^{v}\right) Gain(A)=Ent(D)v=1VDDvEnt(Dv)
其中,信息熵定义为
Ent(D)=−∑k=1∣y∣pklog⁡2pk Ent\left(D\right)=-\sum^{|y|}_{k=1}p_k\log^{p_k}_2 Ent(D)=k=1ypklog2pk
信息增益越大,那么特征子集AAA中有助于分类的信息越多,因此可以使用信息增益作为特征子集的评价标准。其他“多样性度量”例如不合度量、相关系数等,稍加调整都可以用于特征子集的评价。

特征选择方法

  将特征子集搜索域特征子集评价相结合就可以得到特征选择方法,例如将前向搜索与信息熵相结合,这显然与决策树算法非常类似,事实上,决策树也可以应用于特征选择,树结点的划分属性所组成的集合就是选择出的特征子集。其他的特征选择方法未必像决策树特征选择这么明显,但他们实质上都是显式或隐式的结合了某种(或多种)子集搜索和子集评价机制。常见的特征选择方法大致可以分为三大类:过滤式(filter)、包裹式(wrapper)和嵌入式(embedding)。

“过滤式”特征选择

  “过滤式”方法首先对数据集进行特征选择,然后在训练学习器,因此特征选择过程与后续学习器的训练无关。其中最著名的方法是Kira和Rendell在1992年提出来的Relief(Relevant Features),以及由Kononenko于1994年提出的上述算法的改进版Relief-F,这两种方法通过设计出一个“相关统计量”来度量某个特征对于学习任务的重要性,下面分别介绍这两种算法。
1. Relief(Relevant Features)
  该算法是一种基于特征权重(feature weight)的算法,灵感来源于1991年提出的“基于实例的学习”(Instance-based Learning),目的是为了解决现实任务中的概念学习问题,由于原始数据集中过多的特征会对要学习到的“目标概念”(target concept)产生不良的影响,例如,维度过高会导致计算效率的降低,过多的无关信息会造成预测精确度的下降,因此特征选择对于提高算法效率和精度十分重要。原文通过对之前提出的特征选择算法进行分析,提出了一种非启发式的、鲁棒性高、即使特征之间有相关性也同样适用的特征选择方法。
  给定数据集SSS,每个样本点x(x1,x1,...,xp)\mathbf{x}\left(\mathbf{x}_1,\mathbf{x}_1,...,\mathbf{x}_p\right)x(x1,x1,...,xp)是一个ppp维向量,即原始数据集的特征个数为ppp,采样个数为mmm和一个合适的阈值τ(0≤τ≤1)\tau\left(0\leq{\tau\leq{1}}\right)τ(0

### Relief算法简介 Relief算法是种经典的特征权重评估方法,特别适用于处理具有大量输入变量的数据集。该算法通过迭代方更新各个特征的重要性评分,从而识别出对分类最有帮助的属性[^1]。 ### 工作机制 核心思想在于比较邻居样本之间的差异来估计特征的有效性。具体来说: - 对于每个实例,找到最近的同类别邻居(命中)和不同类别的邻居(错过) - 计算这些邻居之间在各维度上的差值 - 更新相应特征得分:如果某个特征能很好地区分两类,则增加其分数;反之则降低分数 这种机制使得Relief不仅能够区分线性和非线性的关系模,而且对于噪声也有较好的鲁棒性。 ### MATLAB实现示例 下面给出段简单的MATLAB代码用于演示如何利用Relief进行特征选择: ```matlab % 加载数据集并初始化参数 load fisheriris; data = meas; % 输入特征矩阵 labels = species; % 类别标签向量 numFeatures = size(data, 2); weights = zeros(1, numFeatures); % 设置超参数k表示近邻数 knnK = 5; for i = 1:size(data, 1) currentInstance = data(i,:); % 寻找最接近的不同类样本 (misses) 和同类样本(hits) missesDistances = pdist2(currentInstance, ... data(labels ~= labels{i}, :)); hitsDistances = pdist2(currentInstance,... data(labels == labels{i}, :)); [~, missIdx] = min(missesDistances); [~, hitIdx] = min(hitsDistances); nearestMiss = data(find(labels~=labels{i}),:)(missIdx,:); nearestHit = data(find(labels==labels{i}),:)(hitIdx,:); diffToMiss = abs(nearestMiss - currentInstance); diffToHit = abs(nearestHit - currentInstance); weights = weights + diffToMiss - diffToHit; end disp('Feature Weights:'); disp(weights'); ``` 此段程序实现了基本版的ReliefF算法,并计算出了每个特征的重要程度。注意这只是个简化版本,在实际应用中可能还需要加入更多优化措施以及考虑多态情况下的扩展形Relief-F等变体。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值