15 votos

Cómo ajustar el modelo de mezcla para agrupamiento

Tengo dos variables X e y y necesito hacer clúster máxima (óptima y) = 5. Vamos ideal parcela de variables es el siguiente:

enter image description here

Me gustaría hacer 5 grupos de este. Algo como esto:

enter image description here

Por lo tanto creo que este es el modelo de mezcla con 5 categorías. Cada uno de los clusters tienen el punto central y una confianza en círculo a su alrededor.

Los grupos no son siempre bonitos como este, se ven como el siguiente, donde en algún momento dos grupos están muy juntos o uno o dos grupos son completamente ausente.

enter image description here

enter image description here

Cómo puede caber modelo de mezcla y realizar la clasificación (clustering) en esta situación de manera eficaz?

Ejemplo:

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

13voto

Ashish Puntos 11

Aquí está el script para el uso de la mezcla de modelo de uso de la 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)

enter image description hereenter image description here

En una situación donde hay menos de 5 categorías:

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)

enter image description here

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

enter image description here

En este caso estamos encajando 3 grupos. Lo que si que caben 5 clusters ?

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

Se puede forzar a hacer 5 grupos.

enter image description here

También vamos a introducir algunos de ruido aleatorio:

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)

mclust permite el agrupamiento basado en el modelo con el ruido, es decir, alejadas de las observaciones que no pertenecen a ningún grupo. mclust permite especificar una distribución previa para regularizar el ajuste a los datos. Una función priorControl es proporcionado en mclust para especificar el prior y sus parámetros. Cuando se llama con sus valores por defecto, llama a otra función llamada defaultPrior que puede servir como una plantilla para especificar la alternativa de los priores. Para incluir el ruido en el modelado, una estimación inicial de el ruido de las observaciones debe ser suministrada a través del ruido de los componentes de la inicialización del argumento en Mclust o mclustBIC.

enter image description here

La otra alternativa sería el uso de mixtools paquete que le permite especificar la media y la sigma para cada uno de los componentes.

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)

enter image description here

3voto

jpmuc Puntos 4817

Un enfoque estándar es Gaussian mixture models, que es entrenada mediante el algoritmo EM. Pero ya que usted también notará que el número de grupos puede variar, también se puede considerar un test no paramétrico de modelo como el de Dirichlet GMM que también es implementado en scikit-learn.

En R, estos dos paquetes se parecen ofrecer lo que necesitas,

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X