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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
