特征选择常用算法

article/2025/10/14 16:02:05

特征选择常用算法综述

特征选择的一般过程:

1.生成子集:搜索特征子集,为评价函数提供特征子集

2.评价函数:评价特征子集的好坏

3.停止准则:与评价函数相关,一般是阈值,评价函数达到一定标准后就可停止搜索

4.验证过程:在验证数据集上验证选出来的特征子集的有效性

 

1.生成子集

搜索算法有 完全搜索、启发式搜索、随机搜索 三大类。

(1)完全搜索

<1>宽搜(Breadth First Search):时间复杂度高,不实用

<2>分支界限搜索(Branch and Bound):其实就是宽搜加上深度的限制

<3>定向搜索(Beam Search):其实算是启发式的一种,对宽搜加上每次展开结点数的限制以节省时间空间,对于展开那几个结点由启发式函数确定

<4>最优优先算法(Best First Search):也是有启发式函数,对宽搜取最优结点进行展开

(2)启发式搜索

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

特征子集X从空集开始,每次选择能使得评价函数J(X)最优的一个特征x加入,其实就是贪心算法,缺点是只加不减

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

和SFS相反,从特征全集开始,每次选择使评价函数J(X)最优的特征x剔除,也是贪心,缺点是只减不增

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

SFS和SBS同时开始,当两者搜索到同一个特征子集时停止。

<4>增L去R选择算法(LRS , Plus-l Minus-R Selection)

形式一:从空集开始,每次加L个特征,去除R个特征,使得J最优

形式二:从全集开始,每次去除R个特征,加入L个特征,使J最优。

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

该算法由增L去R发展,不同之处在于L和R是会变化的,它结合了序列前后向选择、增L去R的特点并弥补了缺点。

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

从空集开始,每轮选择子集x加入使得J最优,再选择子集z剔除使得J最优。

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

与①相反,从全集开始,先剔除再加入。

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

一般使用信息增益作为评价函数,待决策树生长后再进行剪枝,最后留下的叶子就是特征子集。

(3)随机算法

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

随机产生特征子集,然后执行SFS或SBS,可作为SFS和SBS的补充,用于跳出局部最优解。

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

模拟退火可在一定程度上避免陷入局部最优,但是可能难以求解。

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

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

 

2.评价函数

用于评价特征子集的好坏,主要分为Filter和Wrapper

(1)Filter

其实就是预处理,利用训练集自身的特点筛选出特征子集后再送入分类器进行学习,与分类器的选择无关。

(2)Wrapper

封装器用选取的特征子集对训练集进行分类,分类的精度作为衡量特征子集好坏的标准。

 

常见的评价函数有:

(1)相关性

基于假设:好的特征子集所包含的特征应该是与分类的相关度较高,而特征之间相关度较低

线性相关系数 

 

(2)距离/相似度

基于假设:好的特征子集应该使得属于同一类的样本距离尽可能小,属于不同类的样本之间的距离尽可能远

常用相似度计算

(3)信息增益

之前讲过了,信息增益体现特征子集的出现对系统信息量的增加。

(4)一致性

若样本1与样本2属于不同的分类,但在特征A、 B上的取值完全一样,那么特征子集{A,B}不应该选作最终的特征集。

(5)分类器错误率

用分类的精度作为评判标准。

 

 

对于文本分类的文本特征提取,大都采用Filter方法进行特征提取,无论是基于词频的VSM方法还是基于语义的方法,大都是通过计算公式对每个特征项进行打分,

最后选择得分最高的k项形成特征子集。Wrapper方法用的很少,我自己认为是文本特征项数量巨大,对于上述不断生成特征子集再去评价实在太慢了,wrapper方法

也是因为效率不高而被舍弃。

 

 

注:上述特征选择常用算法综述摘自博客 http://www.cnblogs.com/heaad/archive/2011/01/02/1924088.html

 

-------------------------------------------------- (* "・∀・)ノ ------◎ 去吧!大师球!!


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

相关文章

常用的特征选择算法介绍

结合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;必须遵守驼峰命名常量名全部大写…

【编码规范篇】| C#编码规范 代码规范总结,包括命名规范,代码规范 注释规范等

&#x1f3ac; 博客主页&#xff1a;https://xiaoy.blog.csdn.net &#x1f3a5; 本文由 呆呆敲代码的小Y 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;Unity精品学习专栏 &#x1f332; 游戏制作专栏推荐&#xff1a;游戏制作分享 &…

编码的一些基本规范

1. 数据库表设计 Rule 1. 【强制】表名小写&#xff0c;多个word之间用英文下横线_分隔Rule 2. 【强制】表名普通表前缀t_;临时表tmp_;备份表bak_;视图v_;主键pk_;外键fk_;唯一索引uix_;普通索引idx_Rule 3. 【强制】关系表统一用relation结尾Rule 4. 【强制】表名和业务字段必…

编码规范汇总【持续更新】

目录 前言规范标准C规范C#规范 规范记录命名硬编码单例类【线程安全】Qt定义类【隐式内存共享】 前言 作为软件工程师&#xff0c;出产物就应该具备工程的健壮性和美观性。因此代码规范是作为软件工程师的职业素养。但总所周知&#xff0c;程序员的工作基本就是在维护一座屎山…

51单片机串口波特率

SCON SCON 0X50工作方式1 波特率需要使用定时器1 波特率 ((2^SMOD)/32) * (定时器溢出率) 定时器溢出率 系统时钟/指令周期/装载数 SMOD 1 &#xff0c;波特率加倍 TH1 TL1 -(FOSC / INSTRU_CYCLE / 32 / BAUD); //Set auto-reload vaule TR1 1;

关于51单片机串口1发送完整的数据包

关于51单片机串口1发送完整的数据包 在参考这样的协议的条件下我们想发送一套完整的数据包该如何发送呢&#xff1f;可以设计这样的程序。 1. 串行口1接收特定包头数据包函数。 参数: Uart_Rec_Data&#xff1a;串口接收到的数据 &#xff1b; USER_Get_DataPacket: 数据存储目…

51单片机串口收发

#include<reg52.h>#define uint unsigned int #define uchar unsigned char/*本代码实现串口的收发功能&#xff0c;PC发送什么单片机就接收什么&#xff0c; 然后单片机又把接收的发出去&#xff0c;本次编写了在发送单个字符串 函数上添加了字符串函数&#xff0c;方便…