1. 程式人生 > >R語言 層次聚類(系統聚類)

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) # 各層次的個數