Clustering di dati rumorosi o con valori anomali


9

Ho un dato rumoroso di due variabili come questa.

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

Posso vedere visivamente che ci sono potenziali 10 cluster da vicino.

inserisci qui la descrizione dell'immagine

Tuttavia, tutti i dati hanno molti punti sparsi:

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

inserisci qui la descrizione dell'immagine

Vorrei creare 10 cluster. Ho provato l'analisi dei cluster K-significa.

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

inserisci qui la descrizione dell'immagine

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

inserisci qui la descrizione dell'immagine

Esiste comunque (k kernel significa, vicini più vicini) che può rendere più giustizia a questo tipo di dati. In tal caso, come posso farlo?


1
Cosa c'è che non va in quello che hai finora? Perché ciò che hai (l' analisi del cluster k-significa ) è inaccettabile?
Steve S

Dai un'occhiata agli algoritmi dbscan o di ottica (vedi en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Clustering/… )
Giorgio Spedicato,

Risposte:


7

Dato che i tuoi dati sembrano essere composti da miscele gaussiane, prova la modellazione gaussiana delle miscele (aka: clustering EM). Ciò dovrebbe produrre risultati di gran lunga superiori ai k-medie su questo tipo di dati.

Se il tuo "rumore" è distribuito uniformemente, puoi anche aggiungere una distribuzione uniforme al tuo modello di miscela.

Se i tuoi dati sono molto meno puliti, considera l'utilizzo di DBSCAN, MeanShift, OPTICS, HDBSCAN *, ... - clusterig basato sulla densità sembra appropriato per questi dati. DBSCAN è anche molto tollerante al rumore (la "N" sta per rumore).


4

Ti consiglio di leggere questo articolo. Gli autori propongono un metodo solido in cui vengono rimossi gli outlier e il resto dei dati è raggruppato. Ecco perché hanno chiamato il metodo "rifilatura". C'era anche un pacchetto R tclust ma secondo questo , è stato rimosso da CRAN. Ad ogni modo, vale la pena leggere l'articolo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.