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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。