Cara menyesuaikan model campuran untuk pengelompokan

15

Saya memiliki dua variabel - X dan Y dan saya perlu membuat kluster maksimum (dan optimal) = 5. Mari plot variabel yang ideal adalah seperti berikut:

masukkan deskripsi gambar di sini

Saya ingin membuat 5 kelompok ini. Sesuatu seperti ini:

masukkan deskripsi gambar di sini

Jadi saya pikir ini adalah model campuran dengan 5 kluster. Setiap kelompok memiliki titik pusat dan lingkaran kepercayaan di sekitarnya.

Cluster tidak selalu cantik seperti ini, mereka terlihat seperti berikut, di mana kadang-kadang dua cluster berdekatan atau satu atau dua cluster benar-benar hilang.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Bagaimana dapat menyesuaikan model campuran dan melakukan klasifikasi (pengelompokan) dalam situasi ini secara efektif?

Contoh:

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")
belajar
sumber

Jawaban:

13

Berikut ini skrip untuk menggunakan model campuran menggunakan mcluster.

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)

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Dalam situasi di mana ada kurang dari 5 klaster:

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)

masukkan deskripsi gambar di sini

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

masukkan deskripsi gambar di sini

Dalam hal ini kami memasang 3 kluster. Bagaimana jika kita muat 5 klaster?

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

Itu bisa memaksa untuk membuat 5 cluster.

masukkan deskripsi gambar di sini

Mari kita kenalkan beberapa noise acak:

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)

mclustmemungkinkan pengelompokan berbasis model dengan noise, yaitu pengamatan terluar yang bukan milik cluster mana pun. mclustmemungkinkan untuk menentukan distribusi sebelumnya untuk mengatur kecocokan dengan data. Sebuah fungsi priorControldisediakan dalam mclust untuk menentukan prior dan parameternya. Ketika dipanggil dengan default-nya, ia memanggil fungsi lain yang disebut defaultPrioryang dapat berfungsi sebagai templat untuk menentukan prior prior. Untuk memasukkan noise dalam pemodelan, tebakan awal pengamatan noise harus diberikan melalui komponen noise dari argumen inisialisasi dalam Mclustatau mclustBIC.

masukkan deskripsi gambar di sini

Alternatif lain adalah dengan menggunakan mixtools paket yang memungkinkan Anda menentukan mean dan sigma untuk setiap komponen.

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)

masukkan deskripsi gambar di sini

John
sumber
2
+1 Jawaban ini sangat berguna, dapat digunakan, dan ringkas, dan contoh sempurna tentang bagaimana hampir terlalu mudah untuk melakukan hal-hal seperti ini di R tanpa mengetahui matematika di baliknya ...
Paul
3

Salah satu pendekatan standar adalah Model Gaussian Mixture yang dilatih dengan menggunakan algoritma EM. Tetapi karena Anda juga memperhatikan bahwa jumlah cluster dapat bervariasi, Anda juga dapat mempertimbangkan model nonparametrik seperti GMM Dirichlet yang juga diterapkan dalam scikit-learning.

Dalam R, kedua paket ini tampaknya menawarkan apa yang Anda butuhkan,

jpmuc
sumber