DBSCAN密度聚类,matlab 练手项目,2700字带你手撕课设作业!

绪论

刚刚完成了一个关于DBSCAN的作业,由于刚开始学习MATLAB的使用便用它完成了一个练手任务,有一点想法记录下来。以便于后来重新学习这个方法和记录一些函数,同时也希望能给同学着一点思路。有问题也请留言,会不断改正。
参考博客指路:看了不少,链接挺多,有些忘了,欢迎指出改正
推荐一个基础知识点整理的比较好的博主
万勇’s Blog
https://blog.csdn.net/qiu1440528444/article/details/80763420?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160601820019195264744375%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=160601820019195264744375&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-1-80763420.first_rank_ecpm_v3_pc_rank_v2&utm_term=matlab+%E5%AE%9E%E7%8E%B0DBSCAN&spm=1018.2118.3001.4449

任务目标

1.生成一个双月型数据集;
2.使用KNN求出E-PS,在本实验中预先设置了Min-point =4;
3,利用DBSCAN分类,展示分类结果
4,顺便赚点币下载别人资料(手动狗头)

实验思路

对于DBSCAN算法来说,我们需要关注以下几点:
数据集 Min-pot(阈值) Eps(半径)
有了这些才能开始算法,即使是调用封装好的函数,也是需要这些变量
这些概念可在文章开头推荐发博客中找到。

实验过程

1.生成双月型数据集
1.1思想
设计了一个半圆环,在matlab可以通过rand()函数在这个范围内生成随机数,
R是半径 W是圆环厚度,R+W是大圆环半径  R-W为小圆环半径
代码如下:

```tmp=[2*(r+w2)*(rand(N1,1)-0.5) (r+w2)*rand(N1,1)];   
     tmp(:,3)=sqrt(tmp(:,1).*tmp(:,1)+tmp(:,2).*tmp(:,2)); %求到原点距离
```bash

通过镜像和位移获得第二个半圆,N(生成点数量是可以自己定义)
完整代码资源指路
https://download.csdn.net/download/Enjoy324/13137793
(在我的代码中为了简单,是把圆的大小写死了,当然,你们可以加个判断if写成可输入的模式)
2求EPS
在本次实验中,由上文生成了一个200个点的双月型数据集
在这里插入图片描述

2.1如何求EPS
思想:求Eps的方法有很多,在这里只是提供了一种简单的思想。针对本实验是够用了。
这种方法是求出第K近邻距离,并且将其排序(注意,不是K近邻,是第K近邻,换句话说对于200个点的数据集来说,只是一个【200,1】矩阵)
通过调用k近邻函数将距离最近的前五个保存在一个数组中

[IDX,Dist]=knnsearch(A(1:numData,:),A(1,:),'k',5);

因为Dist包含到自己本身的距离,所以想用第四近邻点是【1.5】
将该点
保存在新的数组中
Kdist(1)=Dist(1,5);`

重复这个过程得到一个200*1的数组
排序后,将其作为纵坐标,,将点的数量作为横坐标画图找转折点来确定Eps

画图如下:
在这里插入图片描述
该部分完整代码指路:
https://download.csdn.net/download/Enjoy324/13137793
如图,该转折点的纵坐标在(3,3.5),因此我们暂选3.2(随意挑选,对于本次实验来讲,其实可以选择的误差允许很多)
3.如何利用DBSCAN分类
3.1数据准备
由上文我们获得了( 数据集 Min-pot Eps)
如果你只是使用,直接找个人家封装好的调用呀(狗头)
3.2在这部分我想用伪代码解释应该更清楚并且记录一下我用到的函数。

1.从数据集中取出一个点,检查有没有被遍历
if ~visited(i) %是否被遍历
	visited(i)= true;
	Neighbors = RegionQuery(i);
2.如果被遍历,直接将其归为已存在簇中
3.检查是不是噪音
找到其所有密度可达点生成新簇
numel() %数出有多少点跟Min-point 对比判断是不是噪音

具体代码指路

https://download.csdn.net/download/Enjoy324/13137793
(我将DBSCAN封装好了,调用就好,
找密度可达点函数封装在了DBSCAN函数中)

总结

DBSCAN其实网上有很多资料,优缺点也不赘述了,正如我推荐的博客一样。已经总结的很好。而我只是将我这次做的作业思路写了出来。由于目前事情比较多,没有时间一步步介绍。吃过晚饭匆匆忙忙写到这里,本想记录下所学函数,却得忙别的事情,这里只提供实验思路的介绍吧,等我有时间再完善,如果对您有帮助。
最后看到这了点个赞呗!

注:
仅供学习,欢迎交流,未经允许,请勿转载和他用

猜你喜欢

转载自blog.csdn.net/Enjoy324/article/details/109930575