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 |
適當類別的對象;對於 |
dist |
從類 |
dmatrix |
指定對稱相異矩陣 ( |
full |
|
subset |
|
object |
類 |
... |
傳入和傳出方法的進一步參數。 |
FUN |
用於總結輪廓寬度的函數。 |
nmax.lab |
整數,表示標簽的數量,對於單個名稱標記輪廓圖來說被認為太大。 |
max.strlen |
正整數,給出輪廓圖標簽中字符串被截斷的長度。 |
main , sub , xlab |
|
col , border , cex.names |
論點已通過 |
do.col.sort |
邏輯指示顏色 |
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
.
也可以看看
相關用法
- R sizeDiss 相似物體的樣本量
- R summary.clara “clara”對象的摘要方法
- R summary.agnes “agnes”對象的摘要方法
- R summary.mona “mona”對象的摘要方法
- R summary.pam PAM 對象的匯總方法
- R summary.diana “diana”對象的匯總方法
- R diana 分裂分析聚類
- R pluton 鈈同位素成分批次
- R votes.repub 總統選舉中共和黨候選人的投票
- R agnes 凝聚嵌套(層次聚類)
- R print.mona MONA 對象的打印方法
- R print.clara CLARA 對象的打印方法
- R mona 二元變量的單論分析聚類
- R plot.diana 分裂層次聚類圖
- R plot.mona 一元分裂層次聚類的旗幟
- R bannerplot 繪圖橫幅(層次聚類)
- R plot.partition 數據集分區圖
- R pltree 繪製層次聚類的聚類樹
- R plantTraits 植物物種性狀數據
- R plot.agnes 凝聚層次聚類圖
- R print.agnes AGNES 對象的打印方法
- R chorSub Kola 數據 C 範圍的子集
- R pam 圍繞 Medoid 進行分區
- R volume.ellipsoid 計算(橢球體的)體積
- R clusplot (分區對象的)雙變量聚類圖
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Compute or Extract Silhouette Information from Clustering。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。