特征选择|一种提升预测模型性能的方法(原理及其优化实现,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.

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springBoot整合Redis(一、Jedis操作Redis)

在springboot环境下连接redis的方法有很多,首先最简单的就是直接通过jedis类来连接,jedis类就相当于是redis的客户端表示。 但是因为现在比较常用的是:StringRedisTemplate和RedisTemplate,所以jedis只做简单的介绍。 一、Jedis…

powershell中安装git

以管理员权限打开 PowerShell。 在 PowerShell 中,你可以使用 winget 这个 Windows 的包管理器来安装 Git。下列命令会安装 Git: winget install --id Git.Git -e --source winget另一种方式是直接从 Git 官方网站下载安装程序,并运行它完…

Langchain-Chatchat部署总结

项目地址: https://github.com/chatchat-space/Langchain-Chatchat 整体安装比较方便,在阿里云购买云主机,购买的国外站点机器, 该项目运行最佳坏境为 Linux Ubuntu 22.04.5Python 版本 3.11.7CUDA 版本: 12.1torch2.1.2 使…

Spring的优点

1.方便解耦,简化开发 Spring就是一个容器,可以将所有对象创建和关系维护交给Spring管理。 2.AOP编程支持 面向切面编程,方便实现程序进行权限拦截,运行监控等功能。 3.声明式事务的支持 通过配置完成事务的管理,…

Vue全局事件防止重复点击(等待请求)【进阶版】

继《Vue全局指令防止重复点击(等待请求)》之后,感觉指令方式还是不太友好,而且嵌套闭包比较麻烦,于是想到了Vue的全局混入,利用混入,给组件绑定click事件。 一、实现原理 与指令方式大致一样&…

针对小型企业网络防护的免费防火墙软件

针对小型企业网络防护,以下是一些适合的防火墙软件/解决方案: pfSense:pfSense 是一款基于 FreeBSD 的开源防火墙和路由器软件,提供丰富的功能和灵活的配置选项,适合用于小型企业网络防护。它支持多种功能,…

代码随想录算法训练营第五十五天| 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

309.最佳买卖股票时机含冷冻期 题目链接:. - 力扣(LeetCode) 解题思路:今天若买入,应当是前天积攒的利润减去当前股票 java: class Solution {public int maxProfit(int[] prices) {if (prices null |…

Linux 网络命令指南

目录 配置IP地址和子网掩码 网络接口的详细信息 测试与目标主机的连通性 下载文件或内容 远程登录,进行远程管理和协作 CentOS / Red Hat(使用 firewalld) 关闭防火墙 开启防火墙 配置TCP端口(假设使用3306端口&#xff…

最短路径算法总结(Dijkstra、Bellman-ford、SPFA和Floyd)

在最短路径算法中,常用的有Dijkstra、Bellman-ford、spfa、Floyd这四大算法 Dijkstra:迪克斯特拉算法Bellman-ford:贝尔曼-福特算法SPFA:Shortest Path Faster Algorithm算法Floyd:弗洛伊德算法 四大算法介绍 简介 …

一键获取电商平台商品信息,快速提高电商业务效率

阿里巴巴店铺所有商品API接口技术全解析 一、引言 在阿里巴巴这个全球领先的电商平台上,店铺所有商品API接口(item_search_shop)为开发者提供了一个便捷的途径,能够获取店铺的所有商品信息。通过这一接口,无论是数据…

Web UI自动化测试原理

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

【深度学习笔记】3_7 softmax回归的简介实现

注:本文为《动手学深度学习》开源内容,仅为个人学习记录,无抄袭搬运意图 3.7 softmax回归的简洁实现 我们在3.3节(线性回归的简洁实现)中已经了解了使用Pytorch实现模型的便利。下面,让我们再次使用Pytorc…

每日五道java面试题之spring篇(六)

目录: 第一题 ApplicationContext通常的实现是什么?第二题 什么是Spring的依赖注入?第三题 依赖注入的基本原则第四题 依赖注入有什么优势?第五题 有哪些不同类型的依赖注入实现方式? 第一题 ApplicationContext通常的…

d3dcompiler_47.dll是什么,电脑出现d3dcompiler_47.dll丢失如何解决

当打开软件时提示“d3dcompiler_47.dll丢失”时,用户通常会看到类似于以下的错误消息: “无法启动此程序,因为计算机中丢失了d3dcompiler_47.dll。尝试重新安装该程序以解决此问题。” “找不到d3dcompiler_47.dll文件,因此应用…

分布式一致性软件-zookeeper

在我们进行软件开发过程中,为了实现某个功能可能借助多个软件,如存储数据的数据库软件:MySQL,Redis;消息中间件:rocketMq,kafka等。那么在分布式系统中,如果想实现数据一致性&#x…

[git] 根据master更新本地分支

git 当前分支 t1 拉取远程master分支, 并更新将master分支合并到当前分支t1 git fetch origin master git merge origin/master t1第一行命令 git fetch origin master 会从远程仓库中获取最新的 master 分支代码,将其保存到本地的 origin/master 分支。 第二行命…

数据库原理及应用(MySQL版在线实训版)

学习视频:学生学习页面 (xueyinonline.com) 头歌实验:虚拟教研室-数据库原理及应用 (educoder.net) 习题答案:数据库原理及应用(MySQL版在线实训版)-习题答案 陈业斌 - 道客巴巴 (doc88.com)

[C++]虚函数用法

讲虚函数之前先讲讲面向对象的三大特性:封装、继承、多态。 1、封装 封装是指将数据(属性)和操作数据的方法(函数)封装在一个单元中,这个单元就是类。封装的主要目的是隐藏类的内部实现细节,只…

Java内部类的使用与应用

内部类的使用与应用 1. 内部类用法 普通内部类: 实例化内部类对象需要先实例化外部类对象,然后再通过OuterClassName.new InnerClassName()方式实例化内部类。内部类对象在创建后会与外部类对象秘密链接,因此无法独立于外部类创建内部类对象…

JWT学习笔记

了解 JWT Token 释义及使用 | Authing 文档 JSON Web Token Introduction - jwt.io JSON Web Token (JWT,RFC 7519 (opens new window)),是为了在网络应用环境间传递声明而执行的一种基于 JSON 的开放标准((RFC 7519)。该 token 被设计为紧凑…