a、由於 K 均值聚類方法是基於均值的,因此它對異常值是敏感的,一個更穩健的方法是圍繞在中心點的劃分(PAM)。與其用質心(變量均值向量)表示類,不如用一個最有表明性的觀測值來表示(稱爲中心點)。算法
b、K 均值聚類通常使用歐幾里得距離,而 PAM 可使用任意的距離來計算。所以, PAM能夠容納混合數據類型,而且不只限於連續變量ide
a、隨機選擇 K 個觀測值(每一個都稱爲中心點)函數
b、計算觀測值到各個中心點的距離/相異性flex
c、把每一個觀測值分配到最近的中心點idea
d、計算每一箇中心點到每一個觀測值的距離的總和(總成本)spa
e、選擇一個該類中不是中心的點,並和中心點互換code
f、從新把每一個點分配到距它最近的中心點it
g、再次計算總成本io
h、若是總成本比步驟(4)計算總成本少,把新點做爲中心點table
i、重複步驟(5)~(6)直到中心點再也不改變
使用 cluster 包中的 pam() 函數很實用基於中心點的劃分方法,格式以下
pam(x , k, metric ="euclidean",stand = FLASE)
x:表示數據矩陣或數據框
k:表示聚類的個數
metric:表示使用的類似性/相異性的度量
stand:是一個邏輯值,表示是否有變量應該在計算該指標以前被標準化
對葡萄酒數據使用基於質心的劃分方法
> library(cluster) > set.seed(1234) > fit.pam <- pam(wine[-1],3,stand=T) #基於中心點劃分 > fit.pam$medoids #輸出中心點 Alcohol Malic Ash Alcalinity Magnesium Phenols Flavanoids Nonflavanoids [1,] 13.48 1.81 2.41 20.5 100 2.70 2.98 0.26 [2,] 12.25 1.73 2.12 19.0 80 1.65 2.03 0.37 [3,] 13.40 3.91 2.48 23.0 102 1.80 0.75 0.43 Proanthocyanins Color Hue Dilution Proline [1,] 1.86 5.1 1.04 3.47 920 [2,] 1.63 3.4 1.00 3.17 510 [3,] 1.41 7.3 0.70 1.56 750 > library(cluster) > set.seed(1234) #生成隨機的種子,種子是爲了讓結果具備可重複性 > fit.pam <- pam(wine[-1],3,stand=T) > fit.pam$medoids Alcohol Malic Ash Alcalinity Magnesium Phenols Flavanoids Nonflavanoids [1,] 13.48 1.81 2.41 20.5 100 2.70 2.98 0.26 [2,] 12.25 1.73 2.12 19.0 80 1.65 2.03 0.37 [3,] 13.40 3.91 2.48 23.0 102 1.80 0.75 0.43 Proanthocyanins Color Hue Dilution Proline [1,] 1.86 5.1 1.04 3.47 920 [2,] 1.63 3.4 1.00 3.17 510 [3,] 1.41 7.3 0.70 1.56 750 > clusplot(fit.pam,main="Bivariate Cluster Plot") #畫出聚類的方案,以下圖
注意,這裏獲得的中心點是葡萄酒數據集中實際的觀測值,在這種狀況下,分別選擇3六、107和175觀測值來表明三類。經過從13個測定變量上獲得的前兩個主成分繪製每個觀測的座標來建立二元圖。每一個類用包含其全部點的最小面積橢圓表示。
還須要注意的是,PAM在這案例中的表現不如 K均值
> ct.pam <- table(wine$Type,fit.pam$clustering) > ct.pam 1 2 3 1 59 0 0 2 16 53 2 3 0 1 47 > library(flexclust) > randIndex(ct.pam) ARI 0.6994957 #由0.9降低到0,7