Feature Selection详解

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

特征选择

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

子集搜索

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

子集评价

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

特征选择方法

  将特征子集搜索域特征子集评价相结合就可以得到特征选择方法,例如将前向搜索与信息熵相结合,这显然与决策树算法非常类似,事实上,决策树也可以应用于特征选择,树结点的划分属性所组成的集合就是选择出的特征子集。其他的特征选择方法未必像决策树特征选择这么明显,但他们实质上都是显式或隐式的结合了某种(或多种)子集搜索和子集评价机制。常见的特征选择方法大致可以分为三大类:过滤式(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)产生不良的影响,例如,维度过高会导致计算效率的降低,过多的无关信息会造成预测精确度的下降,因此特征选择对于提高算法效率和精度十分重要。原文通过对之前提出的特征选择算法进行分析,提出了一种非启发式的、鲁棒性高、即使特征之间有相关性也同样适用的特征选择方法。
  给定数据集 S S S,每个样本点 x ( x 1 , x 1 , . . . , x p ) \mathbf{x}\left(\mathbf{x}_1,\mathbf{x}_1,...,\mathbf{x}_p\right) x(x1,x1,...,xp)是一个 p p p维向量,即原始数据集的特征个数为 p p p,采样个数为 m m m和一个合适的阈值 τ ( 0 ≤ τ ≤ 1 ) \tau\left(0\leq{\tau\leq{1}}\right) τ(0τ1),Relief通过检测并找出那些在统计学上与当前学习任务相关的特征,这些特征的“相关统计量”要大于之前设定的阈值 τ \tau τ。根据数据集中数据类型的不同,两个样本点的对应特征之间的差别(diff)有如下的计算方法。
  标记型(例如,小雨、中雨、大雨):
