Кластеризация шумных данных или с выбросами

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 кластеров. Я попробовал К-средний кластерный анализ.

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-средства, ближайшие соседи), которые могут сделать больше справедливости для этого типа данных. Если так, как я могу это сделать?

rdorlearn
источник
1
Что не так с тем, что у вас есть? Почему то, что у вас ( анализ кластера k-средних ) неприемлемо?
Стив С
Ознакомьтесь с алгоритмами dbscan или оптики (см. En.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Clustering/… )
Джорджо Спедикато

Ответы:

7

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

Если ваш «шум» распределен равномерно, вы также можете добавить равномерное распределение к вашей модели смеси.

Если ваши данные намного менее чисты, рассмотрите возможность использования DBSCAN, MeanShift, OPTICS, HDBSCAN *, ... - кластеризация на основе плотности, кажется, подходит для этих данных. DBSCAN также очень устойчив к шуму («N» для шума).

ВЫЙТИ - Anony-Mousse
источник
4

Я рекомендую вам взглянуть на эту статью. Авторы предлагают надежный метод, при котором выбросы удаляются, а остальные данные группируются. Именно поэтому они назвали метод «тримминга». Был также пакет Rclust, но в соответствии с этим он был удален из CRAN. Во всяком случае, статья стоит прочитать.

Мирослав Сабо
источник