当前位置: 首页 > 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 (…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇&#xff1a;Apollo Client 配置与缓存 上一篇&#xff1a;GraphQL 入门篇&#xff1a;基础查询语法 依旧和上一篇的笔记一样&#xff0c;主实操&#xff0c;没啥过多的细节讲解&#xff0c;代码具体在&#xff1a; https://github.com/GoldenaArcher/graphql…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器

一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下&#xff0c;音视频内容犹如璀璨繁星&#xff0c;点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频&#xff0c;到在线课堂中知识渊博的专家授课&#xff0c;再到影视平台上扣人心弦的高清大片&#xff0c;音…...

python基础语法Ⅰ

python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器&#xff0c;来进行一些算术…...

自定义线程池1.2

自定义线程池 1.2 1. 简介 上次我们实现了 1.1 版本&#xff0c;将线程池中的线程数量交给使用者决定&#xff0c;并且将线程的创建延迟到任务提交的时候&#xff0c;在本文中我们将对这个版本进行如下的优化&#xff1a; 在新建线程时交给线程一个任务。让线程在某种情况下…...

如何使用CodeRider插件在IDEA中生成代码

一、环境搭建与插件安装 1.1 环境准备 名称要求说明操作系统Windows 11JetBrains IDEIntelliJ IDEA 2025.1.1.1 (Community Edition)硬件配置推荐16GB内存50GB磁盘空间 1.2 插件安装流程 步骤1&#xff1a;市场安装 打开IDEA&#xff0c;进入File → Settings → Plugins搜…...