K-ortalamaları için boşluk istatistiği, açıkça iki tane olmasına rağmen neden bir küme öneriyor?


19

Verilerimi kümelemek için K-araçlarını kullanıyorum ve "en uygun" küme numarasını önermek için bir yol arıyordum. Boşluk istatistikleri, iyi bir küme numarası bulmanın yaygın bir yolu gibi görünmektedir.

Herhangi bir nedenle 1'i optimum küme numarası olarak döndürür, ancak verilere baktığımda 2 küme olduğu açıktır:

! [1] (http://i60.tinypic.com/28bdy6u.jpg)

Ben R boşluğu şöyle çağırır:

gap <- clusGap(data, FUN=kmeans, K.max=10, B=500)
with(gap, maxSE(Tab[,"gap"], Tab[,"SE.sim"], method="firstSEmax"))

Sonuç kümesi:

> Number of clusters (method 'firstSEmax', SE.factor=1): 1
          logW   E.logW           gap    SE.sim
[1,]  5.185578 5.085414 -0.1001632148 0.1102734
[2,]  4.438812 4.342562 -0.0962498606 0.1141643
[3,]  3.924028 3.884438 -0.0395891064 0.1231152
[4,]  3.564816 3.563931 -0.0008853886 0.1387907
[5,]  3.356504 3.327964 -0.0285393917 0.1486991
[6,]  3.245393 3.119016 -0.1263766015 0.1544081
[7,]  3.015978 2.914607 -0.1013708665 0.1815997
[8,]  2.812211 2.734495 -0.0777154881 0.1741944
[9,]  2.672545 2.561590 -0.1109558011 0.1775476
[10,] 2.656857 2.403220 -0.2536369287 0.1945162

Yanlış bir şey mi yapıyorum yoksa iyi bir küme numarası almanın daha iyi bir yolunu biliyor mu?

Yanıtlar:


37

Kümeleme , diğer şeylerin yanı sıra ölçeğe de bağlıdır . Bu konunun tartışılması için ( diğer şeylerin yanı sıra ) Verileri ne zaman ortalamalı ve standartlaştırmalısınız? ve PCA kovaryans veya korelasyon? .

İki değişkenin ölçeklerinin ne kadar farklı olduğunu gösteren 1: 1 en boy oranıyla çizilen verileriniz:

Şekil 1

Sağında, boşluk istatistiklerinin grafiği, dikey bölümlerle çizilen standart hatalara ve dikey kesikli mavi çizgiyle işaretlenmiş optimal değerine sahip kümeler ( ) sayısına göre istatistikleri gösterir . Yardıma göre ,kkclusGap

Varsayılan "firstSEmax" yöntemi , değerinin ilk yerel maksimum değerden 1 standart hatadan fazla olmayacağı şekilde en küçük değerini arar .kf(k)

Diğer yöntemler de benzer şekilde davranır. Bu kriter, boşluk istatistiklerinin hiçbirinin göze çarpmasına neden olmaz ve bu da tahmini ile sonuçlanır .k=1

Ölçek seçimi uygulamaya bağlıdır, ancak makul bir varsayılan başlangıç ​​noktası, MAD veya standart sapma gibi verilerin dağılımının bir ölçüsüdür. Bu grafik, her bir bileşen ve için bir birim standart sapma yapmak üzere sıfıra yeniden girdikten ve yeniden ölçeklendirdikten sonra analizi tekrarlar :ab

şekil 2

k=2k{1,2,3,4,5}k=2kk=1kk=2. Burada sadece genel yöntemi göstermek için gösterilmiştir.


İşte Rbu rakamları üretmek için kod. Veriler yaklaşık olarak soruda gösterilenlerle eşleşir.

library(cluster)
xy <- matrix(c(29,391, 31,402, 31,380, 32.5,391, 32.5,360, 33,382, 33,371,
        34,405, 34,400, 34.5,404, 36,343, 36,320, 36,303, 37,344,
        38,358, 38,356, 38,351, 39,318, 40,322, 40, 341), ncol=2, byrow=TRUE)
colnames(xy) <- c("a", "b")
title <- "Raw data"
par(mfrow=c(1,2))
for (i in 1:2) {
  #
  # Estimate optimal cluster count and perform K-means with it.
  #
  gap <- clusGap(xy, kmeans, K.max=10, B=500)
  k <- maxSE(gap$Tab[, "gap"], gap$Tab[, "SE.sim"], method="Tibs2001SEmax")
  fit <- kmeans(xy, k)
  #
  # Plot the results.
  #
  pch <- ifelse(fit$cluster==1,24,16); col <- ifelse(fit$cluster==1,"Red", "Black")
  plot(xy, asp=1, main=title, pch=pch, col=col)
  plot(gap, main=paste("Gap stats,", title))
  abline(v=k, lty=3, lwd=2, col="Blue")
  #
  # Prepare for the next step.
  #
  xy <- apply(xy, 2, scale)
  title <- "Standardized data"
}

tamam açıklama için teşekkürler. BTW: Boşluk istatistikleri gibi başka bir küme metriği biliyor musunuz? Biraz buldum, ama hangisinin genellikle k-araçlarıyla kullanıldığını bilmiyorum?
MikeHuber

+1. Çok güzel bir gösteri ve aynı verileri elde etmek için OP'nin rakamını dijitalleştirmiş olduğunuz için etkileyici.
amip diyor Reinstate Monica

3
@amoeba Dağılım grafiğine göz attım ve tam olarak burada gördüğünüz gibi koordinatları yazdım (yani, rakamlar kendi parmaklarımdı :-)). Bazen en basit yaklaşım etkilidir.
whuber

Boşluk istatistiği, tek bir 1-b'lik sayısal değerler dizisindeki kümelerin sayısını bulmak için kullanılabilir mi?
user1971988

xyxy <- xy[, 1, drop=FALSE]n×1R(xi)(xi,0)

9

xyK=1K>1sıfır hipotezinin reddedilmemesi bunu doğrulamaz . Teknik ayrıntıları daha fazla kontrol etmek istiyorsanız , GAP istatistiğini açıklayan metodolojik makale çevrimiçi olarak mevcuttur .

k2×2k

kK=2


+1 Olası problemi dikkatlice okuyarak gördünüz: aferin! Hastie'nin makalesine bağlantı, cevabınıza da hoş geldiniz desteği.
whuber

@whuber: Ölçekler hakkında bu tartışmayı yaptık, değil mi? :)
usεr11852 diyor Reinstate Monic

Çok farklı bir bağlamdı , bağlantıyı kurmadım.
whuber

Gerçekten farklı bir bağlamdı; Sadece orada "ölçekler" ve burada "ölçekler" olduğu için size bahsetmiştim.
usεr11852 diyor Reinstate Monic

0

Orijinal posterle aynı problemi yaşadım. R belgeleri şu anda orijinal ve varsayılan d.power = 1 ayarının yanlış olduğunu ve d.power ile değiştirilmesi gerektiğini söylüyor: "d.power = 1 varsayılan değeri" geçmiş "R uygulamasına karşılık gelirken, d.power = 2, Tibshirani ve arkadaşlarının önerdiklerine karşılık geliyor. Bu, Juan Gonzalez tarafından 2016-02'de bulundu. "

Sonuç olarak, d.power = 2 değerini değiştirmek benim için sorunu çözdü.

https://www.rdocumentation.org/packages/cluster/versions/2.0.6/topics/clusGap

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.