Ось сценарій використання моделі суміші за допомогою 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)
У ситуації, коли існує менше 5 кластерів:
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)
У цьому випадку ми вміщуємо 3 кластери. Що робити, якщо ми помістимо 5 кластерів?
xyMclust4 <- Mclust(data.frame (X1,Y1), G=5)
plot(xyMclust4)
Це може змусити зробити 5 кластерів.
Також введемо кілька випадкових шумів:
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
дозволяє кластеризацію на основі моделей із шумом, а саме зовнішні спостереження, які не належать до жодного кластеру. mclust
дозволяє задати попередній розподіл для регуляризації відповідності даним. У priorControl
mclust передбачена функція для визначення попереднього та його параметрів. Коли він викликається зі своїми за замовчуванням, він викликає іншу функцію, defaultPrior
яка називається, яка може слугувати шаблоном для визначення альтернативних пріорів. Щоб включити шум у моделювання, початкові здогадки про спостереження за шумом повинні бути надані через компонент шуму аргументу ініціалізації в Mclust
або mclustBIC
.
Іншою альтернативою було б використання mixtools
пакету, який дозволяє вказати середнє значення та сигму для кожного компонента.
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)