【KNN分类】基于模拟退火优化KNN、蝗虫算法优化KNN实现数据分类附matlab代码

news2025/1/15 20:47:27

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机  电力系统

⛄ 内容介绍

KNN(k Nearest Neighbor)算法是1种简单、有效、非参数的文本分类法,但缺点是样本相似度的计算量大,故不适用于有大量高维样本的文本。一方面,本文分析了KNN算法的优点和缺陷,采用了1种应用特征词提取和特征词聚合的方法来改进KNN算法在特征词提取方面的不足。另一方面,本文又深入研究了模拟退火算法思想,采用退火模拟思想的典型优化组方法和模拟退火算法原理来加快KNN算法的分类速度。最后,通过2种方法的加入改进了KNN分类算法。实验结果表明,本文提出的方法大大提高了分类算法的效率和性能。​

⛄ 部分代码

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);

⛄ 运行结果

⛄ 参考文献

[1]邓箴, 包宏. 用模拟退火改进的KNN分类算法[J]. 计算机与应用化学, 2010(3):5.2019), In press.

⛄ Matlab代码关注

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

❤️ 关注我领取海量matlab电子书和数学建模资料

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

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

相关文章

web课程设计网页制作:基于html实现传统文化壁画手工艺带psd设计图(15页)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

【Day3】每日学Java--》详解java中的static成员

大家好,我是良辰丫,今天我和大家分享的是java中的static成员,static说难不难,说简单也不简单,主要是细节,很多情况下,你使用了static,却不知道为什么会报错,嘿嘿嘿&#…

【推免攻略】五.2022年北交计算机学院夏令营、预推免保研经验

欢迎订阅本专栏:《北交计算机保研经验》 订阅地址:https://blog.csdn.net/m0_38068876/category_10779337.html 【推免攻略】一.北交计算机学院夏令营、预推免攻略【推免攻略】二.联系导师的前期准备及注意事项【推免攻略】三.2020年北交计算机学院夏令营、预推免保研经验【推…

Java之网络编程

目录 1.1 概述 1.2 网络通信的要素 1.3 IP 1.4 端口 1.5 通信协议 1.6 TCP (1)消息发送 (2)文件上传 1.7 UDP (1)发短信 (2)聊天(循环发送-循环接收)…

ftp共享盘挂载——curlftpfs挂载FTP服务器

通过curlftpfs来将远程ftp某个目录映射到本地目录,可以达到多台机器共享同一目录的效果。我们是用它来共享脚本的。curlftpfs是通过yum本地源安装的,需要epel支持,需要提前弄好。 一、 安装FTP服务 在联网环境下安装epel yum -y install epel…

唯亚威FI-60光纤识别器

光纤识别器可以轻松地识别光信号,而无需断开光缆或中断网络交通。也可以转换为光功率计(OPM)。VIAVI FI-60 LFI能够使用户轻松检测光信号,而无需断开光缆或中断网络交通。FI-60 LFI还包括了独特的VIAVI SafeChekTM ,以…

精华推荐 |【深入浅出Spring原理及实战】「原理分析专题」从源码和架构设计角度深入剖析BeanPostProcessor的原理和运作机制

🍃 前提概要 Spring具有很好的扩展性,但是这个扩展它的这个扩展性体现在哪里呢?而我们要说的BeanPostProcessor就是对Spring扩展性优秀的表现之一。 🍃 BeanPostProcessor的作用 简单的说就是BeanPostProcessor提供了初始化前后回…

Qt扫盲-QString使用总结

QString使用总结一、概述二、初始化字符串1、极速版2、原理版三、操作字符串1、极速版1. 增加2. 删除3. 修改4. 插入5. 转换2、原理版四、查询字符串五、字符串格式转换六、Null 字符串和 Empty 字符串的区别七、字符串参数格式化八、更高效的字符串构造九、最大大小和出现内存…

疫情之下逆势进阶高级测试拿下20k,看我教你打一场翻盘局...

偶然跟同事交流工作、学习的时候,聊起了近况以及行业的变化,如果说回到三年前,疫情还未影响太深的时候,你会做什么? 本来当时是当玩笑话来问了,以为回答会是一注决定命运的彩票,正当我这样想时…

夏季出汗多中医如何调理

夏季出汗多是什么原因身体哪些方面出了问题?出汗多怎么办呢如何调理?夏季出汗看似是一种很正常的现象,但是如果说出汗过于多可能是身体出现了异常。夏季出汗多的主要原因是气虚,主要是补气固表。在夏天,由于天气炎热,人体出汗过…

随着多点 DMALL 全面 To B 转型

随着多点 DMALL 全面 To B 转型,为越来越多的 B 端客户提供零售全渠道解决方案,需要具备在多云部署环境下提供更具性价比、可复用的大数据底层基座和平台工具链。我们也终于等到了一个契机,彻底甩开历史包袱,设计搭建存算分离、轻…

Git安装和使用

1.工具:Git,下载链接:Releases git-for-windows/git GitHub 下载完成了之后可以看到再程序处可以或者鼠标右击可以看到三个东西,分别是: Git Bash:推荐使用,使用命令风格类似于Linux命令&am…

PyOpenGL安装

PyOpenGL安装 学校图形学大作业, 之前要求是MFC和C , 但是vs mfc c opengl的环境实在是配置的吐血了… 于是润来搞PyOpenGL玩一玩 参考网上经验贴做的 我新建了一个虚拟环境 下载whl文件 我的虚拟环境是python3.7,于是下载下面指出来的两个…

superset vs Tableau

superset the only thing i need to know is how to install superset. it’s difficult to install ?? https://superset.apache.org/docs/intro https://flask-appbuilder.readthedocs.io/en/latest/installation.html how to use superset ? superset is a modern …

Ubuntu下基于Anaconda3 配置任意版本tensorflow和opencv的通用方法

参考 Ubuntu下基于Anaconda3 配置任意版本tensorflow和opencv的通用方法 - 云社区 - 腾讯云 在Github上利用顶会上深度模型时经常会被tensorflow和opencv的版本问题困扰,比如博主最近遇到的需求: 安装更高的版本一般没问题,下面介绍一种配置…

MATLAB应用1——MATLAB傅里叶函数自行封装

主程序: % eximportdata(data3.txt); tx regexp(ex{1}, \s, split);%按照空格分隔字符串,成为单个cell yxstr2double(tx); plot(yx); wwyx(2500:9000)-2055; Fyz_fft(ww,1000); 傅里叶封装函数: function Fyz_fft(y,Fs) % Demon: % Fs 128; …

如何理解UML2.5.1(03篇)

下面先简单列举一下subsets和redefines的特点: 关联端点具有标识subsets表明subsets一端的对象集合是被subsets一端的对象集合的子集。此时,subsets一端的类与被subsets一端的类之间必须存在继承关系。同时,subsets一端的角色名一定与被subse…

Spring与web整合

创建maven的web项目 这个项目src下没有test等文件——手动创建 关于web-app version"3.0" 的问题 如何改成推荐使用的web-app 4.0&#xff1f; 再添加 就是默认4.0版本的了 配置监听器 <?xml version"1.0" encoding"UTF-8"?> <we…