(1) diff ( x k , y k ) = { 0 , if  x k = y k 1 , if  x k ≠ y k \text{diff}\left(x_k,y_k\right)= \begin{cases} 0, & \text{if $x_k=y_k$} \\[2ex] 1, & \text{if $x_k\neq{y_k}$} \end{cases} \tag 1 diff(xk,yk)=0,1,ifxk=ykifxk̸=yk(1)
  数值型(离散型或连续型):
(2) diff ( x k , y k ) = ( x k − y k ) / n u k \text{diff}\left(x_k,y_k\right)= \left(x_k-y_k\right)/nu_k \tag 2 diff(xk,yk)=(xkyk)/nuk(2)
(3) diff ( x k , y k ) = ∣ x k − y k ∣ \text{diff}\left(x_k,y_k\right)=|x_k-y_k| \tag 3 diff(xk,yk)=xkyk(3)
以上各式中, x k x_k xky k y_k yk分别是样本点 x \mathbf{x} xy \mathbf{y} y的第 k k k个特征值,需要注意的是在处理数值型数据集时,可以使用式(2)或(3),其中式(2)的 x k x_k xky k y_k yk是未经规范化的,而 n u k nu_k nuk是一个用来将 diff ( x k , y k ) \text{diff}\left(x_k,y_k\right) diff(xk,yk)规范化到 [ 0 , 1 ] [0,1] [0,1]之间的规范单元,式(3)中的 x k x_k xky k y_k yk则是已经规范到 [ 0 , 1 ] [0,1] [0,1]之间的值。
  Relief算法的伪代码如下图所示,

图1 Relief算法

算法第1行:输入量是数据集 S S S,采样个数 m m m和阈值 τ \tau τ
算法第2-3行:将数据集按正负标记划分为两个集合 S + S^+ S+S − S^- S(由此可见Relief只能应用在二分类问题上);
算法第4行:初始化特征权重向量 W \mathbf{W} W
算法第5-14行:循环次数是一开始设定的采样个数 m m m,每次循环都要执行如下步骤,a.从数据集中随机采样得到样本点 x \mathbf{x} x,b.从正样本集合 S + S^+ S+中选择距离 x \mathbf{x} x最近的样本点 z + \mathbf{z}^+ z+,c.从负样本集合 S − S^- S中同样选择距离 x \mathbf{x} x最近的样本点 z − \mathbf{z}^- z,d.如果 x \mathbf{x} xz + \mathbf{z}^+ z+的标记相同,那么将 N e a r − h i t Near-hit Nearhit设定为 z + \mathbf{z}^+ z+N e a r − m i s s Near-miss Nearmiss设定为 z − \mathbf{z}^- z,否则相反,e.根据上一步得到的 N e a r − h i t Near-hit NearhitN e a r − m i s s Near-miss Nearmiss对权重向量 W \mathbf{W} W进行更新,更新函数 update-weight ( ) \text{update-weight}\left(\right) update-weight()的描述在算法第20-22行;
算法第15行:计算每个特征与学习任务的相关度 R e l e v a n c e Relevance Relevance
算法第16-19行:如果第 i i i个特征的相关度 R e l e v a n c e i Relevance_i Relevancei大于阈值 τ \tau τ,就将其作为相关特征保留下来,剔除那些低相关度的特征;
算法第20-22行: update-weight ( ) \text{update-weight}\left(\right) update-weight()函数根据每次循环采样得到的 x \mathbf{x} xN e a r − h i t Near-hit NearhitN e a r − m i s s Near-miss Nearmiss以及 diff \text{diff} diff的计算方法,对权重向量中的每个分量进行更新。
从算法第22行所示的权重更新公式可以看出, diff ( x i , n e a r − h i t i ) \text{diff}\left(x_i,near-hit_i\right) diff(xi,nearhiti)越小代表样本点 x \mathbf{x} x在第 i i i个维度上与相同标记的样本点距离越近,即第 i i i个特征越有助于对样本点 x \mathbf{x} x进行正确分类, diff ( x i , n e a r − m i s s i ) \text{diff}\left(x_i,near-miss_i\right) diff(xi,nearmissi)越小代表第 i i i个特征越不利于对样本点 x \mathbf{x} x进行正确分类,因此越是对当前学习任务有利的特征,其权重越大,相关度也越高,这正好符合Relief算法的根本目的。文章中还根据切比雪夫不等式推导了阈值 τ \tau τ的最佳取值与采样数 m m m和人工设置的算法可以容忍的最高第一类错误率 α \alpha α有关,当然也可以根据观察直接得出合适的 τ \tau τ。另外,该算法的时间复杂度是 O ( p m ) O\left(pm\right) O(pm),随着采样数的增加乘线性增长,因此不会受到数据集大小的影响,而且即使是在小样本集上,该算法也可以有效的剔除无关特征,但是就像之前提到的,该算法只适用于二分类问题,而且不能处理冗余特征。
2. Relief-F
  该算法作为Relief算法的扩展,于1994年由Kononenko提出,解决了原始Relief算法在处理不完全的、有噪声的、多类别标记的数据集上遇到的问题,文中提出一系列改进算法(Relief-A、Relief-B、…Relief-F),在Relief-D中为了解决样本点丢失特征值问题,引入了一种计算 diff ( x k , y k ) \text{diff}\left(x_k,y_k\right) diff(xk,yk)的新方法:两个样本 x \mathbf{x} xy \mathbf{y} y在指定的第 k k k个特征上的值不同,如果相同那么 diff ( x k , y k ) = 0 \text{diff}\left(x_k,y_k\right)=0 diff(xk,yk)=0,下面首先假设样本 x \mathbf{x} x在选定的特征上的值丢失,那么通过下式计算
diff ( x k , y k ) = 1 − P ( y k ∣ class ( x ) ) \text{diff}\left(x_k,y_k\right)=1-P\left(y_k|\text{class}\left(\mathbf{x}\right)\right) diff(xk,yk)=1P(ykclass(x))
其中, P ( y k ∣ class ( x ) ) P\left(y_k|\text{class}\left(\mathbf{x}\right)\right) P(ykclass(x))代表与样本 x \mathbf{x} x的标记相同的集合中,第 k k k个特征的值等于 y k y_k yk的概率,假设样本 x \mathbf{x} xy \mathbf{y} y在选定的特征上的值都丢失,那么通过下式计算
diff ( x k , y k ) = 1 − ∑ v v a l u e k ( P ( v ∣ class ( x ) ) × P ( v ∣ class ( y ) ) ) \text{diff}\left(x_k,y_k\right)=1-\sum^{value_k}_{v}\left(P\left(v|\text{class}\left(\mathbf{x}\right)\right)\times{P\left(v|\text{class}\left(\mathbf{y}\right)\right)}\right) diff(xk,yk)=1vvaluek(P(vclass(x))×P(vclass(y)))
其中, v a l u e k value_k valuek代表第 k k k个特征出现的所有值,但是使用这种计算法方法在处理数值型数据时会遇到问题。
  Relief-F基于上述算法又对处理多类别标记数据集提出了进一步改进,该算法考虑了所有类别标记不同于样本点 x \mathbf{x} x的标记并且与 x \mathbf{x} x距离最接近的样本点的影响,数学表达如下所示
W i = W i − diff ( x i , n e a r − h i t i ) / m + ∑ C ≠ class ( x ) ( P ( C ) × diff ( x i , n e a r − m i s s i C ) ) / m W_i=W_i-\text{diff}\left(x_i,near-hit_i\right)/m+\sum_{C\neq{\text{class}\left(\mathbf{x}\right)}}\left(P\left(C\right)\times\text{diff}\left(x_i,near-miss^C_i\right)\right)/m Wi=Widiff(xi,nearhiti)/m+C̸=class(x)(P(C)×diff(xi,nearmissiC))/m
其中, C C C代表每个不同于样本点 x \mathbf{x} x标记的类别标记, P ( C ) = ∣ S c ∣ / ∣ S ∣ P\left(C\right)=|S_c|/|S| P(C)=Sc/S是数据集中类别标记为 C C C的样本所占的比例, n e a r − m i s s i C near-miss^{C}_i nearmissiC代表类别标记为 C C C的样本集合中与 x \mathbf{x} x最近的样本的第 i i i个特征的取值。


这篇文章主要对过滤式(filter)特征选择方法,以及两个典型算法进行介绍,下一篇将会介绍其他两种选择方法:包裹式(wrapper)和嵌入式(embedding)。

Feature Selection详解(附带Relief、Relief-F、LVM详解)(一)相关推荐

  1. SpringMVC异常处理机制详解[附带源码分析]

    SpringMVC异常处理机制详解[附带源码分析] 参考文章: (1)SpringMVC异常处理机制详解[附带源码分析] (2)https://www.cnblogs.com/fangjian0423 ...

  2. 矢量控制与V/F控制详解

    原文:http://m.elecfans.com/article/714518.html 一.矢量控制 1.矢量控制简介 矢量控制是一种电机的磁场定向控制方法:以异步电动机的矢量控制为例:它首先通过电 ...

  3. 特征选择(Feature Selection)

    主要内容: 为什么要进行特征选择? 什么是特征选择? 怎么进行特征选择 特征选择: 在现实生活中,一个对象往往具有很多属性(以下称为特征),这些特征大致可以被分成三种主要的类型: 相关特征:对于学习任 ...

  4. 特征选择与稀疏学习(Feature Selection and Sparse Learning)

    本博客是针对周志华教授所著<机器学习>的"第11章 特征选择与稀疏学习"部分内容的学习笔记. 在实际使用机器学习算法的过程中,往往在特征选择这一块是一个比较让人模棱两可 ...

  5. 【机器学习】Unsupervised feature selection by regularized self-representation(RSR)

    RSR 参考论文:Unsupervised feature selection by regularized self-representation 作者:Pengfei Zhu , Wangmeng ...

  6. 特征选择综述阅读:A survey on feature selection methods

    目录 1.介绍 2.过滤方法(Filter methods) 2.1相关性标准 2.2 互信息 2.2.1 基于条件互信息的二值数据特性排名标准 2.3 小结 3.包裹式方法(Wrapper meth ...

  7. Feature Selection: A Data Perspective --阅读笔记2 传统数据的特征选择算法

    论文的前一部分 FEATURE SELECTION ON CONVENTIONAL DATA Similarity based Methods Laplacian Score SPEC FEATURE ...

  8. Feature Selection Based on Mutual Information:Criteria of Max-Dependency, Max-Relevance,and Min-Redu

    Feature Selection Based on Mutual Information:Criteria of Max-Dependency, Max-Relevance,and Min-Redu ...

  9. Feature Selection Techniques

    Table of Contents 1  Feature Selection Techniques特征选择技术 1.1  Agenda 1.2  Introduction to Feature Sel ...

最新文章

  1. AI 产品经理:别让你的智能对话产品变“智障”
  2. 【Python】卸载 PyCharm!这才是 Python 小白的最理想的 IDE
  3. 智能卡电子钱包应用密钥体系
  4. matlab运行时风扇,TCFD和CAESES耦合优化案例-轴流风扇
  5. 还在 Bug 不断?不妨试试这 2 个装X技巧
  6. MySQL:常用备份方式(基于5.7)
  7. golang使用http client发起get和post请求示例
  8. timesten mysql_timesten:TT0802错误
  9. 一篇吃透前置加加和后置加加(附练习题)
  10. 贝叶斯分析好坏_交易必读|浅谈贝叶斯分析
  11. 想要学简单的office该用哪款软件?
  12. Python 文本生僻字判定和拼音标注脚本
  13. sld中两个条件同时成立时样式配置
  14. c语言如何判定是32位系统还是64位系统
  15. 手机如何当win10电脑摄像头使用
  16. 国际版抖音加群 振兴中华
  17. 使用三丰云主机搭建青龙面板保姆级教程
  18. Tekton系列之实践篇-如何用Jenkins来管理Tekton
  19. 5G NR Spec Introduction
  20. 解决华硕飞行堡垒性能切换问题

热门文章

  1. (4)AES分组加密算法(原理详解)
  2. cip查询(中国新闻出版信息网cip查询)
  3. 【XSY2485】MST(最小生成树+倍增lca+并查集)
  4. 原型与原型链的学习理解
  5. Linux SWAP 交换分区配置说明(转)
  6. Mysql数据库基本知识二:表的基础操作
  7. make: *** No targets specified and no makefile found. Stop.错误解决办法
  8. java sql语句模糊查询
  9. python 3.8安装pymssql
  10. leaflet 加载天地图