当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R clara 集群大型应用程序


R语言 clara 位于 cluster 包(package)。

说明

计算 "clara" 对象,list 表示数据聚类为 k 簇。

用法

clara(x, k, metric = c("euclidean", "manhattan", "jaccard"),
      stand = FALSE, cluster.only = FALSE, samples = 5,
      sampsize = min(n, 40 + 2 * k), trace = 0, medoids.x = TRUE,
      keep.data = medoids.x, rngR = FALSE, pamLike = FALSE, correct.d = TRUE)

参数

x

数据矩阵或 DataFrame ,每行对应一个观察值,每列对应一个变量。所有变量都必须是数字。允许缺失值 (NA)。

k

整数,簇的数量。需要 ,其中 是观测值数量(即 n = nrow(x) )。

metric

字符串,指定用于计算观测值之间差异的度量。当前可用的选项有"euclidean"、"manhattan" 和"jaccard"。

欧几里得距离是差值的平方根,曼哈顿距离是绝对差值之和。

stand

逻辑,指示在计算差异之前x 中的测量是否已标准化。通过减去变量的平均值并除以变量的平均绝对偏差,对每个变量(列)的测量值进行标准化。

cluster.only

逻辑性;如果为 true,则仅计算并返回聚类,请参阅详细信息。

samples

整数,比如说 ,从数据集中抽取的样本数。默认情况下,N = 5,由于历史(以及现在向后兼容性)原因而相当小,我们建议将 samples 设置大一个数量级.

sampsize

整数,例如 ,每个样本中的观察数。 sampsize 应高于簇数 ( k ) 且最多为观测值数 ( nrow(x) )。虽然计算量与 成正比,请参见下面的注释,但仍建议将 sampsize 设置为比(历史)默认值更大的值。

trace

指示算法期间诊断输出的跟踪级别的整数。

medoids.x

逻辑指示是否应返回中心值,与输入数据 x 的某些行相同。如果 FALSEkeep.data 也必须为 false,并且仍将返回中心点索引,即中心点的行号(i.med 组件)。该算法通过减少 x 的一份副本来节省空间。

keep.data

逻辑指示是否应将数据(如果 stand 为 true 则进行缩放)保留在结果中。将其设置为 FALSE 可以节省内存(从而节省时间),但会禁用结果的 clusplot() ing。使用medoids.x = FALSE 可以节省更多内存。

rngR

逻辑表明如果R应该使用 的随机数生成器而不是原始的 clara() 内置随机数生成器。如果为真,这也意味着每次调用clara()返回不同的结果 - 尽管在良好的情况下仅略有不同。

pamLike

逻辑指示 “swap” 阶段(请参阅 C 代码中的 pam )是否应使用与 pam() 相同的算法。请注意,根据 Kaufman 和 Rousseeuw 的说明,这应该始终是正确的,但由于原始 Fortran 代码和后续的 C 移植始终包含关于 PAM 的一个小 one-letter 更改(根据 Martin Maechler 的打字错误),默认值,pamLike = FALSE 已被选择保持向后兼容,而不是“PAM compatible”。

correct.d

逻辑或整数表示:仅在 x 中存在 NA 的情况下 — 应使用正确的距离计算,而不是原始 Fortran 代码中存在的错误公式,并在 2016 年初使用。

由于新的正确公式暂时不向后兼容,因此在这种情况下会发出警告信号,除非用户明确指定 correct.d

细节

clara 在 Kaufman 和 Rousseuw (1990) 的第 3 章中有完整说明。与pam等其他分区方法相比,它可以处理更大的数据集。在内部,这是通过考虑固定大小 (sampsize) 的 sub-datasets 来实现的,这样时间和存储要求在 中变为线性而不是二次。

每个sub-dataset被划分为k使用与中相同的算法进行聚类pam.
一次k从sub-dataset中选择了代表性对象,整个数据集的每个观测值都分配给最近的中心点。

