创新应用2:nnmf+DBO+K-Medoids聚类,蜣螂优化算法DBO优化K-Medoids,适合学习和发paper。

news2024/11/16 15:28:13

创新应用2nnmf+DBO+K-Medoids聚类,蜣螂优化算法DBO优化K-Medoids,适合学习和发paper

一、蜣螂优化算法

摘要:受蜣螂滚球、跳舞、觅食、偷窃和繁殖等行为的启发,提出了一种新的基于种群的优化算法(Dung Beetle Optimizer, DBO)。新提出的DBO算法兼顾了全局探索和局部开发,具有收敛速度快和求解精度高的特点。采用一系列著名的数学测试函数(包括23个基准函数和29个CEC-BC-2017测试函数)来评估DBO算法的搜索能力。仿真实验结果表明,DBO算法在收敛速度、求解精度和稳定性方面均表现出与当前主流优化算法相当的性能。此外,采用Wilcoxon符号秩检验和Friedman检验对算法的实验结果进行评估,证明了DBO算法相对于当前流行的其他优化技术的优越性。为了进一步说明DBO算法的实际应用潜力,将DBO算法成功应用于3个工程设计问题。实验结果表明,所提DBO算法能够有效地处理实际应用问题。

文献来源:Dung beetle optimizer: a new meta-heuristic algorithm for global optimization。

DOI:10.1007/s11227-022-04959-6。

二、K-Medoids聚类

K-Medoids是一种聚类算法,类似于K-Means,但在选择聚类中心时采用了不同的策略。K-Medoids旨在将数据集中的对象划分成K个簇,这些簇是通过最小化样本点到簇中心(或称为medoids)的距离来确定的。与K-Means使用簇的均值作为簇中心不同,K-Medoids选取簇内的对象作为中心,通常选择的是使得簇内其它点到此中心点的距离总和最小的点。

K-Medoids聚类算法的主要特点和步骤如下:

1、特点:K-Medoids比K-Means更鲁棒,因为它选取实际存在于数据集中的点作为中心,而不是计算得到的均值。这使得算法对噪声和异常值更为稳健。

2、算法步骤:

初始化:随机选取K个对象作为初始medoids。

分配阶段:将每个对象分配给最近的medoid,基于给定的距离度量(如欧氏距离、曼哈顿距离等)。

更新阶段:对于每个簇,选取一个对象作为新的medoid,这个对象是使得簇内其他所有点到它的距离之和最小的点。

重复分配和更新步骤,直到medoids不再发生变化,或者达到了预设的迭代次数。

3、距离度量:K-Medoids算法可以使用多种距离度量,这使得它适用于不同类型的数据集。

4、应用场景:K-Medoids广泛应用于需要稳健聚类方法的领域,如生物信息学、图像分割、市场细分等。

5、限制:尽管K-Medoids对异常值具有较好的抵抗力,但其计算成本相对较高,尤其是在处理大规模数据集时。这是因为在每次迭代中,都需要计算所有点到每个medoid的距离。

6、变体:有几种K-Medoids算法的变体,最著名的是PAM(Partitioning Around Medoids)和CLARA(Clustering LARge Applications)。PAM适用于处理小到中等规模的数据集,而CLARA通过抽样来克服PAM在大规模数据集上的计算问题。

K-Medoids算法是聚类分析中一个重要的工具,尤其是在需要考虑异常值影响时。尽管存在计算成本高的限制,但其在多个领域内都展示了良好的应用潜力。

三、非负矩阵分解(NNMF或NMF)

非负矩阵分解(NNMF或NMF)是一种数据降维和特征提取技术,它能够将一个非负矩阵分解为两个或多个较低维度的非负矩阵的乘积。NMF的关键特点是分解得到的矩阵的所有元素都是非负的,这使得NMF特别适合于处理那些只包含非负元素的数据集,例如图像的像素强度、文本的词频等。

四、nnmf+DBO+K-Medoids聚类

✨ 核心亮点

降维至精华:我们首先使用nnmf将复杂的数据集降维到3维,保留了数据的主要信息,使其可视化变得简单直观。

优化聚类:接着,采用蜣螂优化算法DBO对K-Medoids聚类进行优化,利用轮廓系数信息构建目标函数,自动寻找最佳的聚类数量和距离度量,以达到最优的数据分组效果。

聚类数量k:可以修改聚类数量优化范围

选择三个距离度量进行优化:sqeuclidean(欧氏距离平方)、cityblock(Block距离,也叫绝对值距离)、cosine(夹角余弦)。

代码详细中文注释,高效管理,可读性和二次开发都很好,部分代码如下:

clc; clear; close all;

% 加载Excel数据
data = xlsread('数据.xlsx');

Dim=3;    %设置降维数	
Z=nnmf(data,Dim);     %nnmf非负矩阵分解

% 初始化DBO参数
N = 10; % 种群数量
T = 50; % 最大迭代次数
LB=[2,1]; % 变量下界
UB=[20,3]; % 变量上界
nvars=length(LB);
fobj=@fitness;

