用遗传算法进行特征选择

article/2025/10/14 14:30:31

文章目录

  • 一、问题举例
  • 二、算法描述
    • 1、基于类内类间距离的可分性判据
    • 2、遗传算法(Genetic Algorithm)
      • 1) 初始化种群
      • 2)计算当前种群 M(t)中每条染色体的适应度值 f(m)
      • 3)基于适应度值的选择
      • 4)交叉
      • 5)变异
      • 6)重复迭代
    • 3、顺序前进法和顺序后退法
  • 三、结果
    • 1、在 sonar 数据集上验证遗传算法
    • 2、在 Iris 数据集上验证遗传算法
    • 3、顺序前进法和顺序后退法
    • 5、对比算法:顺序前进法和顺序后退法
  • 四、总结
  • 五、代码

一、问题举例

要求:在Sonar和Iris数据集上进行验证遗传算法特征选择性能
对比算法:顺序前进法和顺序后退法
特征选择由类别可分性判据+搜索算法实现

二、算法描述

1、基于类内类间距离的可分性判据

  要进行特征选择,首先要确定选择的准则,也就是如何评价选出的一组特征。确定了评价准则后,特征选择问题就变成从D个特征中选出使准则函数最优的d个特征(d < D)。
  Fisher线性判别采用了使样本投影到一维后类内离散度尽可能小,类间离散度尽可能大的准则来确定最佳的投影方向,这其实就是一个直观的类别可分性判据。可以用两类中的任意两两样本之间的距离的平均来代表两个类之间的距离,现在可以将其推导到多类情况。
  令 x_k^((i)), x_l^((j)) 分别为 ω_i 类及 ω_i 类中的D维特征向量,δ(x_k((i))+x_l((j)) ) 为这两个向量间的距离,则各类特征向量之间的平均距离为
在这里插入图片描述
  式中c为类别数,ni为 ωi类中的样本数,nj为 ωj类中的样本数,Pi 、Pj是相应类别的先验概率。
  多维空间中两个向量之间有很多种距离度量,在欧式距离情况下有

在这里插入图片描述
  用 m_i表示第i类样本集的均值向量
在这里插入图片描述  用 ??表示所有各类的样本集的总平均向量
在这里插入图片描述
  将上述式子代入到平均距离的公式得
在这里插入图片描述
  也可以用下面定义的矩阵写出 Jd(x)的表达式,令
在这里插入图片描述
  因为要保证类间离散度尽可能大,类内离散度尽可能小,故定义以下距离判据
在这里插入图片描述
  基于距离的可分性判据定义直观、易于实现,因此比较常用。没有直接考虑 样本的分布情况,很难在理论上建立起它们与分类错误率的联系,而且当两类样 本的分布有重叠时,这些判据不能反映重叠的情况。为了简化计算,采用基于类 内类间距离的可分性判据,且根据公式可知,Jd(x)的值越大,表示特征的可分离性越好.

2、遗传算法(Genetic Algorithm)

   遗传算法把候选对象编码为一条染色体(chromesome),在特征选择中,如 果目标是从 D 个特征中选择 d 个,则把所有特征描述为一条由 D 个 0/1 字符组 成的字符串,0 代表该特征没有被选中,1 代表该特征被选中,这个字符串就叫 做染色体,记作 m。显然,要求的是一条有且仅有 d 个 1 的染色体,这样的染色 体共有 ?? ?种。 优化的目标被描述成适应度(fitness)函数,每一条染色体对应一个适应 度值 f(m)。可以用前面定义的基于类内类间距离的类别可分性判据 Jd(x)作 为适应度。
   遗传算法具体步骤如下

1) 初始化种群

   以 sonar 数据集为例,一条染色体为一个 1*60 维的行向量,假设我们要从 60 个特征中选 30 个特征,则初始化的一个染色体为将一个零向量的随机 30 位 变成 1,这样就从 60 维特征中随机选了 30 维,如下所示
在这里插入图片描述

   重复上述过程 n 次,则可以得到一个有 n 条染色体的初代种群 M(0),每条 染色体都不尽相同。

2)计算当前种群 M(t)中每条染色体的适应度值 f(m)

   将每一条染色体的适应度值(fitness)求出,即将每一条染色体所代表的 d 维特征选出,将原 Sonar 数据集变成一个 208*d 维的矩阵,计算出基于类内类 间距离的可分性判据 Jd(x),作为该染色体的适应度值 f(m)。
   经过 n 次计算之后,可以得到每条染色体的适应度值。

3)基于适应度值的选择

   按照选择概率 p(f(m))对种群中的染色体进行采样,由采样出的染色体经过 一定的操作繁殖出下一代染色体,组成下一代的种群 M(t+1)。
   将种群中每条染色体的适应度值逐个累加,得到一些从 0 到 1 的区间,如图所示
在这里插入图片描述
   假设一个种群有 4 个条染色体,每条染色体的适应度值为 0.14、0.49、0.06、 0.31,则将这些适应度值逐个累加起来,得到四个区间(0,0.14)、(0.14,0.63)、 (0.63,0.69)、( 0.69,1),每个区间的长度所代表着对应染色体的适应度值。 我们从 0 到 1 中取一个随机数,该数落在哪个区间,就取哪条染色体。重复 n 次, 得到了基于上一代种群适应度值的新子代种群 M(t+1), 而且保证了种群的染色 体数目不改变,恒为 n。

