Як підібрати модель суміші для кластеризації


15

У мене є дві змінні - X і Y, і мені потрібно зробити кластер максимальним (і оптимальним) = 5. Давайте ідеальний сюжет змінних такий:

введіть тут опис зображення

Я хотів би зробити з цього 5 кластерів. Щось на зразок цього:

введіть тут опис зображення

Тому я думаю, що це суміш з 5 кластерами. Кожен кластер має центральну точку та коло впевненості навколо нього.

Кластери не завжди такі схожі, вони виглядають як наступні, де колись два кластери близько один від одного або один або два кластери зовсім відсутні.

введіть тут опис зображення

введіть тут опис зображення

Як можна підібрати модель суміші та виконати класифікацію (кластеризацію) у цій ситуації ефективно?

Приклад:

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

Відповіді:


13

Ось сценарій використання моделі суміші за допомогою 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дозволяє задати попередній розподіл для регуляризації відповідності даним. У priorControlmclust передбачена функція для визначення попереднього та його параметрів. Коли він викликається зі своїми за замовчуванням, він викликає іншу функцію, 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)

введіть тут опис зображення


2
+1 Ця відповідь є дуже корисною, корисною та простою, і прекрасним прикладом того, як в R майже неможливо зробити такі речі, навіть не знаючи математики, що стоїть за нею ...
Пол,

3

Одним із стандартних підходів є Гауссові моделі сумішей, які навчаються за допомогою алгоритму ЕМ. Але оскільки ви також помічаєте, що кількість кластерів може змінюватись, ви також можете розглянути непараметричну модель, наприклад, GMM Діріхле, яка також реалізована в scikit-learn.

У R ці два пакети, здається, пропонують те, що вам потрібно,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.