聚类算法的目的就是依据已知的数据,将相似度高的样本集中到各自的簇中。当然,聚类分析不仅可以实现数据的分割,也能够实现异常点的识别。
Kmeans聚类
该算法可以将数据划分为指定的K个簇,中心点是各簇样本均值计算所得。
#普通kmeans算法
kmeans(x,centers,iter.max=1-,nstart=1,trace=FALSE, algorithm=c("Hartigan-Wong","Lloyd","Forgy","MacQueen")
# centers: 指定聚类的个数或者认为设定初始簇中心
#iter.max: 最大迭代次数
#kmeans++算法
kmeanspp(data,k=2,start="random",iter.max=100,nstart=10,...)
#k 指定聚类个数
诚然,关于聚类分析,特别是Kmeans聚类分析众多读者已经熟知, 我们暂且不去了解其核心的原理的数学表达,而是思考如克确定最佳的K值,即如何评价K值。
最佳K值的确定
书中介绍了三种评估方法,分别是簇内离差平方和拐点法、轮廓系数法和间隔统计量法。
拐点法
在不同的k值下计算簇内离差平方和。
轮廓系数法
目标为S接近1
其中 b(i)表示的是簇间离散度 a(i)是密集性。
可以直接h2使用bios2mds包中的sil.score函数。
sil.score(mat,nb.clus=c(2:13),nb.run=100,iter.max=1000,method="euclidean
#nb.clus 指定聚类个数的范围,默认为2~13个
Gap Statistic
在R语言里面具有现成的函数计算聚类的间隔统计量,那就是cluster包中的clusGap函数,可以返回不同k值下的Gap值和sk值。
clusGap(x,FUNcluster,K.max,B=100)
#K.max 指定聚类的最大数量
?
|