为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白板的微信 2019-07-04 18:06:04
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 )
查看完整描述

3 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

很难再加上这么详细的答案了。虽然我觉得我们应该提一下identify这里,特别是因为@Ben显示了大量的树状图示例。

d_dist <- dist(as.matrix(d))   # find distance matrix plot(hclust(d_dist)) clusters <- identify(hclust(d_dist))

identify允许您交互地从树状图中选择集群,并将您的选择存储到列表中。点击ESC离开互动模式,并返回到R控制台。注意,列表包含索引,而不是行名(与cutree).


查看完整回答
反对 回复 2019-07-04
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

为了确定聚类方法中的最优k-聚类。我通常用Elbow方法伴随并行处理以避免时间消耗.此代码可以这样进行示例:

弯头法

elbow.k <- function(mydata){dist.obj <- dist(mydata)hclust.obj <- hclust(dist.obj)css.obj 
<- css.hclust(dist.obj,hclust.obj)elbow.obj <- elbow.batch(css.obj)k <- elbow.obj$kreturn(k)}

运行弯头并联

no_cores <- detectCores()
    cl<-makeCluster(no_cores)
    clusterEvalQ(cl, library(GMD))
    clusterExport(cl, list("data.clustering", "data.convert", "elbow.k", "clustering.kmeans"))
 start.time <- Sys.time()
 elbow.k.handle(data.clustering))
 k.clusters <- parSapply(cl, 1, function(x) elbow.k(data.clustering))
    end.time <- Sys.time()
    cat('Time to find k using Elbow method is',(end.time - start.time),'seconds with k value:', k.clusters)

效果很好。


查看完整回答
反对 回复 2019-07-04
  • 3 回答
  • 0 关注
  • 2017 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信