4)交叉

  首先将一个种群平均分成两部分,称为两个父代种群,将这两个父代种群随 机打乱,再从两个父代中分别取一个染色体进行交叉,这样就完成了一次随机匹 配的过程。
   为了使交叉之后的染色体特征维数不变,采用了如下方法:
   先从一个父代染色体中随机选取一个片段(长度为 k),统计该片段中有几 个为 1 的基因,再从与之匹配的父代染色体中寻找长度相同、1 基因数目相同的片段,若找到,则进行交叉操作;若未找到,则寻找下一对父代染色体,直到将 所有父代种群遍历完毕。

5)变异

   基因突变是染色体的某一个位点上基因的改变。同样地,为了使变异之后染 色体中特征数量不变,采用了以下方法:
   先按一定的概率(称为变异概率)选择是否进行变异操作,若是,则随机从 种群中选择一个个体,再随机地选择一个基因进行反转,若该基因由 1 变为了0, 则再随机选一个 0 变成 1,反之也执行同样的操作。直至遍历完种群中所有的个 体。这样就能保证每个染色体的特征个数不会被改变。

6)重复迭代

   在进行完选择、交叉、和变异操作之后,上一代的种群 M(t)已经变成了新 一代的种群 M(t+1)。重复过程(2),在遗传算法迭代的过程中,种群中的染色 体会趋于所选特征数中的最优解,达到一定的迭代次数 t 后,算法停止,输出最 终种群中适应度值最大的染色体,即完成了在 D 维特征中选择 d 个最优的特征。

3、顺序前进法和顺序后退法

   顺序前进法是一种自底向上的方法。第一个特征选择单独最优的特征,第二 个特征从其余所有特征中选择与第一个特征组合在一起后准则最优的特征,后面 的每一个特征都选择与已经入选的特征组合起来最优的特征。
   顺序后退法是一种从顶向下的方法,与顺序前进法相对应。从所有特征逐一 剔除不被选中的特征。每次剔除的特征都是使得剩余的特征的准则函数值最优的 特征。

三、结果

1、在 sonar 数据集上验证遗传算法

   首先看在取 30 维特征的时候,随着遗传算法的迭代,每一代种群的适应度 值收敛情况
在这里插入图片描述
   从图中可以很明显地看出,随着遗传算法迭代次数的增加,每一代种群的适 应度值在逐渐变大。当迭代次数达到 60 次的时候,种群中的最大适应度值趋于 最大,在之后收敛与 0.07 左右.
   经过遗传算法迭代 150 次求得的最优种群如下图
在这里插入图片描述
   图中红色代表 0,蓝色代表 1,横坐标表示特征,纵坐标表示每个染色体。 图中只显示了一部分。可以看见,在迭代后,每个个体所选择的特征趋于一致。
   所选出的适应度值最优的染色体和特征为
在这里插入图片描述
   现在扩展到选择其他个数的特征的情况,将 d 从 1 取到 60,每个 d 都对应 着一个最优适应度值,现横向将其比较
在这里插入图片描述
   从图中可以看出,用遗传算法从 60 维中取 1 到 5 维的时候得出的最优染色 体适应度值最大,在 20 维之后适应度值呈现平稳下降的趋势,最终收敛于 0.03 左右。

2、在 Iris 数据集上验证遗传算法

  由于 Iris 数据集的特征只有 4 维,特征选择的情况较简单,这里不再赘述。

3、顺序前进法和顺序后退法

  以 Sonar 数据集为例,验证从 60 维中选择 30 维特征的选择情况。
在这里插入图片描述
在这里插入图片描述

5、对比算法:顺序前进法和顺序后退法

   以 Sonar 数据集为例,从 60 维特征中取 1 到 10 维,分别看遗传算法、顺序 前进法、顺序后退法的每一维最优适应度值
在这里插入图片描述

四、总结

  1、遗传算法作为一种解决最优化的一种搜索启发式算法,是进化算法的一 种,在选择特征方面具有显著效果。随着遗传算法迭代次数的增加,每一代种群 的适应度值逐渐收敛于局部最优解,从而能够找到所选择的最优特征。
   2、顺序前进法与单独最优特征的选择方法相比,考虑了一定的特征间组合 的因素,但是其第一个特征仍是仅靠单个特征的准则来选择的,而且每个特征一旦入选 后就无法再剔除,即使它与后面选择的特征并不是最优的组合。
  3、顺序后退法也考虑了特征间的组合,但是由于是自顶向下的方法,很多 进行高维空间进行,计算量比顺序前进法大些。而且顺序后退法在一旦剔除了某 一特征后就无法再把它选入。
  4、通过上图的对比可以看出,遗传算法和顺序前进法选出的最优染色体的 适应度值受维数影响较大,但遗传算法的适应度值要大于顺序前进法。顺序后退 法选出的最优染色体的适应度值不但不受维数影响,而且都要大于遗传算法。得 出的结果为:顺序后退法>遗传算法>顺序前进法。

五、代码

实验环境Python3.6
GitHub地址如下
Pattern recognition / GA
https://github.com/Fangzhenxuan/AI_Projects.git


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

相关文章

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

2.2.1完全搜索 完全搜索分为穷举搜索(Exhaustive)与非穷举搜索(Non-Exhaustive)两类。 (1) 广度优先搜索( Breadth First Search ) 算法描述&#xff1a;广度优先遍历特征子空间。 算法评价&#xff1a;枚举了所有的特征组合&#xff0c;属于穷举搜索&#xff0c;时间复杂度是O…

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

遗传算法寻优 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;…