当前位置: 首页 > news >正文

基于二进制草蝉优化算法选择特征并使用 KNN 进行训练(Matlab代码实现)

     目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码

💥1 概述

基于二进制草蝉优化算法选择特征并使用KNN(K-Nearest Neighbors,K最近邻算法)进行训练是一种特征选择和分类算法的组合。这种方法主要用于解决特征选择问题,并利用选定的特征集合来训练KNN分类器。

下面是该算法的基本步骤:

特征选择:

采用二进制草蝉优化算法对原始特征集进行优化,从而选择出最佳特征子集。二进制草蝉优化算法是一种基于草蝉行为的启发式优化算法,用于解决特征选择问题。该算法通过模拟草蝉的生存行为来选择特征子集,以使得目标函数最小化或最大化。

特征提取:

通过二进制草蝉优化算法选择出的最佳特征子集,对原始数据集进行特征提取,得到一个新的数据集,该数据集只包含选定的特征。

数据预处理:

对特征提取后的数据集进行预处理,包括归一化、标准化或其他必要的数据处理步骤,以确保数据的可比性和有效性。

KNN分类器:

使用KNN算法来对处理后的数据集进行分类。KNN是一种常见的分类算法,它通过计算待分类样本与训练样本之间的距离,选取最近的K个训练样本,并根据这K个样本的分类标签来预测待分类样本的标签。

训练和测试:

使用经过特征选择和KNN分类器训练得到的模型,对测试数据进行分类,评估分类结果的准确性和性能。

需要注意的是,特征选择是为了去除冗余和噪音特征,提高分类性能和降低计算复杂度。而KNN作为分类器是一种懒惰学习方法,具有简单易实现的优点,但在大规模数据上可能效率较低。

最终的结果取决于草蝉优化算法的性能、特征选择和KNN分类器的调优以及数据集本身的特性。因此,在实际应用中,可能需要进行多次实验和优化,以选择最合适的特征子集和分类器参数。同时,建议参考相关研究论文和文献,以获得更深入的了解和具体实现细节。

📚2 运行结果

主函数部分代码:

close all
clear
clc
addpath(genpath(cd))
%% load the data
% load winedata.mat
load breast-cancer-wisconsin
% load ionosphere
% load Parliment1984
% load heartdata
load lymphography
%%
% preprocess data to remove Nan entries
for ii=1:size(Tdata,2)nanindex=isnan(Tdata(:,ii));Tdata(nanindex,:)=[];
end
labels=Tdata(:,end);                  %classes
attributesData=Tdata(:,1:end-1);      %wine data
% for ii=1:size(attributesData,2)       %normalize the data
%     attributesData(:,ii)=normalize(attributesData(:,ii));
% end
[rows,colms]=size(attributesData);  %size of data    
%% seprate the data into training and testing
[trainIdx,~,testIdx]=dividerand(rows,0.8,0,0.2);
trainData=attributesData(trainIdx,:);   %training data
testData=attributesData(testIdx,:);     %testing data
trainlabel=labels(trainIdx);            %training labels
testlabel=labels(testIdx);              %testing labels
%% KNN classification
Mdl = fitcknn(trainData,trainlabel,'NumNeighbors',5,'Standardize',1);
predictedLables_KNN=predict(Mdl,testData);
cp=classperf(testlabel,predictedLables_KNN);
err=cp.ErrorRate;
accuracy=cp.CorrectRate;
%% SA optimisation for feature selection
dim=size(attributesData,2);
lb=0;ub=1;
x0=round(rand(1,dim));
fun=@(x) objfun(x,trainData,testData,trainlabel,testlabel,dim);
options = optimoptions(@simulannealbnd,'MaxIterations',150,...'PlotFcn','saplotbestf');
[x,fval,exitflag,output]  = simulannealbnd(fun,x0,zeros(1,dim),ones(1,dim),options) ;
Target_pos_SA=round(x);
% final evaluation for GOA tuned selected features
[error_SA,accuracy_SA,predictedLables_SA]=finalEval(Target_pos_SA,trainData,testData,...trainlabel,testlabel);
%% GOA optimisation for feature selection
SearchAgents_no=10; % Number of search agents
Max_iteration=100; % Maximum numbef of iterations
[Target_score,Target_pos,GOA_cg_curve, Trajectories,fitness_history,...position_history]=binaryGOA(SearchAgents_no,Max_iteration,lb,ub,dim,...trainData,testData,trainlabel,testlabel);
% final evaluation for GOA tuned selected features
[error_GOA,accuracy_GOA,predictedLables_GOA]=finalEval(Target_pos,trainData,testData,trainlabel,testlabel);                                                               
​
%%
% plot for Predicted classes
figure
plot(testlabel,'s','LineWidth',1,'MarkerSize',12)
hold on
plot(predictedLables_KNN,'o','LineWidth',1,'MarkerSize',6)
hold on
plot(predictedLables_GOA,'x','LineWidth',1,'MarkerSize',6)
hold on
plot(predictedLables_SA,'^','LineWidth',1,'MarkerSize',6)
% hold on
% plot(predictedLables,'.','LineWidth',1,'MarkerSize',3)
legend('Original Labels','Predicted by All','Predcited by GOA Tuned',...          'Predcited by SA Tuned','Location','best')
title('Output Label comparison of testing Data')
xlabel('-->No of test points')
ylabel('Test Data Labels' )
axis tight
​
% pie chart for accuracy corresponding to number of features
figure
subplot(1,2,1)
labels={num2str(size(testData,2)),num2str(numel(find(Target_pos))),...num2str(numel(find(Target_pos_SA)))};
​
pie([(size(testData,2)),numel(find(Target_pos)),numel(find(Target_pos_SA))],labels)
title('Number of features selected')
legendlabels={'Total Features','Features after GOA Selection',...'Features after SA Selection'};
legend(legendlabels,'Location','southoutside','Orientation','vertical')
​
subplot(1,2,2)
labels={num2str(accuracy*100),num2str(accuracy_GOA*100),num2str(accuracy_SA*100)};
pie([accuracy,accuracy_GOA,accuracy_SA].*100,labels)                                                        
title('Accuracy for features selected')
legendlabels={'Total Features','Features after GOA Selection',...'Features after SA Selection'};
legend(legendlabels,'Location','southoutside','Orientation','vertical')

