2016-08-03 24 views
12

birkaç kümeleme algoritmaları denedikten sonra ben family = kccaFamily("angle") ile flexclust::kcca kullanarak veri kümesi en iyi performansı var.Flexclust'tan kümeleme performans istatistikleri nasıl oluşturulur?

İşte flexclust den Nclus veri kümesini kullanarak bir örnek.

library(fpc) 
library(flexclust) 
data(Nclus) 

k <- 4 
family <- flexclust::kccaFamily("angle") 
model <- flexclust::kcca(Nclus, k, family) 

Şimdi, kümelerin sayısını optimize etmek istiyorum. Küme modelleri için en kapsamlı performans metrikleri seti fpc::cluster.stats kullanılarak bulunur. Bu fonksiyonun iki girişe ihtiyacı vardır: bir uzaklık matrisi ve atanan kümeler.

ikinci kolaydır; Bu sadece [email protected].

Ben mesafe matris için temin etmek ne mücadele ediyorum. kcca bir uzaklık nesnesini döndürmez (ya da varsa, onu bulamadım). genellikle ben dist(Nclus) kullanacağı konusunda

sanırım. Bu durumda, Öklid mesafesini (veya diğer yöntemlerden herhangi birini kullanılabilir dist) – Kümeleme algoritması tarafından kullanılan mesafe ölçüsünü istemiyorum. Bu fonksiyondan kodu kullanarak kcca tarafından kullanılan mesafe matrisini yeniden oluşturabilirim.

control <- as(list(), "flexclustControl") 
centers <- flexclust:::initCenters(Nclus, k, family, control) 
distmat <- distAngle(Nclus, centers$centers) 

Sonra ben sadece

fpc::cluster.stats(distmat, [email protected]) 

sorun bu beni mesafe argümanı hakkında iki uyarı veriyor kullanılarak küme modeli istatistikleri hesaplamak gerekir.

Warning messages: 
1: In as.dist.default(d) : non-square matrix 
2: In as.matrix.dist(d) : 
    number of items to replace is not a multiple of replacement length 

Bu bana yanlış bir şey verdiğinden şüpheleniyor.

nasıl cluster.stats uzaklık matrisi geçmelidir ?

+0

Bu arada, 'fpc :: cluster.stats' çok fazla bellek gerektirir, bu nedenle orta ölçekli veri kümeleri için pratik değildir. Sonunda 'cluster :: silhouette' ile gittim. –

cevap

3

Ben bu modelleme açısından mantıklı emin değilim, sen Ancak

distmat <- distAngle(Nclus, Nclus) 

kullanmalıdır tahmin: size daha uygundur metrik kullanacağı kümeleme çıkışının performansını incelemek için sizin özel kullanım durumu; I "gözlem ve ağırlık/standart ortalama arasındaki açı" minimize küme içi açı minimize aynı olmadığını tahmin ediyorum, özellikle

distmat <- dist(Nclus, "manhattan") 

Bu (veya olmayabilir) L1 uzaklık olabilir gözlemler arasında; Ayrıca ikinci niceliğin modelleme amaçları için özellikle yararlı olmadığını tahmin ediyorum. Başka bir deyişle, distAngle'i k kümelerini tanımlamak için alternatif bir yol olarak ("hile") kabul ederdim, ancak daha sonra tanımlanmış kümeleri diğer metriklerle değerlendirirdim. Umarım bu sizin için herhangi bir anlam ifade eder ...

+2

renato'ya katılıyorum. Sorun şu ki, cluster.stats(), simetrik bir çift yönlü uzaklık matrisini, her bir öğeye kıyasla (diğer bir deyişle, "as.matrix (dist (Nclus))') ile karşılaştırır. Ancak, distAngle (Nclus, cent merkezleri) ifadesi, veri noktalarını küme merkezleriyle karşılaştırır, böylece simetrik olmayan bir uzaklık matrisi elde edersiniz. Bu nedenle, ya renato tarafından önerilen L1 mesafesi gibi farklı bir mesafe ölçüsü kullanmanız ya da küme atamalarını değerlendirmek için farklı bir yaklaşım bulmanız gerekecektir. –

+0

@KeithHughitt açıklamanız aslında benimkinden çok daha net. –