特征选择|一种提升预测模型性能的方法(原理及其优化实现,Matlab)

文章来源于我的个人公众号:KAU的云实验台,主要更新智能优化算法的原理、应用、改进
在这里插入图片描述

如今,生成的数据集呈指数级增长,这将产生具有大量特征和样本的数据集,而显然,某些特征是不相关/冗余的,它们对预测器会产生负面影响。

而特征选择作为一种能够有效降低数据维度、缩减计算成本、提高学习性能的数据预处理方法,现在已广泛地应用于机器学习和数据挖掘中。

主要的特征选择方法包括4种:过滤式、封装式、嵌入式、集成式。

本文主要介绍封装式,它的优点是:在已知后续学习算法的条件下,其选出的特征效果更优于其他方法,但对于高维数据其计算成本较大。

封装式特征选择方法可视为优化问题(准确率最高、特征选择量最少),因此可与KAU前面介绍的多种优化算法相结合,本文将多种优化算法(DBO、GWO、WOA、BWO)应用于特征选择问题,并选用了KNN、SVM、​随机森林作为分类器。

00 目录

1 特征选择相关

2 优化算法相关

2 代码目录

3 算法性能

4 源码获取

01 特征选择相关

1.1 个体的初始化及离散化

特征选择是二值决策优化问题,存在的理论解是指数级的,以1表示选择该特征,0表示不选择该特征。

而多数优化算法都是针对连续优化问题的,因此不仅要将个体的运动范围加以限制,还要将连续的位置转化为二进制。

针对上述问题,首先在个体初始化上,采用下述方法:若产生的随机数小于0.5,则赋为0,反之为1。在这里插入图片描述

其中,xji为第i个个体的第j维,d为特征数量;rand为一个随机数。其图示如下:
在这里插入图片描述

图源文献1

其次,在个体位置更新后,利用Sigmoid函数将其离散化,从而将连续位置向量映射到{0,1}:
在这里插入图片描述

在这里插入图片描述

1.2 适应度函数

特征选择作为组合优化问题,有两个主要目标。第一个目标是提高分类性能,第二个目标是所选择的特征数量尽可能少。因此其适应度函数可表达为:找到一个特征子集(即最优解的编码),使分类错误率和所选特征比率加权和最小:

在这里插入图片描述

其中,ER(D)为分类器的分类错误率,|S|是所选特征子集中特征个数,|F|是原始特征集中特征总数。α 和β 用于平衡分类错误率和所选特征比率的关系。

1.3 特征选择算法设计

有了前面两步后,特征选择模型就已经建成,可以用优化算法进行优化了,其流程如下:

在这里插入图片描述

02 优化算法相关

KAU在往期文章中更新过很多优化算法的原理及代码实现,也更新过许多原创改进算法

03 算法性能

3.1 数据集

本文选择UCI机器学习库中的数据集进行测试,直接从数据库中下载的数据为.data格式,这里KAU已将其转化为matlab更易读取的mat格式,部分数据集如下:在这里插入图片描述

3.2 评估指标

由于优化算法具有一定随机性,因此对每个数据集执行n次独立实验以降低偶然因素的影响,采用以下指标对性能进行评估。

①平均分类正确率

即n次运行后获得的平均分类性能。ACC越高则算法性能越好

在这里插入图片描述

②平均特征子集大小

即n次运行后,所选特征子集的平均大小。Size越小则特征选择算法性能越好

在这里插入图片描述

③最佳适应度

即n次运行得到的适应度中的最小值。

在这里插入图片描述

④标准差

标准差是衡量优化算法稳定性的指标,标准差的值越小,意味着算法的稳定性越强。

在这里插入图片描述

⑤平均适应度

即n次运行得到的适应度取均值。值越小则性能越好。
在这里插入图片描述

3.3 运行结果

本文选取了GWO、WOA、DBO、BWO进行优化,同时,可用的分类器包括KNN、SVM、随机森林。当然也可以添加BPNN、LSTM等分类器。部分效果,以UCI数据库中的zoo数据集为例:

SVM(左) ,RF(右)

在这里插入图片描述

KNN

在这里插入图片描述

除迭代曲线外,还会生成相应的数据文件:
在这里插入图片描述

除以上优化算法外,KAU也引入了一些原创算法,获得了更优的性能,部分效果如下:

