R语言 层次聚类(系统聚类)

层次聚类试图在不同层次对数据集进行划分

  library(NbClust)
 
  data(nutrient, package = 'flexclust')
  row.names(nutrient) <- tolower(row.names(nutrient))
  nutrient.scale <- scale(nutrient)
  d <- dist(nutrient.scale)
  fit.average <- hclust(d,method = "average")
  # 休伯特指数是确定聚类数量的图形方法。 在休伯特指数图中,我们寻求一个显着的膝盖,
  # 这个指标相当于该指标值的显着增加,即休伯特指数第二差异图中的重要峯值。
  # 确定层次聚类的个数,如果是有几个合适的聚类个数,需确定是需要分类的个数少还是分类个数多
  nc <- NbClust(nutrient.scale, distance = "euclidean", min.nc = 2, 
                max.nc = 15, method = "average") # 包NbClust
  table(nc$Best.nc[1,])
  barplot(table(nc$Best.nc[1,]))
  
  # plot
  plot(fit.average, hang = -1,cex = .8)
  rect.hclust(fit.average, k = 5) # 在图上画出聚类个数
  
  # 在确定好层次个数之后计算每个层次的个数
  clusters <- cutree(fit.average, k = 5)
  table(clusters) # 各层次的个数







点赞