🎉3 参考文献

[1]张著英,黄玉龙,王翰虎.一个高效的KNN分类算法[J].计算机科学,2008(03):170-172.

部分理论引用网络文献,若有侵权联系博主删除。

相关文章:

基于二进制草蝉优化算法选择特征并使用 KNN 进行训练(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 基于二进制草蝉优化算法选择特征并使用KNN(K-Nearest Neighbors,K最近邻算法)进行训练是一种…...

14-4_Qt 5.9 C++开发指南_QUdpSocket实现 UDP 通信_UDP组播

文章目录 1. UDP组播的特性2. UDP 组播实例程序的功能3. 组播功能的程序实现4. 源码4.1 可视化UI设计4.2 mainwindow.h4.3 mainwindow.cpp 1. UDP组播的特性 下图简单表示了组播的原理。UDP 组播是主机之间“一对一组”的通信模式,当多个客户端加入由一个组播地址定…...

ai图片合成软件帮你创造个性绚丽

嘿!悄悄告诉你一个小秘密,现在有一款超酷的软件,它能让你的图片变得活灵活现,就像跳出了屏幕一样!没错,这就是ai图片制作软件!想象一下,你拍摄了一张美丽的风景照片,但总…...

git 版本回退

git 没有push之前,可以用git reset --mixed回退,就是把add 的内容和commit的内容都撤销 在push之后,你只有2种操作 1.git reset 退回到你想要的那个版本 有配置选项 如果是soft就是当前版本删掉,之前改的代码保留,ha…...

使用Jackson自定义序列化操作(Jackson – Custom Serializer)

目录 Standard Serialization of an Object GraphCustom Serializer on the ObjectMapperCustom Serializer on the Class Standard Serialization of an Object Graph Data NoArgsConstructor AllArgsConstructor public class Item {public int id;public String itemName;p…...

Python-元组

元组(Tuples)详解 在Python中,元组(Tuples)是一种有序的数据类型,它可以包含任意类型的元素,包括数字、字符串、列表等。与列表相似,元组也是用来存储一组数据,但与列表…...

快速转换PDF文件: Python和PyMuPDF教程

解决问题 有时候将文档上传Claude2做分析,有大小限制,所以需要切割pdf文档为几个小点的文档,故才有了本文章。 如何用Python和PyMuPDF制作你想要大小的PDF? PDF是一种广泛使用的文件格式,可以在任何设备上查看和打印…...

规划模型Matlab代码

文章目录 数学规划定义一般形式分类 1.线性规划(linear programming)2.非线性规划(nonlinear programming)3. 整数规划(integer programming)4. 0-1规划(0-1 programming)5. 最大最小化模型6. 多目标规划模型7.敏感性分析(对权重)[例题] 数学规划定义 数…...

用html+javascript打造公文一键排版系统11:改进单一附件说明排版

一、用htmljavascript打造公文一键排版系统10中的一个bug 在 用htmljavascript打造公文一键排版系统10:单一附件说明排版 中,我们对附件说明的排版函数是: function setAtttDescFmt(p) {var t p;var a ;if (-1 ! t.indexOf(:))//是半角冒…...

snap xxx has “install-snap“ change in progress

error description * 系重复安装,进程冲突 solution 展示snap的改变 然后sudo snap abort 22即可终止该进程 之后重新运行install command~~ PS: ubuntu有时候加载不出来,执行resolvectl flush-caches,清除dns缓存…...

Elasticsearch 性能调优指南

目录 1、通用优化策略 1.1 通用最小化法则 1.2 职责单一原则 1.3 其他 2、写性能调优 2.1 基本原则 2.2 优化手段 2.2.1 增加 flush 时间间隔, 2.2.2 增加refresh_interval的参数值 2.2.3 增加Buffer大小, 2.2.4 关闭副本 2.2.5 禁用swap 2…...

学习Boost一:学习方法和学习目的

学习目的 Boost 的学习目的: 因为从知乎和CSND上根据了解内容来看,Boost作为一个历史悠久的开源库,已经脱离了一个单纯的库的概念了,他因庞大的涉及面应当被称之为库集。 并且,因为boost库优秀的试用反馈和开发人员的…...

c语言每日一练(1)

前言: 每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情…...

iOS开发-CocoaLumberjack日志库实现Logger日志功能

iOS开发-Logger日志功能实现 在iOS开发中,常用CocoaLumberjack来作为日志功能实现的日志框架 一、CocoaLumberjack是什么? CocoaLumberjack 是 支持 iOS 和 Mac 平台的日志框架,使用简单,功能强大且不失灵活,它的主…...

深度学习(34)—— StarGAN(2)

深度学习(34)—— StarGAN(2) 完整项目在这里:欢迎造访 文章目录 深度学习(34)—— StarGAN(2)1. build model(1)generator(2&#…...

use lua

-- basic.lua print("hello ".."world") local a 1 --only this file can see b 2 -- global see -- not declare vaiable all asign to nil print(fuck) -- 字符串可以"" , ,[[]] -- 一些数值运算支持,进制数,科学数&a…...

网络——初识网络

网络基础 文章目录 网络基础计算机网络产生的背景认识网络协议网络协议初识协议分层OSI七层模型TCP/IP四层模型网络传输基本流程协议报头 认识IP地址认识MAC地址ifconfig查看主机地址ifconfig查看主机地址 计算机网络产生的背景 独立模式:计算机之间相互独立 早期的…...

调试技巧(2)

6. 如何写出好(易于调试)的代码 6.1 优秀的代码: 代码运行正常bug很少效率高可读性高可维护性高注释清晰文档齐全 常见的coding技巧: 使用assert尽量使用const养成良好的编码风格添加必要的注释避免编码的陷阱。 这里讲一下assert…...

骨传导耳机真不伤耳吗?骨传导耳机有什么好处?

骨传导耳机真不伤耳吗?骨传导耳机有什么好处? 我先来说说骨传导耳机的工作原理吧,骨传导是一种传声方式,声波通过颅骨、颌骨等头部骨头的振动,将声音传到内耳。其实骨传导的现象我们很常见,就像我们平时嗑瓜…...

mac切换jdk版本

查询mac已有版本 1、打开终端,输入: /usr/libexec/java_home -V注意:输入命令参数区分大小写(必须是-V) 2.目前本地装有两个版本的jdk xxxxedydeMacBook-Pro-9 ~ % /usr/libexec/java_home -V Matching Java Virtual Machines (2):20.0.1 (…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...