當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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