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


R silhouette 從聚類中計算或提取輪廓信息


R語言 silhouette 位於 cluster 包(package)。

說明

根據 集群中的給定集群計算輪廓信息。

用法

silhouette(x, ...)
## Default S3 method:
  silhouette(x, dist, dmatrix, ...)
## S3 method for class 'partition'
silhouette(x, ...)
## S3 method for class 'clara'
silhouette(x, full = FALSE, subset = NULL, ...)

sortSilhouette(object, ...)
## S3 method for class 'silhouette'
summary(object, FUN = mean, ...)
## S3 method for class 'silhouette'
plot(x, nmax.lab = 40, max.strlen = 5,
     main = NULL, sub = NULL, xlab = expression("Silhouette width "* s[i]),
     col = "gray",  do.col.sort = length(col) > 1, border = 0,
     cex.names = par("cex.axis"), do.n.k = TRUE, do.clus.stat = TRUE, ...)

參數

x

適當類別的對象;對於default方法,具有 不同整數簇代碼的整數向量或具有此類x$clustering分量的列表。請注意,輪廓統計僅在 時定義。

dist

從類 dist 繼承或可強製轉換為一的相異對象。如果未指定,則必須指定dmatrix

dmatrix

指定對稱相異矩陣 ( ),而不是 dist ,這樣效率更高。

full

中的邏輯或數字指定是否應為 clara 對象計算完整輪廓。當數字為 時,對於數據的隨機 sample.int(n, size = f*n) ,將計算輪廓值。這需要 內存,因為內部需要(子)樣本(參見 daisy )的完全不同性。

subset

1:n 的子集,指定而不是 full 來指定用於輪廓計算的觀測值的索引。

object

silhouette 的對象。

...

傳入和傳出方法的進一步參數。

FUN

用於總結輪廓寬度的函數。

nmax.lab

整數,表示標簽的數量,對於單個名稱標記輪廓圖來說被認為太大。

max.strlen

正整數,給出輪廓圖標簽中字符串被截斷的長度。

main , sub , xlab

title 的參數;這裏有一個合理的非 NULL 默認值。

col , border , cex.names

論點已通過barplot();請注意,默認值曾經是col = heat.colors(n), border = par("fg")反而。
col也可以是長度的顏色向量 對於聚類著色,另請參閱do.col.sort

do.col.sort

邏輯指示顏色col是否應該對輪廓“along”進行排序;這對於按大小寫或按簇著色很有用。

do.n.k

邏輯指示是否應寫入 “title text”。

do.clus.stat

邏輯指示簇大小和平均值是否應直接寫入輪廓。

細節

對於每個觀察 i,輪廓寬度 定義如下:
將 a(i) = i 與 i 所屬簇的所有其他點之間的平均相異度(如果 i 是隻要觀察其簇, 無需進一步計算)。對全部其他集群 C,放置 = i 與 C 的所有觀測值的平均差異。其中最小的 ,可以看作是 i 和它的 “neighbor” 簇之間的差異,即它最接近的簇不是屬於。最後,

silhouette.default() 現在基於 Romain Francois 捐贈的 C 代碼(R 版本仍以 cluster:::silhouette.default.R 形式提供)。

具有較大 (接近 1)的觀測值聚類得很好,較小的 (大約 0)意味著觀測值位於兩個簇之間,而具有負值 的觀測值可能被放置在錯誤的簇中。

silhouette() 返回 silhouette 類的對象 sil ,該對象是具有屬性的 矩陣。對於每個觀測值 i,sil[i,] 包含 i 所屬的簇以及 i 的鄰居簇(不包含 i 的簇,其觀測值與 i 之間的平均差異最小),以及觀測值的輪廓寬度觀察的 colnames 對應的是 c("cluster", "neighbor", "sil_width")

summary(sil) 返回 summary.silhouette 類的對象,一個包含組件的列表

si.summary

各個輪廓寬度 的數值 summary

clus.avg.widths

輪廓寬度的聚類平均值的數字(等級 1)數組,其中使用 mean = FUN

