前言:
如今各位老铁们对“r语言 聚类”大体比较讲究,看官们都想要剖析一些“r语言 聚类”的相关文章。那么小编也在网上汇集了一些关于“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)
上面的数据表中,第一列从“1”到“3”为识别出来的3个聚类簇,“0”表示噪声数据或离群点,即不属于任何簇的对象。图中的噪声点用黑色小圆圈表示。
我们还可以专门展示列与列之间的聚类结果,例如我们需要显示第一列和第四列的聚类结果。
> plot(ds, iris2[c(1,4)])
fpc包还提供了另一个展示聚类结果的函数plotcluster()。需要注意的是,数据将被投影到不同的簇中。
> plotcluster(iris2,ds$cluster)
根据新数据与各个簇之间的相似度,聚类模型可以对新数据打上类标号。下面的例子从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)
> 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个,新数据用“*”号表示,颜色表示类标号。