先用先发!基于23年新出的雪消融优化算法SAO优化DBSCAN聚类!直接替换Excel数据即可用!适合作为创新!附代码!

声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~

今天为大家带来一期雪消融优化算法SAO优化DBSCAN聚类,独家原创!还没有人用过,适合作为创新点!直接替换Excel数据即可用!具体代码已放在最后,需要代码的朋友可直接拉到最后~

目录

 原理简介

代码平台

数据输入

效果展示

部分代码展示

完整代码获取方式

 原理简介

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的空间聚类算法。相比于传统K-means等聚类算法,它具有以下优点:

  • 不需要指定聚类的个数

  • 只需要两个参数(半径r和阈值minPts)

  • 虽然是一种聚类算法,但也擅长找到离群点(可用于异常值监测)

然而,它也面临参数选择困难的问题,需要我们自行设置的参数为:阈值minPts以及半径ε。一般来说,半径ε需要找突变点,minPts为K距离中的K值,一般取小一点,需要多次尝试。因此,人工选择参数非常困难,也无法判断是否为最优参数,因此我们采用2023年新出的雪消融优化算法对这两个算法进行寻优。

雪消融优化器( SAO) 是2023年发表在SCI一区期刊《Expert Systems with Applications》上的文章,作者受到自然界中雪的升华和融化行为的启发,开发了一种新的基于物理的雪消融优化器(SAO)算法,模拟雪的升华和融化行为。

如下图所示:在融化的过程中,雪会转化为液态水,而它可以通过升华直接转化为蒸汽。同时,需要注意的是,融雪转化的液态水也可以通过蒸发转化为蒸汽。

具体测试函数效果与算法公式可以查看这个算法的原文献:

Lingyun Deng, Sanyang Liu. Snow ablation optimizer: A novel metaheuristic technique for numerical optimization and engineering design,Expert Systems with Applications,Volume 225,2023.

接下去我们利用这个算法优化DBSCAN的两个核心参数,适应度函数为轮廓系数,使其轮廓系数最大:

代码平台

Matlab

数据输入

Excel输入多个特征即可,这里以两个特征为例,如图所示,如果需要替换直接替换Excel内数据即可,不同特征数量均可~

效果展示

首先看看原始的数据效果点分布~

数据分布的特征还是很明显的,看看我们的算法效果如何

可以看到,我们的算法很容易地将数据分成了三类,效果非常好,同时还用不同的颜色进行标注,另外,也用黑色点标注出了离群点,即异常值,在Matlab代码中用0标识。其余类别分别用1、2、3标识,还是非常方便的。

再来看看我们雪消融优化算法的迭代曲线:

由于是最大化问题,因此迭代曲线往上,完全没有问题,雪消融优化算法也仅仅用了几次便找到了最优解,可以看出效果还是非常不错的~

控制台同时也会显示最优参数:

部分代码展示

%%  清除相关变量clc;clear;close all;%%  导入数据X = xlsread('数据集.xlsx'); figureplot(X(:,1),X(:,2),'o','MarkerSize',3,'Color','k','MarkerFaceColor','k');xlabel('横坐标')ylabel('纵坐标')title('原始数据')set(gcf,'color','w')%%  参数设置N = 30;                                                     %  种群规模T = 20;                                                     %  迭代次数lb = [0.01,5];                                              %  优化下界ub = [1,10];                                                %  优化上界dim = 2;                                                    %  优化个数fobj = @(x)fitness(x,X);%%  优化[Best_score, Best_pos, cg_curve] = SAO(N,T,lb,ub,dim,fobj);   %  调用算法优化cg_curve = abs(cg_curve-1);                                   %  取反是因为轮廓系数越大越好%%  迭代曲线figureplot(cg_curve)title('寻优曲线')xlabel('迭代次数')ylabel('适应度值')set(gcf,'color','w')display(['最佳参数值为:', num2str(Best_pos)]);display(['最佳适应度值为:', num2str(Best_score)]);%%  运行DBSCAN算法Eps = Best_pos(1);                                          %  得到最佳参数MinPts = Best_pos(2);                                       %  得到最佳参数cluster = DBSCAN(X,Eps,MinPts);%%  绘制结果图figurePlotClusterinResult(X, cluster);title(['SAO-DBSCAN(\epsilon = ' num2str(Eps) ', MinPts = ' num2str(MinPts) ')']);set(gcf,'color','w');

代码目录如下:

完整代码获取方式

点击下方小卡片,后台回复关键字,不区分大小写。关键字:

SAODBSCAN

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值