基于麻雀搜索算法的同步优化特征选择 - 附代码

2024-06-18 07:18

本文主要是介绍基于麻雀搜索算法的同步优化特征选择 - 附代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于麻雀搜索算法的同步优化特征选择 - 附代码

文章目录

  • 基于麻雀搜索算法的同步优化特征选择 - 附代码
    • 1.数据集
    • 2.SVM模型建立
    • 3.麻雀搜索算法同步优化特征选择
    • 4.测试结果
    • 5.参考文献:
    • 6.Matlab代码

摘要:针对传统支持向量机在封装式特征选择中分类效果差、子集选取冗余、计算性能易受核函数参数影响的不足, 利用麻雀优化算法对其进行同步优化。

1.数据集

wine 数据的来源是 UCI 数据库 , 记录的是在意大利同一区域里三种不同品种的葡萄酒的化学成分分析,数据里含有 178 个样本,每个样本含有 13 个特征分量(化学成分〉,每个样本 的类别标签已给。将这 178 个样本的 50%作为训练集,另 50%作为测试集 ,用训练集对 SVM 进行训练可以得到分类模型,再用得到的模型对测试集进行类别标签预测。

整体数据存储在 chapter_WineClass. mat ,解释如下: classnumber = 3 ,记录类别数目;

wine, 178 × 13 的 一个 double 型的矩阵,记录 178 个样本的 13 个属性;

wine_ labels, 178 × 1的 一个 double 型的列向盘,记录 178 个样本各自的类别标签 。

请添加图片描述

图1.数据集

2.SVM模型建立

首先需要从原始数据里把训练集和测试集提取出来,然后进行一定的预处理(必要的时候 还需要进行特征提取),之后用训练集对 SVM 进行训练,最后用得到的模型来预测测试集的分类标签。
请添加图片描述

图2.SVM模型

其中数据预处理采用归一化处理:对训练集和测试集进行归一化预处理,采用的归一化映射如下 。
y = x − x m i n x m a x − x m i n (1) y = \frac{x-x_{min}}{x_{max} - x{min}} \tag{1} y=xmaxxminxxmin(1)

3.麻雀搜索算法同步优化特征选择

​ 在元启发式群智能算法优化计算时, 对于不同的优化问题, 种群个体代表不同含义. 针对特征选择问题而言, 其实质是二元优化问题, 优化后的选择特征结果表示仅限于“0”与“1”, 值“0”表示未选择该特征, 值“1”表示选择该特征. 优化选择特征时, 种群的个体解可视为一维向量, 每个维度的原始数据值与 0.5 比较, 大于等于 0.5 则选择该特征, 否则剔除该特征.特征选择可视为多个目标优化问题, 当分类结果中分类准确率较高, 选择特征子集个数较少时说明所得分类效果优秀. 在算法迭代过程中, 一般采用适应度函数来评估每个解的质量. 为了平衡分类准确率和特征子集个数这两个指标.因此,根据SVM分类器所得到的解的分类准确率与特征选择的所选特征子集个数, 设计适应度函数 如下所示:
f i t e n e s s = a r g m a x ( a c c u r a c y [ p r e d i c t ( t r a i n ) ] + a c c u r a c y [ p r e d i c t ( t e s t ) ] + 1 − r / N ) fiteness = argmax(accuracy[predict(train)]+accuracy[predict(test)] + 1 - r/N) fiteness=argmaxaccuracy[predict(train)]+accuracy[predict(test)]+1r/N
其中accuracy[predict(train)],accuracy[predict(test)]分别为训练集和测试集(验证集)准确率,根据自身需要看是只用训练集准确率还是综合考虑验证集准确率,r为选择的特征个数,N为总特征个数。

由于麻雀是求极小值,将目标求最大值转换为求极小值
f i t n e s s = − f i t n e s s fitness = -fitness fitness=fitness
请添加图片描述

4.测试结果

麻雀算法参数设置如下:

%%  麻雀参数设置
% 定义优化参数的个数,在该场景中,优化参数的个数为数据集特征总数 。
%目标函数
fobj = @(x) fun(x,train_wine_labels,train_wine,test_wine_labels,test_wine); 
% 优化参数的个数 特征维度
dim = size(train_wine,2); %特征维度
% 优化参数的取值下限,[0,1],大于0.5为选择该特征,小于0.5为不选择该特征
lb = 0;
ub = 1;
%%  参数设置
pop =10; %麻雀数量
Max_iteration=50;%最大迭代次数             
%% 优化
[Best_pos,Best_score,curve]=SSA(pop,Max_iteration,lb,ub,dim,fobj); 

请添加图片描述
请添加图片描述

基础SVM训练集最终预测准确率:100
基础SVM测试集最终预测准确率:98.8764
SSA特征选择后SVM训练集最终预测准确率:100
SSA特征选择后SVM测试集最终预测准确率:100
总特征数:13
麻雀算法选择的特征总数:9
麻雀算法选择的特征(0为不选择,1为选择):1 0 0 1 1 1 1 0 0 1 1 1 1

从结果来看,经过特征选择后,特征数明显减少,由13维变为9维,而且训练集和测试集精度均能达到比较好的结果。

5.参考文献:

[1]贾鹤鸣,姜子超,李瑶.基于改进秃鹰搜索算法的同步优化特征选择[J/OL].控制与决策:1-9[2021-11-02].https://doi.org/10.13195/j.kzyjc.2020.1025.

6.Matlab代码

这篇关于基于麻雀搜索算法的同步优化特征选择 - 附代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1071638

相关文章

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum