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