R中的聚类分析:确定最优聚类数

R中的聚类分析:确定最优聚类数

作为R领域的新手,我不太确定如何选择最佳的簇数来进行k-均值分析。在绘制了以下数据的子集之后,有多少个集群才是合适的呢?如何进行聚类树分析?

n = 1000kk = 10    x1 = runif(kk)y1 = runif(kk)z1 = runif(kk)    
x4 = sample(x1,length(x1))y4 = sample(y1,length(y1)) randObs <- function(){
  ix = sample( 1:length(x4), 1 )
  iy = sample( 1:length(y4), 1 )
  rx = rnorm( 1, x4[ix], runif(1)/8 )
  ry = rnorm( 1, y4[ix], runif(1)/8 )
  return( c(rx,ry) )}  x = c()y = c()for ( k in 1:n ){
  rPair  =  randObs()
  x  =  c( x, rPair[1] )
  y  =  c( y, rPair[2] )}z <- rnorm(n)d <- data.frame( x, y, z )


白板的微信
浏览 2027回答 3
3回答

青春有我

很难再加上这么详细的答案了。虽然我觉得我们应该提一下identify这里,特别是因为@Ben显示了大量的树状图示例。d_dist&nbsp;<-&nbsp;dist(as.matrix(d))&nbsp;&nbsp;&nbsp;#&nbsp;find&nbsp;distance&nbsp;matrix&nbsp;plot(hclust(d_dist))&nbsp;clusters&nbsp;<-&nbsp;identify(hclust(d_dist))identify允许您交互地从树状图中选择集群,并将您的选择存储到列表中。点击ESC离开互动模式,并返回到R控制台。注意,列表包含索引,而不是行名(与cutree).

慕码人2483693

为了确定聚类方法中的最优k-聚类。我通常用Elbow方法伴随并行处理以避免时间消耗.此代码可以这样进行示例:弯头法elbow.k&nbsp;<-&nbsp;function(mydata){dist.obj&nbsp;<-&nbsp;dist(mydata)hclust.obj&nbsp;<-&nbsp;hclust(dist.obj)css.obj&nbsp; <-&nbsp;css.hclust(dist.obj,hclust.obj)elbow.obj&nbsp;<-&nbsp;elbow.batch(css.obj)k&nbsp;<-&nbsp;elbow.obj$kreturn(k)}运行弯头并联no_cores&nbsp;<-&nbsp;detectCores() &nbsp;&nbsp;&nbsp;&nbsp;cl<-makeCluster(no_cores) &nbsp;&nbsp;&nbsp;&nbsp;clusterEvalQ(cl,&nbsp;library(GMD)) &nbsp;&nbsp;&nbsp;&nbsp;clusterExport(cl,&nbsp;list("data.clustering",&nbsp;"data.convert",&nbsp;"elbow.k",&nbsp;"clustering.kmeans")) &nbsp;start.time&nbsp;<-&nbsp;Sys.time() &nbsp;elbow.k.handle(data.clustering)) &nbsp;k.clusters&nbsp;<-&nbsp;parSapply(cl,&nbsp;1,&nbsp;function(x)&nbsp;elbow.k(data.clustering)) &nbsp;&nbsp;&nbsp;&nbsp;end.time&nbsp;<-&nbsp;Sys.time() &nbsp;&nbsp;&nbsp;&nbsp;cat('Time&nbsp;to&nbsp;find&nbsp;k&nbsp;using&nbsp;Elbow&nbsp;method&nbsp;is',(end.time&nbsp;-&nbsp;start.time),'seconds&nbsp;with&nbsp;k&nbsp;value:',&nbsp;k.clusters)效果很好。
打开App,查看更多内容
随时随地看视频慕课网APP