2011-12-26 21 views
13

değeri dönüş ve geri nesne özelliklere tot.withinss totss ve arasındaki fark ne meraklı. Belgelerden aynı şeyi geri döndürüyor gibi görünüyorlar, ancak veri kümemde uygulanmış totss değeri 66213.63 ve tot.withinss 6893.50'dir. Lütfen mroe detaylarını biliyorsanız lütfen bize bildirin. Teşekkür ederiz!kmeans I kmeans(), R işlevi kullanıyorum R

Marius.

cevap

19

Verilen kareler betweenss toplamı ve her bir kümenin withinss için karelerinin toplamının içinde vektörü arasındaki formüller şunlardır: tek bir küme olsaydı

totss = tot.withinss + betweenss 
tot.withinss = sum(withinss) 

Örneğin, daha sonra betweenss0 olur, withinss ve totss = tot.withinss = withinss'da yalnızca bir bileşen olacaktır. Daha fazla açıklama için, bu çeşitli miktarları küme ödevleri verdiğimiz zaman hesaplayabiliriz ve bu, anlamlarını açıklığa kavuşturmaya yardımcı olabilir. x numaralı veriyi ve cl$cluster küme atamalarını help(kmeans) numaralı örnekteki örnekten düşünün.

# or ss <- function(x) sum(apply(x, 2, function(x) x - mean(x))^2) 
ss <- function(x) sum(scale(x, scale = FALSE)^2) 

Sonra aşağıdaki vardır: Bu daha sonra geri kalan matrisin her bir elemanı karelerinin toplamı bu sütundan x her sütunun ortalama çıkarır ve - aşağıda kareler fonksiyonunun toplamı tanımlar. cl$centers[cl$cluster, ]'un takılı değerler olduğunu unutmayın, yani, her bir nokta için bir satırlı bir matris, buradaki satır, ith noktasının ait olduğu kümenin merkezidir.

example(kmeans) # create x and cl 

betweenss <- ss(cl$centers[cl$cluster,]) # or ss(fitted(cl)) 

withinss <- sapply(split(as.data.frame(x), cl$cluster), ss) 
tot.withinss <- sum(withinss) # or resid <- x - fitted(cl); ss(resid) 

totss <- ss(x) # or tot.withinss + betweenss 

cat("totss:", totss, "tot.withinss:", tot.withinss, 
    "betweenss:", betweenss, "\n") 

# compare above to: 

str(cl) 

DÜZENLEME Bu soruya cevap yana

R eklemiştir ek benzer kmeans örnekleri (example(kmeans)) ve yeni bir fitted.kmeans yöntemi ve artık monte yöntem açıklamalarda, yukarıda arka nasıl uyduğunu gösteren kod satırları.

+0

Ahum. Böylece * tot.withinss *, küme varyasyonu içindeki toplam olmalı ve * totss *, toplam veri varyasyonu olmalıdır. Küme merkezlerinin toplamı + küme merkezlerinin toplamı. Sağ? – Marius

+0

Daha fazla açıklama ekledim. –

+0

Yani, eğer toplam kümelenme varyasyonunu bulmak istiyorsa, o zaman * tot.whitinss * budur. Teşekkür ederim. – Marius

0

sana diyor belgelerinde bir hata ... lekeli düşünüyorum:

withinss  The within-cluster sum of squares for each cluster. 
totss  The total within-cluster sum of squares. 
tot.withinss  Total within-cluster sum of squares, i.e., sum(withinss). 

Eğer yardım sayfası örnekte örnek veri kümesi kullanıyorsanız:

> kmeans(x,2)$tot.withinss 
[1] 15.49669 
> kmeans(x,2)$totss 
[1] 65.92628 
> kmeans(x,2)$withinss 
[1] 7.450607 8.046079 

Birisi gerektiğini düşünüyorum yardım sayfasının revize edilmesini isteyerek r-devel posta listesine bir talep yazınız. Eğer istemiyorsan, yapmaya hazırım.

+0

Hızlı reaksiyon için teşekkürler. Ben de aynı şeyi düşünüyordum .. doktorda bir hata var .. maalesef gördüğüm gibi tek değil. Onlara bir istek istiyorsanız yazabilirsiniz. Temel nokta, aynı zamanda bir genetik k-aracı algoritması kullanıyorum ve sonuçları karşılaştırmak istedim. Şimdi dikkate almak için hangisinin olması gerektiğini bilmiyorum .. – Marius

+0

Hangisi ile yapmak için? (Çok fazla zamir ve sıfat var, karışıklık ifadenizde ya da karşı koymamda yeterli isim yok.) –

+0

:/Eğer programlama dili sözdizimi söz konusu değilse, dilbilgisi seçiyorsunuz? Genetik k-aracı algoritmasının sonuçlarını, R'de bulunan kmeans fonksiyonunun sonuçlarıyla karşılaştırmak istedim. Ana nokta, iç kümelenme varyasyonunu en aza indirmektir. R içindeki döndürülmüş kmeans nesnesi, dokümanda aynı tanımlanmış 2 özelliğe sahiptir.Karşılaştırılacak tek bir sonuç var. – Marius