R语言数据挖掘实践——密度聚类

该博客介绍了如何利用R语言的fpc包中的DBSCAN算法进行密度聚类。DBSCAN通过eps和MinPts参数识别数据的密度,能发现任意形状的簇并抵抗噪声。在iris数据集上进行演示,展示了聚类结果,并通过代码预测新数据的类标号。此外,还提到了plotcluster()函数用于可视化聚类效果。
摘要由CSDN通过智能技术生成

  

R语言数据挖掘实践——密度聚类

  fpc包中的DBSCAN算法为数值型数据提供了密度聚类。密度聚类的基本思想是将密度相连的对象划分到同一个簇中。DBSCAN算法有两个关键的参数:

  eps:可达距离,用于定义邻域的大小;

  MinPts:最小数目的对象点。

  如果点a邻域内包含的点数目不少于MinPts,则a为密集点,而a邻域内所有点从a出发都是密度可达的,将这些点与a划分到同一个簇中。

  密度聚类的优势在于可以发现任意形状的簇,并且对噪声数据不敏感。相比之下,k均值算法更倾向于发现球状的且大小相近的簇。

  下面使用代码在iris数据集上进行密度聚类。

  > library(fpc)

  > iris2 <- iris[-5]

  > ds <- dbscan(iris2, eps=0.42, MinPts=5)

  > table(ds$cluster,iris$Species)

  setosa versicolor virginica

  0 2 10 17

  1 48 0 0

  2 0 37 0

  3 0 3 33

  > plot(ds,iris2)

  

R语言数据挖掘实践——密度聚类

  上面的数据表中,第一列从“1”到“3”为识别出来的3个聚类簇,“0”表示噪声数据或离群点,即不属于任何簇的对象。图中的噪声点用黑色小圆圈表示。

  我们还可以专门展示列与列之间的聚类结果,例如我们需要显示第一列和第四列的聚类结果。

  > plot(ds, iris2[c(1,4)])

  

R语言数据挖掘实践——密度聚类

  fpc包还提供了另一个展示聚类结果的函数plotcluster()。需要注意的是,数据将被投影到不同的簇中。

  > plotcluster(iris2,ds$cluster)

  

R语言数据挖掘实践——密度聚类

  根据新数据与各个簇之间的相似度,聚类模型可以对新数据打上类标号。下面的例子从iris数据集中抽取了一个包含10个对象的样本,并向样本中加入了少量噪声数据用于标记新数据集。噪声数据可以使用runif()函数基于均匀分布随机生成。

  > set.seed(435)

  > idx <- sample(1:nrow(iris),10)

  > newData <- iris[idx,-5]

  > newData <- newData + matrix(runif(10*4,min=0,max=0.2),nrow=10,ncol=4)

  > myPred <- predict(ds,iris2,newData)

  > plot(iris2[c(1,4)],col=1+ds$cluster)

  > points(newData[c(1,4)],pch="*",col=1+myPred,cex=3)

  

R语言数据挖掘实践——密度聚类

  > table(myPred,iris$Species[idx])

  myPred setosa versicolor virginica

  0 0 0 1

  1 3 0 0

  2 0 3 0

  3 0 1 2

  从上面的预测结果可以看出,超过10个对象被标记,正确标记的对象有8个,新数据用“*”号表示,颜色表示类标号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值