Kümeleme için karışım modeli nasıl takılır


15

İki değişkenim var - X ve Y ve kümeyi maksimum (ve optimal) = 5 yapmalıyım. Değişkenlerin ideal grafiği aşağıdaki gibidir:

resim açıklamasını buraya girin

Bunun 5 kümesini yapmak istiyorum. Bunun gibi bir şey:

resim açıklamasını buraya girin

Bu yüzden bu 5 küme ile karışım modeli olduğunu düşünüyorum. Her kümenin merkez noktası ve çevresinde bir güven dairesi vardır.

Kümeler her zaman böyle değildir, iki kümenin birbirine yakın olduğu veya bir veya iki kümenin tamamen eksik olduğu aşağıdaki gibi görünürler.

resim açıklamasını buraya girin

resim açıklamasını buraya girin

Karışım modeline nasıl uyum sağlayabilir ve bu durumda sınıflandırma (kümeleme) nasıl etkili bir şekilde yapılabilir?

Misal:

set.seed(1234)
X <- c(rnorm(200, 10, 3), rnorm(200, 25,3),
        rnorm(200,35,3), rnorm(200,65, 3), rnorm(200,80,5))
Y <- c(rnorm(1000, 30, 2))
plot(X,Y, ylim = c(10, 60), pch = 19, col = "gray40")

Yanıtlar:


13

İşte mcluster kullanarak karışım modeli kullanmak için komut dosyası.

X <- c(rnorm(200, 10, 3), rnorm(200, 25,3), rnorm(200,35,3), rnorm(200,65, 3), rnorm(200,80,5))
Y <- c(rnorm(1000, 30, 2))
plot(X,Y, ylim = c(10, 60), pch = 19, col = "gray40")

require(mclust)
xyMclust <- Mclust(data.frame (X,Y))
plot(xyMclust)

resim açıklamasını buraya girin resim açıklamasını buraya girin

5'ten az kümenin olduğu bir durumda:

X1 <- c(rnorm(200, 10, 3), rnorm(200, 25,3), rnorm(200,35,3),  rnorm(200,80,5))
Y1 <- c(rnorm(800, 30, 2))
xyMclust <- Mclust(data.frame (X1,Y1))
plot(xyMclust)

resim açıklamasını buraya girin

 xyMclust4 <- Mclust(data.frame (X1,Y1), G=3)
plot(xyMclust4)

resim açıklamasını buraya girin

Bu durumda 3 küme takıyoruz. 5 küme takarsak ne olur?

xyMclust4 <- Mclust(data.frame (X1,Y1), G=5)
plot(xyMclust4)

5 küme yapmaya zorlayabilir.

resim açıklamasını buraya girin

Ayrıca rastgele bir ses getirelim:

X2 <- c(rnorm(200, 10, 3), rnorm(200, 25,3), rnorm(200,35,3),  rnorm(200,80,5), runif(50,1,100 ))
Y2 <- c(rnorm(850, 30, 2))
xyMclust1 <- Mclust(data.frame (X2,Y2))
plot(xyMclust1)

mclustgürültü ile model tabanlı kümelemeye , yani herhangi bir kümeye ait olmayan gözlemlere izin verir . mclustverilere uyumu düzenli hale getirmek için bir önceki dağılım belirtmeye izin verir. priorControlÖnceki ve parametrelerini belirtmek için mclust'ta bir işlev sağlanır. Varsayılanları ile çağrıldığında, defaultPrioralternatif öncelikleri belirtmek için şablon olarak işlev görebilen başka bir işlevi çağırır . Modellemeye gürültüyü dahil etmek için, Mclustveya içindeki başlatma argümanının gürültü bileşeni aracılığıyla gürültü gözlemlerinin ilk tahmininin sağlanması gerekir mclustBIC.

resim açıklamasını buraya girin

Diğer alternatif, her bileşen için ortalama ve sigma belirtmenize izin veren mixtools paketi kullanmak olacaktır .

X2 <- c(rnorm(200, 10, 3), rnorm(200, 25,3), rnorm(200,35,3),
    rnorm(200,80,5), rpois(50,30))
Y2 <- c(rnorm(800, 30, 2), rpois(50,30))
df <- cbind (X2, Y2)
require(mixtools)
out <- mvnormalmixEM(df, lambda = NULL, mu = NULL, sigma = NULL,
   k = 5,arbmean = TRUE, arbvar = TRUE, epsilon = 1e-08,  maxit = 10000, verb = FALSE)
plot(out, density = TRUE, alpha = c(0.01, 0.05, 0.10, 0.12, 0.15),  marginal = TRUE)

resim açıklamasını buraya girin


2
+1 Bu cevap çok kullanışlı, kullanışlı ve özlü ve arkasındaki matematiği bilmeden R'de böyle şeyler yapmanın neredeyse çok kolay olduğuna mükemmel bir örnek ...
Paul

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.