劃分聚類分析: K均值和基於中心點的劃分(PAM)

一.原理

K均值聚類
      最常見的劃分方法是K均值聚類分析。從概念上講, K均值算法如下:
       (1) 選擇K箇中心點(隨機選擇K行);
       (2) 把每個數據點分配到離它最近的中心點;
       (3) 重新計算每類中的點到該類中心點距離的平均值(也就說,得到長度爲p的均值向量,這裏的p是變量的個數);
       (4) 分配每個數據到它最近的中心點;
       (5) 重複步驟(3)和步驟(4)直到所有的觀測值不再被分配或是達到最大的迭代次數(R把10次作爲默認迭代次數)。

       這種算法是把觀測值分成k組並使得觀測值到其指定的聚類中心的平方的總和爲最小。也就是說,在步驟(2)和步驟(4)中,每個觀測值被分配到使下式得到最小值的那一類中:

        表示第i個觀測值中第j個變量的值。表示第k個類中第j個變量的均值,其中p是變量的個數。

 

PAM聚類算法:

       因爲K均值聚類方法是基於均值的,所以它對異常值是敏感的。一個更穩健的方法是圍繞中心點的劃分(PAM)。與其用質心(變量均值向量)表示類,不如用一個最有代表性的觀測值來表示(稱爲中心點)。 K均值聚類一般使用歐幾里得距離,而PAM可以使用任意的距離來計算。因此, PAM可以容納混合數據類型,並且不僅限於連續變量。

       PAM算法如下:
       (1) 隨機選擇K個觀測值(每個都稱爲中心點);
       (2) 計算觀測值到各個中心的距離/相異性;
       (3) 把每個觀測值分配到最近的中心點;
       (4) 計算每個中心點到每個觀測值的距離的總和(總成本);
       (5) 選擇一個該類中不是中心的點,並和中心點互換;
       (6) 重新把每個點分配到距它最近的中心點;
       (7) 再次計算總成本;
       (8) 如果總成本比步驟(4)計算的總成本少,把新的點作爲中心點;
       (9) 重複步驟(5)~(8)直到中心點不再改變。


二、步驟和結果

環境:windows 10 64位系統,R ×64 3.1.2

 K 均值聚類     

       在R中K均值的函數格式是kmeans(x,centers),這裏x表示數值數據集(矩陣或數據框),centers是要提取的聚類數目。函數返回類的成員、類中心、平方和(類內平方和、類間平方和、總平方和)和類大小。
      由於K均值聚類在開始要隨機選擇k箇中心點,在每次調用函數時可能獲得不同的方案。使用set.seed()函數可以保證結果是可複製的。此外,聚類方法對初始中心值的選擇也很敏感。
       kmeans()函數有一個nstart選項嘗試多種初始配置並輸出最好的一個。例如,加上nstart=25會生成25個初始配置。通常推薦使用這種方法。

        讓我們用K均值聚類來處理包含178種意大利葡萄酒中13種化學成分的數據集。該數據最初來自於UCI機器學習庫(http://www.ics.uci.edu/~mlearn/MLRepository.html),但是可以通過rattle包獲得。在這個數據集裏,觀測值代表三種葡萄酒的品種,由第一個變量(類型)表示。我們可以放棄這一變量,進行聚類分析,看看是否可以恢復已知的結構。具體實驗過程,如下:

  

 



因爲變量值變化很大,所以在聚類前要將其標準化(1)。下一步,使用wssplot()和Nbclust()函數確定聚類的個數(2) 。圖1表示從一類到三類變化時,組內的平方總和有一個明顯的下降趨勢。三類之後,下降的速度減弱,暗示着聚成三類可能對數據來說是一個很好的擬合。在圖2中, NbClust包中的24種指標中有15種建議使用類別數爲三的聚類方案。需要注意的是並非30個指標都可以計算每個數據集。


圖1 畫出組內的平方和和提取的聚類個數的對比。從一類到三類下降得很快           

      (之後下降得很慢),建議選用聚類個數爲三的解決方案


圖2  使用NbClust包中的26個指標推薦的聚類個數

使用kmeans()函數得到的最終聚類中,聚類中心也被輸出了(3)。因爲輸出的聚類中心是基於標準化的數據,所以可以使用aggregate()函數和類的成員來得到原始矩陣中每一類的變量均值。

          使用Kmeans()函數總的聚類情況如下圖3所示。


圖3 劃分3類的分類情況

PAM聚類算法:

       我們可以使用cluster包中的pam()函數使用基於中心點的劃分方法。格式是pam(x, k, metric="euclidean",stand=FALSE),這裏的x表示數據矩陣或數據框, k表示聚類的個數,metric表示使用的相似性/相異性的度量,而stand是一個邏輯值,表示是否有變量應該在計算該指標之前被標準化。具體實驗過程,如下:


       注意,這裏得到的中心點是葡萄酒數據集中實際的觀測值。在這種情況下,分別選擇36、 107和175個觀測值來代表三類。通過從13個測定變量上得到的前兩個主成分繪製每個觀測的座標來創建二元圖(參見第14章)。每個類用包含其所有點的最小面積的橢圓表示。圖4列出了使用PAM方法處理葡萄酒的數據。


圖4  基於意大利葡萄酒數據使用PAM算法得到的三組聚類圖


相應代碼及對用的word文檔解釋可從以下鏈接得到:

劃分聚類分析: K均值和基於中心點的劃分(PAM) 及相應代碼-CSDN下載
http://download.csdn.net/download/u012711335/10142621


注:本文思想來自《R語言實戰》


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章