Кластеризація галасливих даних або з аутлайнерами


9

У мене є шумні дані двох змінних на кшталт цієї.

x1 <- rep(seq(0,1, 0.1), each = 3000)
set.seed(123)
y1 <- rep (c(0.2, 0.8, 0.3, 0.9, 0.65, 0.35,0.7,0.1,0.25, 0.3, 0.95), each = 3000)
set.seed(1234)
e1 = rnorm(length(x1), 0.07,0.07)
set.seed(1223)
e2 = rnorm(length(x1), 0.07,0.07)
set.seed(1334)
yn <- rnorm(20000, 0.5,0.9)
set.seed(2344)
xn <- rnorm(20000, 0.5,0.9)
y <- c(y1 + e1,yn) 
x <- c(x1 + e2, xn) 
plot(x,y,  xlim=c(0,1.2), ylim = c(0,1.2), pch = ".", col = "gray40") 

Я візуально бачу, що є потенційні 10 кластерів при ближчому розгляді.

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

Однак у всіх даних багато пунктів:

plot(x,y,   pch = ".", col = "gray40") 

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

Я хотів би зробити 10 кластерів. Я спробував кластерний аналіз K-означає.

xm1 <- cbind(x,y)
cl1 <- kmeans(xm1, 10)
colrs <- c("red", "green", "blue1", "pink", "green4","tan", 
 "gray40", "yellow", "black", "purple") 
plot(xm1, col = colrs[cl1$cluster], pch = ".", xlim=c(0,1.2), ylim = c(0,1.2))

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

plot(xm1, col = colrs[cl1$cluster], pch = ".")

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

Чи є в будь-якому випадку (можливо, k-засоби ядра, найближчі сусіди), що може зробити більше справедливим щодо цього типу даних. Якщо так, як я можу це зробити?


1
Що не так у тому, що у вас є? Чому те, що у вас є ( аналіз кластеру k-означає ) неприйнятне?
Steve S

Погляньте на алгоритми dbscan або оптики (див. En.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Clustering/… )
Giorgio Spedicato

Відповіді:


7

Оскільки, схоже, ваші дані складаються з гауссових сумішей, спробуйте моделювання гауссових сумішей (також: кластеризація EM). Це повинно дати результати, що значно перевершують k-засоби для цього типу даних.

Якщо ваш "шум" розподілений рівномірно, ви також можете додати рівномірний розподіл до вашої моделі суміші.

Якщо ваші дані набагато менш чисті, подумайте про використання DBSCAN, MeanShift, OPTICS, HDBSCAN *, ... - кластер на основі щільності, здається, підходить для цих даних. DBSCAN також дуже толерантний до шуму ("N" - це шум).


4

Я рекомендую вам переглянути цю статтю. Автори пропонують надійний метод, коли залишки видаляються, а решта даних кластеризується. Саме тому вони назвали метод «обрізка». Був також пакет пакет tclust, але відповідно до цього він був видалений з CRAN. У будь-якому випадку статтю варто прочитати.

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