观测值与其最接近中心点的差异的平均值(相当于总和)用作聚类质量的度量。平均值(或总和)最小的sub-dataset 被保留。对最终分区进行进一步分析。

在此之前,每个sub-dataset都被迫包含从最佳sub-dataset获得的中心点。随机抽取的观察结果将添加到该集合中,直到达到sampsize

什么时候cluster.only为 true,结果只是一个指定聚类的(可能已命名的)整数向量,即
clara(x,k, cluster.only=TRUE)是相同的
clara(x,k)$clustering但计算效率更高。

如果 cluster.only 为 false(默认情况下),则表示聚类的类 "clara" 的对象。有关详细信息,请参阅clara.object

如果 cluster.only 为 true,则结果为 "clustering",即长度为 的整数向量,其中包含来自 1:k 的条目。

注意

默认情况下,随机采样是通过非常简单方案(带句点 ) 在 Fortran 代码中,独立于R的随机数生成,事实上,是确定性的。或者,我们建议设置rngR = TRUE它使用R的随机数生成器。然后,clara()通常通过使用使结果可重复set.seed()调用之前clara.

clara 计算(对于小型 k )的存储要求约为 ,其中 。 CPU 计算时间(再次假设 k 较小)约为 ,其中

对于“small”数据集,可以直接使用pam函数。可以认为很小的东西实际上是可用计算能力(内存(RAM)和速度)的函数。最初(1990 年),“small” 表示观测值少于 100 个; 1997 年,作者说“小(比如少于 200 个观察值)”;截至 2006 年,您可以使用 pam 进行数千个观察。

例子

## generate 500 objects, divided into 2 clusters.
x <- rbind(cbind(rnorm(200,0,8), rnorm(200,0,8)),
           cbind(rnorm(300,50,8), rnorm(300,50,8)))
clarax <- clara(x, 2, samples=50)
clarax
clarax$clusinfo
## using pamLike=TRUE  gives the same (apart from the 'call'):
all.equal(clarax[-8],
          clara(x, 2, samples=50, pamLike = TRUE)[-8])
plot(clarax)

## cluster.only = TRUE -- save some memory/time :
clclus <- clara(x, 2, samples=50, cluster.only = TRUE)
stopifnot(identical(clclus, clarax$clustering))


## 'xclara' is an artificial data set with 3 clusters of 1000 bivariate
## objects each.
data(xclara)
(clx3 <- clara(xclara, 3))
## "better" number of samples
cl.3 <- clara(xclara, 3, samples=100)
## but that did not change the result here:
stopifnot(cl.3$clustering == clx3$clustering)
## Plot similar to Figure 5 in Struyf et al (1996)
## Not run: plot(clx3, ask = TRUE)


## Try 100 times *different* random samples -- for reliability:
nSim <- 100
nCl <- 3 # = no.classes
set.seed(421)# (reproducibility)
cl <- matrix(NA,nrow(xclara), nSim)
for(i in 1:nSim)
   cl[,i] <- clara(xclara, nCl, medoids.x = FALSE, rngR = TRUE)$cluster
tcl <- apply(cl,1, tabulate, nbins = nCl)
## those that are not always in same cluster (5 out of 3000 for this seed):
(iDoubt <- which(apply(tcl,2, function(n) all(n < nSim))))
if(length(iDoubt)) { # (not for all seeds)
  tabD <- tcl[,iDoubt, drop=FALSE]
  dimnames(tabD) <- list(cluster = paste(1:nCl), obs = format(iDoubt))
  t(tabD) # how many times in which clusters
}

作者

Kaufman and Rousseeuw (see agnes), originally. Metric "jaccard": Kamil Kozlowski (@ownedoutcomes.com) and Kamil Jadeszko. All arguments from trace on, and most R documentation and all tests by Martin Maechler.

也可以看看

agnes 用于背景和参考; clara.objectpampartition.objectplot.partition

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Clustering Large Applications。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。