特征选择-常见的搜索算法

article/2025/10/14 15:01:06

2.2.1完全搜索

  完全搜索分为穷举搜索(Exhaustive)与非穷举搜索(Non-Exhaustive)两类。

  (1) 广度优先搜索( Breadth First Search )

         算法描述:广度优先遍历特征子空间。

  算法评价:枚举了所有的特征组合,属于穷举搜索,时间复杂度是O(2n),实用性不高。

  (2)分支限界搜索( Branch and Bound ) 

         算法描述:在穷举搜索的基础上加入分支限界。例如:若断定某些分支不可能搜索出比当前找到的最优解更优的解,则可以剪掉这些分支。

  (3) 定向搜索(Beam Search )

         算法描述:首先选择N个得分最高的特征作为特征子集,将其加入一个限制最大长度的优先队列,每次从队列中取出得分最高的子集,然后穷举向该子集加入1个特征后产生的所有特征集,将这些特征集加入队列。

  (4) 最优优先搜索( Best First Search )

         算法描述:与定向搜索类似,唯一的不同点是不限制优先队列的长度。

2.2.2 启发式搜索

  (1)序列前向选择( SFS , Sequential Forward Selection )

  算法描述:特征子集X从空集开始,每次选择一个特征x加入特征子集X,使得特征函数J( X)最优。简单说就是,每次都选择一个使得评价函数的取值达到最优的特征加入,其实就是一种简单的贪心算法。

  算法评价:缺点是只能加入特征而不能去除特征。例如:特征A完全依赖于特征BC,可以认为如果加入了特征BCA就是多余的。假设序列前向选择算法首先将A加入特征集,然后又将BC加入,那么特征子集中就包含了多余的特征A


  (2)序列后向选择( SBS , Sequential Backward Selection )

  算法描述:从特征全集O开始,每次从特征集O中剔除一个特征x,使得剔除特征x后评价函数值达到最优。

  算法评价:序列后向选择与序列前向选择正好相反,它的缺点是特征只能去除不能加入。

  另外,SFSSBS都属于贪心算法,容易陷入局部最优值。

  (3) 双向搜索( BDS , Bidirectional Search )

  算法描述:使用序列前向选择(SFS)从空集开始,同时使用序列后向选择(SBS)从全集开始搜索,当两者搜索到一个相同的特征子集C时停止搜索。

  双向搜索的出发点是  。如下图所示,O点代表搜索起点,A点代表搜索目标。灰色的圆代表单向搜索可能的搜索范围,绿色的2个圆表示某次双向搜索的搜索范围,容易证明绿色的面积必定要比灰色的要小。

2. 双向搜索

  (4) LR选择算法( LRS , Plus-L Minus-R Selection )

  该算法有两种形式:

      <1> 算法从空集开始,每轮先加入L个特征,然后从中去除R个特征,使得评价函数值最优。( L > R )

    <2> 算法从全集开始,每轮先去除R个特征,然后加入L个特征,使得评价函数值最优。( L < R )

  算法评价:增LR选择算法结合了序列前向选择与序列后向选择思想,LR的选择是算法的关键。

  (5) 序列浮动选择( Sequential Floating Selection )

  算法描述:序列浮动选择由增LR选择算法发展而来,该算法与增LR选择算法的不同之处在于:序列浮动选择的LR不是固定的,而是“浮动”的,也就是会变化的。

    序列浮动选择根据搜索方向的不同,有以下两种变种。

    <1>序列浮动前向选择( SFFS , Sequential Floating Forward Selection )

      算法描述:从空集开始,每轮在未选择的特征中选择一个子集x,使加入子集x后评价函数达到最优,然后在已选择的特征中选择子集z,使剔除子集z后评价函数达到最优。

    <2>序列浮动后向选择( SFBS , Sequential Floating Backward Selection )

      算法描述:与SFFS类似,不同之处在于SFBS是从全集开始,每轮先剔除特征,然后加入特征。

           算法评价:序列浮动选择结合了序列前向选择、序列后向选择、增LR选择的特点,并弥补了它们的缺点。

  (6) 决策树( Decision Tree Method , DTM)

         算法描述:在训练样本集上运行C4.5或其他决策树生成算法,待决策树充分生长后,再在树上运行剪枝算法。则最终决策树各分支处的特征就是选出来的特征子集了。决策树方法一般使用信息增益作为评价函数。