算法 :AAMCWOA 分类器:SVM
在这里插入图片描述
在这里插入图片描述

算法:MSGWO 分类器:KNN

在这里插入图片描述
在这里插入图片描述

算法:MSIDBO 分类器:KNN
在这里插入图片描述

在这里插入图片描述

算法:MSBWO 分类器:KNN

在这里插入图片描述
在这里插入图片描述

06 源码获取

本文提供几个版本的源码以供不同的需要:

6.1免费版

包含了基本的封装式特征选择算法,代码源于一篇开源的文献,其通过PSO优化SVM的特征选择,可以帮助想要学习特征选择算法的同学。除代码外,考虑到UCI数据库多数数据都是.data格式,在Matlab中使用比较麻烦,KAU也将这些数据转换为.mat格式,更方便调用。

获取方式:公众号后台回复 FS1

6.2 付费版1

即包含了GWO、WOA、DBO、BWO优化的特征选择算法,代码是我重新写的,注释明了,运行逻辑更清晰,能够产生相应的评估指标excel文件,迭代对比曲线(Matlab代码)

获取方式:公众号后台回复 FS2

部分代码:
在这里插入图片描述

6.3 付费版2

除包含付费版1的内容外,还有KAU的原创优化算法优化的特征选择以及相应的函数测试,同样能够产生相应的评估指标excel文件,性能出色,可用于论文中。

获取方式:公众号后台回复 FS3

例如
在这里插入图片描述

封装式特征选择计算成本高,面对高维数据集,还可以考虑基于粗糙集的过滤式特征选择,该方法同样为NP-难问题,可以与优化算法结合,后面KAU也会介绍该方法。

参考文献

[1] 储安琪,丁志军.基于灰狼优化算法的信用评估样本均衡化与特征选择同步处理[J].计算机科学,2022,49(4):134-139.

另:如果有伙伴有待解决的优化问题(各种领域都可),可以发我,我会选择性的更新利用优化算法解决这些问题的文章。

如果这篇文章对你有帮助或启发,可以点击右下角的赞/在看(ง •̀_•́)ง(不点也行),你们的鼓励就是我坚持的动力!若有定制需求,可私信作者。​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/408858.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

奇异递归模板模式应用6-类模板enable_shared_from_this

