资源描述:
《西电数据挖掘大作业-密度聚类DBSCAN.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、题目:数据挖掘实验报告学院:电子工程学院专业:智能科学与技术学生姓名:**学号:02115***数据挖掘实验报告——密度聚类DBSCAN一、问题介绍用DBSCAN的方法对双层正方形数据和三维同心球数据进行聚类。其中样本个数为20000,且为均匀分布。二、算法描述输入: espilong— 半径 MinPts— 给定点在espilong邻域内成为核心对象的最小领域点数 data — 集合输出:目标类簇集合;聚类数方法:1)标记所有对象为unvisited;2)do3)随机选择一个unvisited
2、对象p;4)标记p为visited;5)ifp的espilong邻域至少有MinPts个对象6)创建一个新簇C7)令N为p的espilong邻域中的对象的集合8)forN中的每个点p’9)ifp’是unvisited10)标记p’为visited11)ifp’的espilong邻域至少有MinPts个对象12)把这些对象添加到N中13)ifp’还不是任何簇的成员14)把p’添加到c15)endfor16)else17)标记p为噪声18)until没有标记为unvisited的对象三、实验结果由于考虑到内
3、存问题,所以这里只取2000个数据1、双层正方形数据由多次实验可知epsilong=10MinPts=201、三维同心球数据由多次实验可知epsilong=5MinPts=7一、实验代码lDBSCAN%%%%%%%%%%DBSCAN%%%%%%%输入:%data——包含n个对象的数据集%epsilon——半径参数%MinPts——邻域密度阈值%输出:%y——基于密度的簇的分类%c——类别数function[yc]=DBSCAN(data,epsilong,MinPts)num=size(data,1);
4、N=zeros(1,1);c=1;visited=zeros(num,2);dis=zeros(num,num);fori=1:numforj=1:numdis(i,j)=norm(data(i,:)-data(j,:));endendwhile(min(visited(:,1))==0)%随机选择一个未访问过的对象pwhile(1)p=round(num*rand);if(p==0)p=1;endif(visited(p,1)==0)break;endend%标记p为visitedvisited(p,
5、1)=1;%判断p的epsilong邻域内对象的个数[rowcol]=find(dis(p,:)<=epsilong);n=size(col,2);if(n1)pp=N(1,2);if(visited(pp,1)==0)visi
6、ted(pp,1)=1;[prowpcol]=find(dis(pp,:)<=epsilong);nn=size(pcol,2);if(nn>=MinPts)N=cat(2,N,pcol);endendif((visited(pp,2)==0)
7、
8、(visited(pp,2)==-1))visited(pp,2)=c;endv=size(N,2);N=N(:,2:v);end%簇c生成c=c+1;endendy=visited(:,2);c=c-1;endlcreatdata_squareclear;c
9、lc;%数据生成num=2000;data=zeros(num,2);fori=1:num/2data(i,1)=-50+100*rand;data(i,2)=-50+100*rand;endwhile(i~=num)x=-100+200*rand;y=-100+200*rand;if(x>=-50&&x<=50&&y>=-50&&y<=50)i=i;elsei=i+1;data(i,1)=x;data(i,2)=y;endend%利用DBSCAN进行聚类epsilong=10;MinPts=20;[y
10、c]=DBSCAN(data,epsilong,MinPts);%结果显示disp(sprintf('聚类数为%d',c));linetype={'r*','b*','g*','k*','y*','c*','r<','k<','b<','g<','y<','c<'};fori=1:numif(y(i,1)~=-1)plot(data(i,1),data(i,2),linetype{y(i,1)});elseplot(data(i,1),da