avg.width

總平均值FUN(s),其中s 是各個輪廓寬度。

clus.sizes

table 簇大小。

call

如果可用,call 創建 sil

Ordered

邏輯上與 attr(sil, "Ordered") 相同,見下文。

sortSilhouette(sil)對行進行排序sil如輪廓圖中所示,按簇(逐漸)和減小輪廓寬度 .
attr(sil, "Ordered")是一個邏輯表明如果sil 排序者為sortSilhouette()。在這種情況下,rownames(sil)將包含案例標簽或編號,並且
attr(sil, "iOrd")排序索引向量。

注意

雖然 silhouette()partition 聚類所固有的,因此有一個(簡單的)方法來實現這些,但使用 cutree() 和距離作為輸入,可以直接從 silhouette.default() 的層次聚類中獲取輪廓。

默認情況下,對於 clara() 分區,輪廓僅適用於使用的最佳隨機子集。使用full = TRUE 計算(並稍後可能繪製)完整輪廓。

例子

data(ruspini)
pr4 <- pam(ruspini, 4)
str(si <- silhouette(pr4))
(ssi <- summary(si))
plot(si) # silhouette plot
plot(si, col = c("red", "green", "blue", "purple"))# with cluster-wise coloring

si2 <- silhouette(pr4$clustering, dist(ruspini, "canberra"))
summary(si2) # has small values: "canberra"'s fault
plot(si2, nmax= 80, cex.names=0.6)

op <- par(mfrow= c(3,2), oma= c(0,0, 3, 0),
          mgp= c(1.6,.8,0), mar= .1+c(4,2,2,2))
for(k in 2:6)
   plot(silhouette(pam(ruspini, k=k)), main = paste("k = ",k), do.n.k=FALSE)
mtext("PAM(Ruspini) as in Kaufman & Rousseeuw, p.101",
      outer = TRUE, font = par("font.main"), cex = par("cex.main")); frame()

## the same with cluster-wise colours:
c6 <- c("tomato", "forest green", "dark blue", "purple2", "goldenrod4", "gray20")
for(k in 2:6)
   plot(silhouette(pam(ruspini, k=k)), main = paste("k = ",k), do.n.k=FALSE,
        col = c6[1:k])
par(op)

## clara(): standard silhouette is just for the best random subset
data(xclara)
set.seed(7)
str(xc1k <- xclara[ sample(nrow(xclara), size = 1000) ,]) # rownames == indices
cl3 <- clara(xc1k, 3)
plot(silhouette(cl3))# only of the "best" subset of 46
## The full silhouette: internally needs large (36 MB) dist object:
sf <- silhouette(cl3, full = TRUE) ## this is the same as
s.full <- silhouette(cl3$clustering, daisy(xc1k))
stopifnot(all.equal(sf, s.full, check.attributes = FALSE, tolerance = 0))
## color dependent on original "3 groups of each 1000": % __FIXME ??__
plot(sf, col = 2+ as.integer(names(cl3$clustering) ) %/% 1000,
     main ="plot(silhouette(clara(.), full = TRUE))")

## Silhouette for a hierarchical clustering:
ar <- agnes(ruspini)
si3 <- silhouette(cutree(ar, k = 5), # k = 4 gave the same as pam() above
    	           daisy(ruspini))
stopifnot(is.data.frame(di3 <- as.data.frame(si3))) 
plot(si3, nmax = 80, cex.names = 0.5)
## 2 groups: Agnes() wasn't too good:
si4 <- silhouette(cutree(ar, k = 2), daisy(ruspini))
plot(si4, nmax = 80, cex.names = 0.5)

參考

Rousseeuw, P.J. (1987) Silhouettes: A graphical aid to the interpretation and validation of cluster analysis. J. Comput. Appl. Math., 20, 53-65.

chapter 2 of Kaufman and Rousseeuw (1990), see the references in plot.agnes.

也可以看看

partition.objectplot.partition

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Compute or Extract Silhouette Information from Clustering。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。