2.2.3 随机算法

  (1) 随机产生序列选择算法(RGSS, Random Generation plus Sequential Selection)

  算法描述:随机产生一个特征子集,然后在该子集上执行SFSSBS算法。

  算法评价:可作为SFSSBS的补充,用于跳出局部最优值。

  (2) 模拟退火算法( SA, Simulated Annealing )

    模拟退火算法可参考 大白话解析模拟退火算法。 

    算法评价:模拟退火一定程度克服了序列搜索算法容易陷入局部最优值的缺点,但是若最优解的区域太小(如所谓的“高尔夫球洞”地形),则模拟退火难以求解。

  (3) 遗传算法( GA,  Genetic Algorithms )

    遗传算法可参考 遗传算法入门 。

    算法描述:首先随机产生一批特征子集,并用评价函数给这些特征子集评分,然后通过交叉、突变等操作繁殖出下一代的特征子集,并且评分越高的特征子集被选中参加繁殖的概率越高。这样经过N代的繁殖和优胜劣汰后,种群中就可能产生了评价函数值最高的特征子集。

    随机算法的共同缺点:依赖于随机因素,有实验结果难以重现。


http://chatgpt.dhexx.cn/article/ClKZ2ikI.shtml

相关文章

【特征选择】使用遗传算法进行特征选择

遗传算法寻优 cross_val_score(lgb,train_X,train_y,scoringf1,cvsKfold).mean() # 使用全部特征进行训练0.8508040614085857train_1 train.drop(label,1) cols train_1.columnstrain_1.head()经营期限起是否广告经营是否城镇从业人数注册资本&#xff08;金&#xff09;实…

特征选择 ReliefF算法

一、算法 Relief算法最早由Kira提出. 基本内容&#xff1a;从训练集D中随机选择一个样本R, 然后从和R同类的样本中寻找k最近邻样本H&#xff0c;从和R不同类的样本中寻找k最近邻样本M&#xff0c; 最后按照公式更新特征权重. 算法: 1.置0所有特征权重 2.For i1 to m do 2.1 随机…

特征选择算法-Relief(转)

