K-ortalamaları için küme seçimi: 1 küme durumu


9

Kimse kmeans kullanarak kümelenmenin uygun olup olmadığını belirlemek için iyi bir yöntem biliyor mu? Yani, numuneniz aslında homojen ise? Bir karışım modeli gibi bir şey biliyorum (R'de mclust aracılığıyla) 1: k küme durumu için uygun istatistikler sağlayacaktır, ancak kmeans değerlendirmek için tüm teknikler en az 2 küme gerektirir gibi görünüyor.

Herkes kmeans için 1 ve 2 küme vakaları karşılaştırmak için bir teknik biliyor mu?

Yanıtlar:


10

Boşluk istatistiği bunu yapmanın harika bir yoludur; Tibshirani, Hastie ve Walther (2001).

http://stat.ethz.ch/R-manual/R-devel/library/cluster/html/clusGap.html - İlgili R paketi.

Fikir, verilerinizi K = 1,2,3, ... için kümelemeye yönelik sıralı bir hipotez testi gerçekleştirmesidir. Özel gücü, K = 1'in, yani kümelerin bulunup bulunmadığının güvenilir bir göstergesidir.

İşte bir örnek, birkaç gün önce olduğu gibi bazı astronomi verilerini inceliyordum - yani geçiş yapan bir ötegezegen araştırmasından. (Dışbükey) kümeler için hangi kanıtların olduğunu bilmek istedim. Verilerim 'transit'

library(cluster)
cgap <- clusGap(transit, FUN=kmeans, K.max=kmax, B=100)
for(k in 1:(kmax-1)) {
    if(cgap$Tab[k,3]>cgap$Tab[(k+1),3]-cgap$Tab[(k+1),4]) {print(k)}; 
    break;
}

Boşluk istatistiği ile testin başarısız olduğu ilk K değerini arıyorsunuz, yani boşluk istatistiği önemli ölçüde azalır. Yukarıdaki döngü böyle bir ak yazdırır, ancak cgap'ı çizmek size aşağıdaki şekli verir: Boşlukta
resim açıklamasını buraya girin k = 1'den k = 2'ye nasıl önemli bir düşüş olduğunu görün, aslında hiçbir küme olmadığını gösterir (yani 1 küme).


tek bağlantı ile hiyerarşik kümeleme için aynısı nasıl yapılır? ClusGap'in EĞLENCE argümanını açıklayabilir misiniz? Hiyerarşik kmax = 20 cgap <- clusGap (cluster_feat_base [, 2: ncol (cluster_feat_base)], FUN = hclust, K.max = kmax, B = 100) için aşağıdaki satırı çalıştırdım. Ancak, FUNcluster'da Hata (X, kk, ...) hatası veriyor: geçersiz küme yöntemi 2
GeorgeOfTheRF

4

Daha yeni bir yöntem de deneyebilirsiniz: A. Kalogeratos ve A.Likas, Dip-anlamına gelir: kümelerin sayısını tahmin etmek için artımlı bir kümeleme yöntemi , NIPS 2012.

Fikir, bir nokta ile kümenin noktalarının geri kalanı arasındaki benzerliği / mesafeyi içeren vektörlerde kararsızlık için istatistiksel hipotez testi kullanmaktır. Test, Hartigan-Hartigan daldırma testi Ann. Devletçi. 13 (1): 70-84.

Yöntem, tüm veri kümesiyle tek bir küme olarak başlar ve tekdüze olmayan hipotez reddedildiği sürece (yani birden fazla küme varsa) bunu kademeli olarak böler.

Dolayısıyla bu yöntem, verilerde birden fazla küme olup olmadığını gösterir (sorunuz), ancak son kümelenmeyi de sağlayabilir.

Burada Matlab'da bazı kodlar bulabilirsiniz .


0

Aynı örneği düşündüğümü varsayalım,

kütüphane (küme) cgap <- clusGap (transit, EĞLENCE = kmeans, K.max = kmax, B = 100) için (1'de k: (kmax-1)) {if (cgap Sekmesi [(k + 1), 3] -cgap $ Sekmesi [(k + 1), 4]) {print (k)}; break; }Tab[k,3]>cgap

Maksimum boşluk istatistiklerine göre en iyi kümeleme çözümüne karşılık gelen kümelerin öğelerini nasıl alt gruplara ayırabilirim? Böylece her bir kümede daha fazla analiz için kullanabilirim.

Altküme adında bir komut olduğunu biliyorum. İstediğimiz küme sayısını verdiğimizde bu komutu kullanırken herhangi bir sorun yoktur. Ancak boşluk kullanılarak elde edilen optimal k'ye göre alt küme oluşturmak istediğimizde nasıl alt kümelenir (kısaca, bir döngü varsa kümelerin alt küme öğeleri)

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.