Anpassen des Mischungsmodells für das Clustering


15

Ich habe zwei Variablen - X und Y und ich muss den Cluster maximal (und optimal) = 5 machen. Der ideale Plot von Variablen sieht folgendermaßen aus:

Bildbeschreibung hier eingeben

Ich würde gerne 5 Cluster daraus machen. Etwas wie das:

Bildbeschreibung hier eingeben

Daher denke ich, dass dies ein Mischungsmodell mit 5 Clustern ist. Jeder Cluster hat einen Mittelpunkt und einen Vertrauenskreis.

Die Cluster sind nicht immer so hübsch, sie sehen wie folgt aus, wobei manchmal zwei Cluster nahe beieinander liegen oder ein oder zwei Cluster vollständig fehlen.

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Wie kann ein Mischungsmodell angepasst und eine Klassifizierung (Clustering) in dieser Situation effektiv durchgeführt werden?

Beispiel:

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

Antworten:


13

Hier ist ein Skript für die Verwendung eines Mischungsmodells mit 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)

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

In einer Situation, in der weniger als 5 Cluster vorhanden sind:

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)

Bildbeschreibung hier eingeben

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

Bildbeschreibung hier eingeben

In diesem Fall passen wir 3 Cluster an. Was ist, wenn wir 5 Cluster passen?

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

Es kann erzwingen, 5 Cluster zu bilden.

Bildbeschreibung hier eingeben

Lassen Sie uns auch ein zufälliges Rauschen einführen:

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)

mclustErmöglicht modellbasiertes Clustering mit Rauschen, dh Nebenbeobachtungen, die zu keinem Cluster gehören. mclustErmöglicht die Angabe einer vorherigen Verteilung, um die Anpassung an die Daten zu regulieren. In priorControlmclust wird eine Funktion zur Angabe des Prior und seiner Parameter bereitgestellt. Wenn es mit seinen Standardeinstellungen aufgerufen wird, ruft es eine andere aufgerufene Funktion auf, defaultPriordie als Vorlage für die Angabe alternativer Prioritäten dienen kann. Um Rauschen in die Modellierung einzubeziehen, muss eine erste Schätzung der Rauschbeobachtungen über die Rauschkomponente des Initialisierungsarguments in Mclustoder erfolgen mclustBIC.

Bildbeschreibung hier eingeben

Die andere Alternative wäre die Verwendung eines mixtools Pakets , mit dem Sie Mittelwert und Sigma für jede Komponente angeben können.

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)

Bildbeschreibung hier eingeben


2
+1 Diese Antwort ist sehr nützlich, brauchbar und prägnant und ein perfektes Beispiel dafür, wie es fast zu einfach ist, solche Dinge in R zu tun, ohne die Mathematik dahinter zu kennen ...
Paul

3

Ein Standardansatz sind Gaußsche Mischungsmodelle, die mit Hilfe des EM-Algorithmus trainiert werden. Da Sie jedoch auch feststellen, dass die Anzahl der Cluster variieren kann, können Sie auch ein nichtparametrisches Modell wie das Dirichlet-GMM in Betracht ziehen, das ebenfalls in scikit-learn implementiert ist .

In R scheinen diese beiden Pakete das zu bieten, was Sie brauchen,

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.