一、 实验目的
- 了解DBSCAN算法基本原理;
- 编写代码并实现DBSCAN算法对数据的聚簇
二、 实验步骤
- 采用的数据集 :R语言factoextra包里的multishapes数据集
- 函数首先确定两个参数:
(1)epsilon:在一个点周围邻近区域的半径
(2)minPts:邻近区域内至少包含点的个数
根据以上两个参数,可以把样本中的点分成三类:
核点:满足领域内的点>=minPts,则为核样本点
边界点:满足领域内的点<minPts,但是该点可由一些核点获得
噪声点:既不是核点也不是边缘点,则是不属于这一类的点
- 用欧式距离计算点与点之间的距离矩阵disMatrix
- 为数据集添加visited列,0表示未访问,1表示访问过
- 判断点的类型存放到data_N
- 删除噪声点存放到data_C
- 重新计算距离,合并有交集的领域
- 为不同类型的点标签
- 绘图
三、 实验代码
library(factoextra)
library(ggplot2)
data<-data.frame(multishapes[,1:2])
ggplot(data,aes(x,y))+geom_point()
#主函数
DBSCAN = function(data,eps,MinPts){
rows = nrow(data)
disMatrix<-as.matrix(dist(data, method = "euclidean"))#求距离
data$visited <- rep(0,rows)
names(data)<-c("x","y","visited")
data_N = data.frame(matrix(NA,nrow =rows,ncol=