天天看點

r語言聚類分析:k-means和層次聚類

聚類分析算法很多,比較經典的有k-means和層次聚類法。

k-means聚類分析算法

k-means的k就是最終聚集的簇數,這個要你事先自己指定。k-means在常見的機器學習算法中算是相當簡單的,基本過程如下:

  • 首先任取k個樣本點作為k個簇的初始中心;
  • 對每一個樣本點,計算它們與k個中心的距離,把它歸入距離最小的中心所在的簇;
  • 等到所有的樣本點歸類完畢,重新計算k個簇的中心;
  • 重複以上過程直至樣本點歸入的簇不再變動。

k-means的聚類過程示範如下:

r語言聚類分析:k-means和層次聚類

k-means聚類過程

k-means聚類分析的原理雖然簡單,但缺點也比較明顯:

  • 首先聚成幾類這個k值你要自己定,但在對資料一無所知的情況下你自己也不知道k應該定多少;
  • 初始質心也要自己選,而這個初始質心直接決定最終的聚類效果;
  • 每一次疊代都要重新計算各個點與質心的距離,然後排序,時間成本較高。

值得一提的是,計算距離的方式有很多種,不一定非得是笛卡爾距離;計算距離前要歸一化。

層次聚類法

盡管k-means的原理很簡單,然而層次聚類法的原理更簡單。它的基本過程如下:

  • 每一個樣本點視為一個簇;
  • 計算各個簇之間的距離,最近的兩個簇聚合成一個新簇;
  • 重複以上過程直至最後隻有一簇。

層次聚類不指定具體的簇數,而隻關注簇之間的遠近,最終會形成一個樹形圖。

r語言聚類分析:k-means和層次聚類

層次聚類示例

通過這張樹形圖,無論想劃分成幾個簇都可以很快地劃出。

以下以癌細胞細據為例,示範K-means和層次聚類法的過程。

nci.labels = NCI60$labs 
nci.data = NCI60$data 
sd.data = scale(nci.data) 
data.dist = dist(sd.data) 
plot(hclust(data.dist),labels = nci.labels, main = "Complete Linkage", xlab = "", sub = "", ylab = "") # 預設按最長距離聚類
 plot(hclust(data.dist,method = "average"),labels = nci.labels, main = "Average Linkage", xlab = "", sub = "", ylab = "") # 類平均法
> plot(hclust(data.dist),labels = nci.labels, main = "Single Linkage", xlab = "", sub = "", ylab = "") #最短距離法                
r語言聚類分析:k-means和層次聚類

Complete Linkage

r語言聚類分析:k-means和層次聚類

Average Linkage

r語言聚類分析:k-means和層次聚類

Single Linkage

可見選擇不同的距離名額,最終的聚類效果也不同。其中最長距離和類平均距離用得比較多,因為産生的譜系圖較為均衡。

> # 指定聚類數
> hc.out = hclust(dist(sd.data)) 
> hc.clusters = cutree(hc.out,4)

 
> plot(hc.out,labels = nci.labels) > abline(h=139,col="red") # 切割成4類                
r語言聚類分析:k-means和層次聚類

層次聚類劃分成4類

圖中一條紅線将簇劃分成4類,很容易看出哪些樣本各屬于哪一簇。

以上是層次聚類法的結果,但如果用k-means聚類的話,結果很可能就不一樣了。

> # k-means聚類
> set.seed(2) 
> km.out = kmeans(sd.data,4,nstart = 20) 
> km.clusters = km.out$cluster 
> table(km.clusters,hc.clusters) # 兩種聚類結果的确有差異,k-means的第2簇與層次聚類的第3簇一緻 
                
r語言聚類分析:k-means和層次聚類

最受歡迎的見解

1.R語言k-Shape算法股票價格時間序列聚類

2.R語言中不同類型的聚類方法比較

3.R語言對用電負荷時間序列資料進行K-medoids聚類模組化和GAM回歸

4.r語言鸢尾花iris資料集的層次聚類

5.Python Monte Carlo K-Means聚類實戰

6.用R進行網站評論文本挖掘聚類

繼續閱讀