基于密度的聚类
前边的k-Means和k-Mediods算法比较适用于簇为球型的,对于非球型的,一般需要基于密度的聚类,比如DBSCAN
要了解DBSCAN,我们需要知道几个基本概念
r-邻域:给定点半径为r的区域。
核心点:如果一个点的r邻域内最少包含M个点,则该点称为核心点。
直接密度可达:对于核心点P而言,如果另一个点O在P的r邻域内,那么称O为P的直接密度可达点。
密度可达:对于P的直接密度可达点O的r邻域内,如果包含另一个点Q,那么称Q为P的密度可达点。
密度相连:如果Q和N都是核心点P的密度可达点,但是并不在一条直线路径上,那么称两者为密度相连。
算法思想:
指定R和M。
计算所有的样本点,如果点p的r邻域内有超过M个点,那么创建一个以P为核心点的新簇。
反复寻找这些核心点的直接密度可达点(之后可能是密度可达),将其加入到相应的簇,对于核心点发生密度相连的情况加以合并。
当没有新的点加入到任何簇中时,算法结束。
优点:
(1)聚类速度快且能够有效处理噪声点和发现任意形状的空间聚类;
(2)与K-MEANS比较起来,不需要输入要划分的聚类个数;
(3)聚类簇的形状没有偏倚;
(4)可以在需要时输入过滤噪声的参数。
缺点:
(1)当数据量增大时,要求较大的内存支持I/O消耗也很大;
(2)当空间聚类的密度不均匀、聚类间距差相差很大时,聚类质量较差,因为这种情况下参数MinPts和Eps选取困难
(3)算法聚类效果依赖与距离公式选取,实际应用中常用欧式距离,对于高维数据,存在“维数灾难”。
#---基于密度的聚类分析
library(fpc)
iris2<-iris[-5]
ds<-dbscan(iris2,eps=0.42,MinPts = 5)
table(ds$cluster,iris$Species)
#打印出ds和iris2的聚类散点图
plot(ds,iris2)
#打印出iris第一列和第四列为坐标轴的聚类结果
plot(ds,iris2[,c(1,4)])
#另一个表示聚类结果的函数,plotcluster
plotcluster(iris2,ds$cluster)
网友评论