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.
Cependant, l'ensemble des données a de nombreux points répartis:
plot(x,y, pch = ".", col = "gray40")
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))
plot(xm1, col = colrs[cl1$cluster], pch = ".")
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?
r
machine-learning
clustering
rdorlearn
la source
la source
Réponses:
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).
la source
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.
la source