异步编程中存在一种场景,需要在类中将该类的对象注册到某个回调类或函数中,不能简单地将this传递给回调类中,很可能因为回调时该对象不存在而导致野指针访问(也有可能在析构函数解注册时被回调,造成对象不完整&#xf…

【C语言基础】:操作符详解(一)

文章目录 操作符详解1. 操作符的分类2. 二进制和进制转换2.1 什么是二进制、八进制、十进制、十六进制2.1.1 二进制和进制转换2.1.2 二进制转十进制2.2.3 二进制转八进制2.2.4 二进制转十六进制 3. 源码、反码、补码4. 移位操作符4.1 左移操作符4.2 右移操作符 5. 位操作符&…

IT廉连看——C语言——函数

IT廉连看——C语言——函数 一、函数是什么? 数学中我们常见到函数的概念。但是你了解C语言中的函数吗? 维基百科中对函数的定义:子程序 在计算机科学中,子程序(英语:Subroutine, procedure, function, …

【Java】java异常处理机制(实验五)

目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 1、理解java的异常处理机制 2、掌握try catch结构和thow和thows关键字的用法 二、实验内容 1、编写一个程序,输入某个班某门课程成绩,统计及格人数、不及格人数及课程平均分。设计一个异…

H12-821_59

59.R1、R2、R3、R4运行IS-IS,它们接口的DIS Priority如图所示,假如设备同时启动,则()被选举为D1S.(请填写设备名称、例如R1) 答案:R4 注释: IS-IS中DIS的选举支持抢占。 假设题目说R4最后启动,问谁被选举为DIS,答案仍然是R4。

【嵌入式实践】【芝麻】【设计篇-1】从0到1给电动车添加指纹锁:项目设计思路

0. 前言 该项目是基于stm32F103和指纹模块做了一个通过指纹锁控制电动车的小工具。支持添加指纹、删除指纹,电动车进入P档等待时计时,计时超过5min则自动锁车,计时过程中按刹车可中断P档状态,同时中断锁车计时。改项目我称之为“芝…

NVIDIA Workbench 安装使用图文教程

NVIDIA Workbench 安装使用教程 文章目录 NVIDIA Workbench 安装使用教程1.安装1.1 下载软件1.2 安装软件 2.使用NVIDIA Workbench2.1 创建一个新项目 3.额外提示3.1 当我们没有停止直接关闭或者直接重启电脑后, 再打开我们已经创立的项目的时候可能会出现创建失败等错误信息.3…

Java核心-核心类与API(3)

话接上回,继续核心类与API的学习,这次介绍一下枚举类以及与系统、交互有关的类,需要了解并能使用即可。 一、枚举类 1、概述 枚举也称穷举,简单理解就是把所有可能一一列举出来(穷尽所有可能)。枚举是一…

申请攻读博士学位研究生相关模板资料(包括专家推荐信、学术简历、研究计划及范文、回复导师邮件)

申请攻读博士学位研究生相关模板资料(包括专家推荐信、学术简历、研究计划及范文、回复导师邮件) 博士是对攻读博士学位的研究生的称呼,同样也可用来称呼已获得博士学位的人员。 主要通过拥有博士点的普通高等学校和拥有博士研究生培养资格…

[SUCTF 2019]EasySQL1 题目分析与详解

一、题目介绍 1、题目来源: BUUCTF网站,网址:https://buuoj.cn/challenges 2、题目描述: 通过以上信息,拿到flag。 二、解题思路 首先打开靶机,尝试输入1查看回显,回显如图所示:…

图像读取裁剪与人脸识别

图像读取 Image read ⇒ \Rightarrow ⇒ torchvision.datasets from torchvision import datasets dataset datasets.ImageFolder(data_dir, transformtransforms.Resize((512, 512)))Return value illustration dataset[0][0]是PIL.Image objects,这利用IPyth…

数据结构-列表LinkedList

一,链表的简单的认识. 数组,栈,队列是线性数据结构,但都算不上是动态数据结构,底层都是依托静态数组,但是链表是确实真正意义上的动态数组. 为什么要学习链表? 1,链表时最简单的动态数据结构 2,掌握链表有助于学习更复杂的数据结构,例如,二叉树,trie. 3,学习链表有助于更深入…

LeetCode 1038.从二叉搜索树到更大和树

给定一个二叉搜索树 root (BST),请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。 提醒一下, 二叉搜索树 满足下列约束条件: 节点的左子树仅包含键 小于 节点键的节点。 节点的右子树仅包含键 大于 节点键的节点。 左…

js逆向-2

#md5加密,某宝案例演示。 #免责声明:本文仅供学习使用,请勿用于其他违法行为(╥ω╥)

软件性能测试和功能测试有何联系和区别?第三方软件检测机构简析

软件性能测试和功能测试是软件开发过程中非常重要的两个环节。从根本上说,它们都是为了保证软件质量和可靠性,但它们的目标和方法却有所不同。 软件性能测试是评估软件在特定负载下的性能表现,包括响应时间、吞吐量、并发能力等指标。它通过…

MySQL 学习记录 2

原文:https://blog.iyatt.com/?p13818 13 存储引擎 查看一下前面创建的一张表的创建语句,当时并没有显式指定引擎,MySQL 自动指定的 InnoDB,即默认引擎是这个。 创建表的时候要显式指定引擎可以参考这个语句 查看当前 MySQL …

如何正确使用Postman变量?又该如何灵活设置变量?

引言 Postman变量可以帮助你快速生成测试数据、模拟不同的场景和环境。 但是,如何正确使用Postman变量?又该如何灵活设置变量?这些问题不用担心,接着往下看吧! 理解变量 为什么要使用变量? 如果在多个…

探索Java11新世界:JDK 11新特性详解

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

设计模式篇---观察者模式

文章目录 概念结构实例总结 概念 观察者模式:定义对象之间的一种一对多的依赖关系,使得每当一个对象状态发生改变时,其他相关依赖对象都得到通知并被自动更新。 观察者模式是使用频率较高的一个模式,它建立了对象与对象之间的依赖…

一文读懂列表解析、字典解析、集合解析

一、所谓解析/解析式,也称为推导/推导式,对应英语单词为comprehension,是Python的一种独有特性。解析就是从一个数据序列构建另一个新的数据序列的结构体,其本质是使用一个可迭代对象,按一定规则通过表达式、函数等运算…