% 使用DBO优化算法优化K-Medoids进行聚类,优化最佳聚类数和最佳距离度量
[fMin,index,Convergence_curve,pos]=DBO(N,T,LB,UB,nvars,fobj,data,Z); 

% 计算轮廓系数
sc_xishu = mean(silhouette(data, index'));

% 确定独特的聚类数
a = unique(index);
op_cluster_num = length(a); % 优化后聚类个数
C = cell(1, length(a));

% 将数据分配到对应聚类
for i = 1:length(a)
    C(1, i) = {find(index == a(i))};
end

% 分类标签
legend_str = strsplit('类别1,类别2,类别3', ',');

% 绘制每个聚类的数据点
for i = 1:op_cluster_num
    data_cluster = Z(C{1, i}, :);
    plot3(data_cluster(:, 1), data_cluster(:, 2),data_cluster(:, 3), 'p', 'LineWidth', 2, 'MarkerSize', 5); hold on;
end

% 确保图例中聚类标签的数量与实际相符
if(length(legend_str) < op_cluster_num)
    for i = length(legend_str):op_cluster_num
        legend_str{1, i} = ['类别', num2str(i)];
    end
end

% 设置图表属性
set(gca, 'FontSize', 12)
title('蜣螂优化算法DBO优化K-Medoids')
axis tight
box on
xlabel('X')
ylabel('Y')
legend(legend_str)

figure(2)
% 绘制收敛曲线
semilogy(Convergence_curve,'-r','LineWidth',2)
title('蜣螂优化算法DBO优化K-Medoids收敛曲线')
xlabel('迭代次数');
ylabel('适应度值');
axis tight
box on
legend('DBO优化K-Medoids')
set(gca, 'FontSize', 10)

% 优化结果输出
distance_str={'sqeuclidean','cityblock','cosine'};
disp('蜣螂优化算法DBO优化K-Medoids聚类: ');
disp(['最佳聚类数: ',num2str(round(pos(1)))])
disp(['最佳距离度量: ',distance_str{1,round(pos(2))}])

运行结果如下:

蜣螂优化算法DBO优化K-Medoids结果:

蜣螂优化算法DBO优化K-means收敛曲线:

优化结果输出:

使用数据如下:

五、完整代码获取

nnmf+DBO+K-Medoids聚类

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

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

相关文章

断言assert是什么?

assert是什么&#xff1f; assert断言&#xff0c;是一个被定义在<assert.h>头文件中的一个宏&#xff0c;而不是一个函数。 可以用来检查数据的合法性&#xff0c;但是频繁的调用极大影响了程序的性能&#xff0c;增加了额外的开销。可以通过#define NDEBUG来禁用asse…

计算机考研|408还是自命题?看这一篇就够了

计算机考研自命题都担心考不上&#xff0c;408估计更能让你头秃 不要光看着408的分数线低&#xff0c;自命题分数线高&#xff0c;408想拿到高分是很困难的...&#x1f630; 某双飞一本 身边大部分人都去考数据结构是因为考试内容相比于408来说少了很多&#xff0c;时间更好分配…

MySQL基础-----多表查询之子查询

目录 前言 子查询概述 1.概念 2.分类 一、标量子查询 二、列子查询 三、行子查询 四、表子查询 前言 上一期我们讲了内外连接查询以及自连接查询&#xff0c;那么本期我们就学习多表查询的子查询。本期会详细讲解什么是子查询&#xff0c;以及子查询的相关功能&#xf…

Java项目:63 ssm网上花店设计+vue

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统具备友好性且功能完善。管理员登录进入后台之后&#xff0c;主要完成花材选择管理&#xff0c;用户管理&#xff0c;鲜花管理&#xff0c;鲜花出入…

18 优先级队列

priority_queue介绍 1.优先级队列是一种容器适配器&#xff0c;根据弱排序标准&#xff0c;它的第一个元素总是最大的 2.此上下文类似于堆&#xff0c;堆中可以随时插入元素&#xff0c;检索最大堆元素 3.优先队列实现为容器适配器&#xff0c;容器适配器即将特定容器类封装作…

【源码阅读】evmⅠ

代码位置如下&#xff1a; 参考link 以太坊中有一个很重要的用途是智能合约&#xff0c;而其中evm模块是实现了执行智能合约的虚拟机。evm可以逐条解析执行智能合约的指令。 evm中的核心对象是EVM&#xff0c;代表一个以太坊虚拟机。其内部主要依赖&#xff1a;解释器Interore…

水下蓝牙耳机哪个牌子好?推荐四款高人气力作游泳耳机

在这个充满活力的时代&#xff0c;人们对于生活的追求早已不仅仅局限于日常的琐碎&#xff0c;更多的是对健康、对自我挑战的向往。运动&#xff0c;成为了现代人生活中不可或缺的一部分。而游泳&#xff0c;作为一项既能锻炼全身&#xff0c;又能享受水中美妙的运动&#xff0…

行尾检测论文汇总

文章目录 2023GNSS-Free End-of-Row Detection and Headland Maneuvering for Orchard Navigation Using a Depth Camera 2023 GNSS-Free End-of-Row Detection and Headland Maneuvering for Orchard Navigation Using a Depth Camera 摘要&#xff1a; 果园中基于GPS的导航…

苍穹外卖-day08:导入地址簿功能代码(单表crud)、用户下单(业务逻辑)、订单支付(业务逻辑,cpolar软件)

苍穹外卖-day08 课程内容 导入地址簿功能代码用户下单订单支付 功能实现&#xff1a;用户下单、订单支付 用户下单效果图&#xff1a; 订单支付效果图&#xff1a; 1. 导入地址簿功能代码&#xff08;单表crud&#xff09; 1.1 需求分析和设计 1.1.1 产品原型&#xff08…

Linux——进程通信(二) 匿名管道的应用:进程池

前言 之前我们学习了进程通过匿名管道进行通信&#xff0c;实现了两个进程的数据传输。 如果我们管理的是很多个进程&#xff0c;通过管道发送指令&#xff0c;因为如果管道中没有数据&#xff0c;读端必须等待&#xff0c;也就是被管理的进程们都在等待我发送的指令&#xf…

DevExpress WinForms crack,DevExpress WinForms组件套件和库

DevExpress WinForms crack,DevExpress WinForms组件套件和库 Reporting & Analytics - Reports, Pivot Tables, PDF Viewer. The DevExpress WinForms Subscription includes royalty-free user interface components for next-gen decision support systems. Whether you…

SegFormer 项目排坑记录

SegFormer 项目排坑记录 任务记录创建conda环境 准备数据库和预训练参数程序配置修改测试可视化训练 任务 需要复现SegFormer分割项目&#xff0c;似乎还有点麻烦&#xff0c;参考这几个进行复现&#xff0c;记录下过程&#xff1a; SegFormer mmsegmentation CSDN博客 知乎博…

保姆级教学!微信小程序设计全攻略!

微信小程序开启了互联网软件的新使用模式。在各种微信小程序争相抢占流量的同时&#xff0c;如何设计微信小程序&#xff1f;让用户感到舒适是设计师在产品设计初期应该考虑的问题。那么如何做好微信小程序的设计呢&#xff1f;即时设计总结了以下设计指南&#xff0c;希望对准…

车企都卷入鸿蒙开发的行了!难怪岗位需求量涨这么快!!!

近日华为鸿蒙 OS 官微宣布&#xff0c;首批汽车行业伙伴广汽传祺、岚图汽车、零跑汽车、凯翼汽车官宣加入鸿蒙生态。 这四家车企加入&#xff0c;会不会影响着其他车企想哪些手机APP厂商那种陆续的跟上呢&#xff1f; 其实在此前国内新能源扛把子比亚迪早已与华为达成了合作&a…

纳米阱可提高未来光学设备的光强度

一种配置光捕获器件的方法有望通过放大光和提高发光纳米材料的发射效率来获得更好的光学纳米器件&#xff0c;而无需复杂的技术升级。 强光束对于从医学到电子产品的无数应用至关重要&#xff0c;但使用日常光源生产它们具有挑战性。然而&#xff0c;它们可以由激光产生。激光…

校园暴力谁之过?如何正确引导孩子行为?

近日&#xff0c;关于河北邯郸校园霸凌事件持续发酵&#xff0c;很多媒体包括央视都是密切关注此事的发展动向&#xff0c;很多媒体人也在持续报道后续事态。那么对于14岁的的少年来说&#xff0c;花样年华的年纪&#xff0c;究竟为什么会犯下如此大的罪行&#xff1f;孩子为什…

电脑msvcp140_1.dll丢失的解决方法,总结5种可靠的方法

在日常使用电脑的过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“msvcp1401.dll丢失”。这个DLL文件是Microsoft Visual C Redistributable Package的一部分&#xff0c;对于许多基于Windows的应用程序来说至关重要。这个错误通常会导致某些应用程序无…

系统渐渐沦为“屎山”,这就是真相!

分享是最有效的学习方式。 博客&#xff1a;https://blog.ktdaddy.com/ 背景 小猫维护现有的系统也有一段时间了&#xff0c;踩坑也不少&#xff0c;事故不少。感兴趣的小伙伴可以了解一下&#xff0c;往期的小猫踩坑记合集。 这天&#xff0c;小猫找到了商城系统的第一任开发…

【数据结构与算法】:非递归实现快速排序、归并排序

&#x1f525;个人主页&#xff1a; Quitecoder &#x1f525;专栏&#xff1a;数据结构与算法 上篇文章我们详细讲解了递归版本的快速排序&#xff0c;本篇我们来探究非递归实现快速排序和归并排序 目录 1.非递归实现快速排序1.1 提取单趟排序1.2 用栈实现的具体思路1.3 代码…

掘根宝典之C++RTTI和类型转换运算符

什么是RTTI RTTI是运行阶段类型识别的简称。 哪些是RTTI? C有3个支持RTTI的元素。 1.dynamic_cast运算符将使用一个指向基类的指针来生成一个指向派生类的指针&#xff0c;否则该运算符返回0——空指针。 2.typeid运算符返回一个指出对象类型的信息 3.type_info结构存储…