Regroupement d'une donnée bruyante ou avec des valeurs aberrantes

9

J'ai des données bruyantes de deux variables comme celle-ci.

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

Je peux voir visuellement qu'il existe 10 clusters potentiels de plus près.

entrez la description de l'image ici

Cependant, l'ensemble des données a de nombreux points répartis:

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

entrez la description de l'image ici

Je voudrais faire 10 clusters. J'ai essayé l'analyse de cluster K-means.

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

entrez la description de l'image ici

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

entrez la description de l'image ici

Existe-t-il de toute façon (peut-être des k-means du noyau, des voisins les plus proches) qui peuvent rendre plus justice à ce type de données. Si oui, comment puis-je faire cela?

rdorlearn
la source
1
Quel est le problème avec ce que vous avez jusqu'à présent? Pourquoi ce que vous avez (l' analyse du cluster k-means ) est-il inacceptable?
Steve S
Jetez un œil aux algorithmes dbscan ou optiques (voir en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Clustering/… )
Giorgio Spedicato

Réponses:

7

Comme vos données semblent être composées de mélanges gaussiens, essayez la modélisation des mélanges gaussiens (alias: clustering EM). Cela devrait donner des résultats bien supérieurs aux k-moyennes sur ce type de données.

Si votre «bruit» est distribué uniformément, vous pouvez également ajouter une distribution uniforme à votre modèle de mélange.

Si vos données sont beaucoup moins nettes, envisagez d'utiliser DBSCAN, MeanShift, OPTICS, HDBSCAN *, ... - le clusterig basé sur la densité semble être approprié pour ces données. DBSCAN est également très tolérant au bruit (le "N" est pour le bruit).

A QUIT - Anony-Mousse
la source
4

Je vous recommande de consulter cet article. Les auteurs proposent une méthode robuste où les valeurs aberrantes sont supprimées et le reste des données est regroupé. C'est pourquoi ils ont appelé la méthode "rognage". Il y avait aussi un package R tclust mais selon cela , il a été supprimé du CRAN. Quoi qu'il en soit, l'article mérite d'être lu.

Miroslav Sabo
la source