Oto skrypt do używania modelu mieszanki przy użyciu 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)
W sytuacji, gdy jest mniej niż 5 klastrów:
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)
xyMclust4 <- Mclust(data.frame (X1,Y1), G=3)
plot(xyMclust4)
W tym przypadku instalujemy 3 klastry. Co jeśli zmieścimy 5 klastrów?
xyMclust4 <- Mclust(data.frame (X1,Y1), G=5)
plot(xyMclust4)
Może zmusić do utworzenia 5 klastrów.
Wprowadzimy też trochę losowego hałasu:
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
umożliwia oparte na modelach grupowanie z hałasem, a mianowicie obserwacje zewnętrzne, które nie należą do żadnego skupienia. mclust
pozwala określić wcześniejszą dystrybucję w celu uregulowania dopasowania do danych. W priorControl
mclust dostępna jest funkcja służąca do określania wcześniejszego i jego parametrów. Po wywołaniu z ustawieniami domyślnymi wywołuje inną wywoływaną funkcję, defaultPrior
która może służyć jako szablon do określania alternatywnych priorytetów. Aby uwzględnić szum w modelowaniu, należy podać wstępne przypuszczenie obserwacji hałasu za pośrednictwem komponentu hałasu argumentu inicjalizacji wMclust
lub mclustBIC
.
Inną alternatywą byłoby użycie mixtools
pakietu, który pozwala określić średnią i sigma dla każdego elementu.
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)
Jednym standardowym podejściem są modele mieszanki Gaussa, które są trenowane za pomocą algorytmu EM. Ale ponieważ zauważasz również, że liczba klastrów może się różnić, możesz również rozważyć model nieparametryczny, taki jak Dirichlet GMM, który jest również implementowany w scikit-learn.
W wersji R te dwa pakiety wydają się oferować to, czego potrzebujesz,
źródło