pam 位於 cluster 包(package)。 說明
將數據分區(聚類)為 k 集群 “around medoids”,這是 K-means 的更強大版本。
用法
pam(x, k, diss = inherits(x, "dist"),
metric = c("euclidean", "manhattan"),
medoids = if(is.numeric(nstart)) "random",
nstart = if(variant == "faster") 1 else NA,
stand = FALSE, cluster.only = FALSE,
do.swap = TRUE,
keep.diss = !diss && !cluster.only && n < 100,
keep.data = !diss && !cluster.only,
variant = c("original", "o_1", "o_2", "f_3", "f_4", "f_5", "faster"),
pamonce = FALSE, trace.lev = 0)
參數
x |
數據矩陣或 DataFrame ,或相異矩陣或對象,具體取決於 對於矩陣或 DataFrame ,每行對應一個觀察值,每列對應一個變量。所有變量都必須是數字。允許缺失值 ( 在相異矩陣的情況下, |
k |
正整數,指定簇的數量,小於觀測值的數量。 |
diss |
邏輯標誌:如果為 TRUE( |
metric |
字符串,指定用於計算觀測值之間差異的度量。 |
medoids |
NULL(默認)或長度 - |
nstart |
僅當 |
stand |
邏輯性;如果為真,則在計算差異之前對 |
cluster.only |
邏輯性;如果為 true,則僅計算並返回聚類,請參閱詳細信息。 |
do.swap |
邏輯指示是否應該發生交換階段。默認值 |
keep.diss , keep.data |
邏輯指示是否應將差異和/或輸入數據 |
pamonce |
|
variant |
|
trace.lev |
整數,指定在算法的構建和交換階段打印診斷的跟蹤級別。默認 |
細節
Kaufman 和 Rousseuw (1990) 的第 2 章完整說明了基本的 pam 算法。與 kmeans 中的 k-means 方法相比,函數 pam 具有以下特點: (a) 它還接受相異矩陣; (b) 它更穩健,因為它最小化了差異之和,而不是歐氏距離平方和; (c) 它提供了一種新穎的圖形顯示,輪廓圖(參見 plot.partition ) (d) 它允許在結果 pr <- pam(..) 上使用 mean(silhouette(pr)[, "sil_width"]) 或直接其組件 pr$silinfo$avg.width 選擇簇的數量,參見還有pam.object。
什麽時候cluster.only為 true,結果隻是一個指定聚類的(可能已命名的)整數向量,即
pam(x,k, cluster.only=TRUE)是相同的
pam(x,k)$clustering但計算效率更高。
pam-算法基於搜索k數據集觀測值中的代表性對象或中心點。這些觀察結果應該代表數據的結構。找到一組後k中心點,k通過將每個觀測值分配給最近的中心點來構建聚類。目標是找到k代表性對象,將觀察結果與其最接近的代表性對象的差異總和最小化。
默認情況下,當medoids沒有指定,算法首先尋找一組好的初始中心點(這稱為建造階段)。然後它找到目標函數的局部最小值,即一個解決方案,使得具有中心點(即‘swap’)的觀測值不會出現單一切換,這會降低目標(這稱為交換階段)。
當指定(或隨機生成)medoids 時,它們的順序並不重要;一般來說,算法的設計不依賴於觀察的順序。
pamonce 選項是集群 1.14.2(2012 年 1 月)中的新選項,由日內瓦大學的 Matthias Studer 根據 Reynolds 等人的研究結果提出。 (2006) 並由多特蒙德工業大學的 Erich Schubert 進行了擴展,並進行了 FastPAM 優化。
默認的 FALSE (或整數 0 )對應於原始的 “swap” 算法,而 pamonce = 1 (或 TRUE )對應於第一個提案....並且 pamonce = 2 另外實現了第二個提案以及。
除了線性近似構建之外,“FastPAM”(Schubert 和 Rousseeuw,2019)的關鍵思想均已實現,如下所示:
pamonce = 3:-
通過利用點不能同時最接近所有當前中心點,將運行時間減少 O(k) 倍。
pamonce = 4:-
另外,允許每次迭代執行多次交換,通常會減少迭代次數。
pamonce = 5:-
添加了從
pamonce = 2方法複製的小優化,預計將是所包含的“FastPam”變體中最快的。
“FasterPAM”(Schubert 和 Rousseuw,2021)是通過
pamonce = 6:-
執行每次交換都會立即改善結果,因此每次迭代通常會進行多次交換;此交換算法以 運行,而不是 時間,這對於除小 之外的所有算法來說要快得多。
此外,“FasterPAM”使用中心點的隨機初始化(而不是‘build’階段)來避免構建算法的初始化成本。特別是對於較大的 k,這會產生更快的算法,同時保持相似的結果質量。
人們可以通過設置 nstart > 1 來決定使用重複的隨機初始化。
值
代表聚類的 "pam" 類的對象。有關詳細信息,請參閱?pam.object。
注意
對於大型數據集,pam 可能需要太多內存或太多計算時間,因為兩者都是 。那麽,clara() 更好,請參閱其文檔。
當前 和 存在硬限製,因為對於較大的 , 大於最大整數 ( .Machine$integer.max = )。
例子
## generate 25 objects, divided into 2 clusters.
x <- rbind(cbind(rnorm(10,0,0.5), rnorm(10,0,0.5)),
cbind(rnorm(15,5,0.5), rnorm(15,5,0.5)))
pamx <- pam(x, 2)
pamx # Medoids: '7' and '25' ...
summary(pamx)
plot(pamx)
## use obs. 1 & 16 as starting medoids -- same result (typically)
(p2m <- pam(x, 2, medoids = c(1,16)))
## no _build_ *and* no _swap_ phase: just cluster all obs. around (1, 16):
p2.s <- pam(x, 2, medoids = c(1,16), do.swap = FALSE)
p2.s
p3m <- pam(x, 3, trace = 2)
## rather stupid initial medoids:
(p3m. <- pam(x, 3, medoids = 3:1, trace = 1))
pam(daisy(x, metric = "manhattan"), 2, diss = TRUE)
data(ruspini)
## Plot similar to Figure 4 in Stryuf et al (1996)
## Not run: plot(pam(ruspini, 4), ask = TRUE)
作者
Kaufman and Rousseeuw's orginal Fortran code was translated to C
and augmented in several ways, e.g. to allow cluster.only=TRUE
or do.swap=FALSE, by Martin Maechler.
Matthias Studer, Univ.Geneva provided the pamonce (1 and 2)
implementation.
Erich Schubert, TU Dortmund contributed the pamonce (3 to 6)
implementation.
參考
Reynolds, A., Richards, G., de la Iglesia, B. and Rayward-Smith, V. (1992) Clustering rules: A comparison of partitioning and hierarchical clustering algorithms; Journal of Mathematical Modelling and Algorithms 5, 475-504. doi:10.1007/s10852-005-9022-1.
Erich Schubert and Peter J. Rousseeuw (2019) Faster k-Medoids Clustering: Improving the PAM, CLARA, and CLARANS Algorithms; SISAP 2020, 171-187. doi:10.1007/978-3-030-32047-8_16.
Erich Schubert and Peter J. Rousseeuw (2021) Fast and Eager k-Medoids Clustering: O(k) Runtime Improvement of the PAM, CLARA, and CLARANS Algorithms; Preprint, to appear in Information Systems (https://arxiv.org/abs/2008.05171).
也可以看看
agnes 用於背景和參考; pam.object、clara、daisy、partition.object、plot.partition、dist。
相關用法
- R pam.object 圍繞 Medoids (PAM) 對象進行分區
- R pluton 鈈同位素成分批次
- R print.mona MONA 對象的打印方法
- R print.clara CLARA 對象的打印方法
- R plot.diana 分裂層次聚類圖
- R plot.mona 一元分裂層次聚類的旗幟
- R plot.partition 數據集分區圖
- R pltree 繪製層次聚類的聚類樹
- R plantTraits 植物物種性狀數據
- R plot.agnes 凝聚層次聚類圖
- R print.agnes AGNES 對象的打印方法
- R print.pam PAM 對象的打印方法
- R print.diana DIANA 對象的打印方法
- R print.dissimilarity 相異對象的打印和匯總方法
- R predict.ellipsoid 橢球體預測方法
- R print.fanny FANNY 對象的打印和匯總方法
- R summary.clara “clara”對象的摘要方法
- R diana 分裂分析聚類
- R votes.repub 總統選舉中共和黨候選人的投票
- R agnes 凝聚嵌套(層次聚類)
- R mona 二元變量的單論分析聚類
- R bannerplot 繪圖橫幅(層次聚類)
- R summary.agnes “agnes”對象的摘要方法
- R summary.mona “mona”對象的摘要方法
- R chorSub Kola 數據 C 範圍的子集
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Partitioning Around Medoids。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