【转载】数据挖掘之—基于ReliefF和K-means算法的医学应用实例(转自&#xff1a; http://www.cnblogs.com/asxinyu/archive/2013/08/29/3289682.html&#xff09; 数据挖掘方法的提出&#xff0c;让人们有能力最终认识数据的真正价值&#xff0c;即蕴藏在数据中的信息和知识。数…

机器学习特征选择—使用遗传算法进行特征选择

目录 0、前言 1、遗传算法概念 2、基于DEAP库的python遗传算法特征选择 3、我的遗传算法特征选择代码及一些代码函数解析 4、完整代码 5、可能会遇到的错误 0、前言 差不多有大半年没有写博客了&#xff0c;这段时间没有学习什么新的知识和总结&#xff1b;这篇博客内容也…

特征选择算法-Relief

转自&#xff1a;http://www.cnblogs.com/asxinyu/archive/2013/08/29/3289682.html 数据挖掘方法的提出&#xff0c;让人们有能力最终认识数据的真正价值&#xff0c;即蕴藏在数据中的信息和知识。数据挖掘 (DataMiriing)&#xff0c;指的是从大型数据库或数据仓库中提取人们感…

特征选择常用算法

特征选择常用算法综述 特征选择的一般过程&#xff1a; 1.生成子集&#xff1a;搜索特征子集&#xff0c;为评价函数提供特征子集 2.评价函数&#xff1a;评价特征子集的好坏 3.停止准则&#xff1a;与评价函数相关&#xff0c;一般是阈值&#xff0c;评价函数达到一定标准…

常用的特征选择算法介绍

结合Scikit-learn介绍几种常用的特征选择方法 原文 http://dataunion.org/14072.html 主题 特征选择 scikit-learn 特征选择(排序)对于数据科学家、机器学习从业者来说非常重要。好的特征选择能够提升模型的性能&#xff0c;更能帮助我们理解数据的特点、底层结构&#xff…

特征选择(Feature Selection)

主要内容&#xff1a; 为什么要进行特征选择&#xff1f;什么是特征选择&#xff1f;怎么进行特征选择 特征选择&#xff1a; 在现实生活中&#xff0c;一个对象往往具有很多属性&#xff08;以下称为特征&#xff09;&#xff0c;这些特征大致可以被分成三种主要的类型&…

特征选择常用算法综述

1 综述 (1) 什么是特征选择 特征选择 ( Feature Selection )也称特征子集选择( Feature Subset Selection , FSS ) ,或属性选择( Attribute Selection ) ,是指从全部特征中选取一个特征子集,使构造出来的模型更好。 (2) 为什么要做特征选择 在机器学习的实际应用…

浅谈五种常用的特征选择方法

&#x1f446;点击关注&#xff5c;设为星标&#xff5c;干货速递&#x1f446; 在许多机器学习相关的书里&#xff0c;很难找到关于特征选择的内容&#xff0c;因为特征选择要解决的问题往往被视为机器学习的一个子模块&#xff0c;一般不会单独拿出来讨论。 但特征选择是一个…

Python-编码规范

学习内容&#xff1a;Python基础入门知识-代码编写规范 专栏作者&#xff1a;不渴望力量的哈士奇不渴望力量的哈士奇擅长Python全栈白宝书[更新中],⑤ - 数据库开发实战篇,网安之路,等方面的知识,不渴望力量的哈士奇关注云原生,算法,python,集成测试,去中心化,web安全,智能合约…

前端编码规范

最近整理了一份HTML/CSS/JS编码规范&#xff0c;供大家参考。 目录&#xff1a; 一、HTML编码规范 二、CSS编码规范 三、JS编码规范 一、HTML编码规范 1. img标签要写alt属性 根据W3C标准&#xff0c;img标签要写alt属性&#xff0c;如果没有就写一个空的。但是一般要写一个…

C语言编码规范

C语言编码规范 1、代码总体规则 2、代码规范之头文件 3、代码规范之函数 4、标识符命名与定义 5、代码规范之变量 6、宏、常量

【代码规范】常见编码规范

文章来源&#xff1a;公众号-智能化IT系统。 1.明确方法功能&#xff0c;精确&#xff08;而不是近似&#xff09;地实现方法设计。如果一个功能将在多处实现&#xff0c;即使只有两行代码&#xff0c;也应该编写方法实现。 说明&#xff1a; 虽然为仅用一两行就可完成的功能…

Python的编码规范(超详细)

目录 一、前言二、编写规范三、命名规范四、结语 一、前言 编码的规范性对代码的整体展现有着较大的影响。 先让我们看两张规范与不规范的代码截图来感受下。 先让我们看看不规范的吧。 看完有什么感觉吗&#xff1f;或许你会没有感觉&#xff0c;在让我们来看看我自认为很规…

标准的Java编码规范手册

编码规范体现出一个开发者的基本素质&#xff0c;良好的编码规范可以提高团队编码的效率&#xff0c;避免很多不必要的问题。今天分享一个标准的Java编码规范给大家&#xff0c;希望对于大家今后的开发工作带来帮助。 编码规范的意义 在项目开发维护中&#xff0c;编码…

Java编码规范总结(参考腾讯编码规范)

一、java文件组织 文件组织规则&#xff1a;由于超过2000行的程序难以阅读&#xff0c;应该尽量避免出现超过2000行的程序。一个Java源文件都包含一个单一的公共类或接口。若私有类和接口与一个公共类相关联&#xff0c;可以将它们和公共类放入同一个源文件。公共类必须是这个…

编码体系与规范

编码体系与规范 网页编码是指网页中字符的编码方式。目前国内常见的网页字符编码主要有utf-8、gbk、gb2312&#xff0c;其中 utf-8为国际化编码&#xff0c;在各国各地区的网站中都很常见&#xff0c;可以说是最通用的字符编码。此外&#xff0c;有些日本网页会使用EUC-JP、SH…

python编码规范

PE8基本规范&#xff1a; 建议修改在使用的 IDE 中修改 PEP8 的每行字数不超79字符规范&#xff0c;可修改为 Django 建议的 119 字符 一、python编码规范&#xff1a; (一)代码编码&#xff1a; 1、国际惯例&#xff0c;文件编码和 Python 编码格式全部为 utf-8 &#xff0c;…

JAVA编码规范

命名风格 代码命名不能以下划线或者美元符号开头或者结尾代码命名不能以中文拼音或者中文拼音与英文混合方式类名使用UpperCamCamelCase风格&#xff0c;但DO、PO、DTO、VO、BO等除外方法名、参数名、变量名统一使用lowerCamelCase&#xff0c;必须遵守驼峰命名常量名全部大写…