Clustering von verrauschten Daten oder mit Ausreißern

9

Ich habe verrauschte Daten von zwei Variablen wie diesen.

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

Ich kann visuell sehen, dass es bei näherer Betrachtung potenzielle 10 Cluster gibt.

Geben Sie hier die Bildbeschreibung ein

Die gesamten Daten haben jedoch viele Punkte verteilt:

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

Geben Sie hier die Bildbeschreibung ein

Ich möchte 10 Cluster machen. Ich habe versucht, K-Mittel-Cluster-Analyse.

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

Geben Sie hier die Bildbeschreibung ein

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

Geben Sie hier die Bildbeschreibung ein

Gibt es sowieso (kann Kernel k-means, nächste Nachbarn sein), die dieser Art von Daten mehr gerecht werden können. Wenn ja, wie kann ich das machen?

rdorlearn
quelle
1
Was ist los mit dem, was du bisher hast? Warum ist das, was Sie haben (die k-means Cluster-Analyse ), nicht akzeptabel?
Steve S
Werfen Sie einen Blick auf DBSCAN- oder Optik-Algorithmen (siehe en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Clustering/… )
Giorgio Spedicato

Antworten:

6

Versuchen Sie es mit Gaußscher Mischungsmodellierung (auch bekannt als: EM-Clustering), da Ihre Daten aus Gaußschen Gemischen zu bestehen scheinen . Dies sollte zu Ergebnissen führen, die den k-Mitteln für diesen Datentyp weit überlegen sind.

Wenn Ihr "Rauschen" gleichmäßig verteilt ist, können Sie Ihrem Mischungsmodell auch eine gleichmäßige Verteilung hinzufügen.

Wenn Ihre Daten viel weniger sauber sind, sollten Sie DBSCAN, MeanShift, OPTICS, HDBSCAN *, ... verwenden. - Dichte-basiertes Clusterig scheint für diese Daten geeignet zu sein. DBSCAN ist auch sehr tolerant gegenüber Rauschen (das "N" steht für Rauschen).

Hat aufgehört - Anony-Mousse
quelle
3

Ich empfehle Ihnen, diesen Artikel zu lesen. Die Autoren schlagen eine robuste Methode vor, bei der die Ausreißer entfernt und der Rest der Daten geclustert wird. Deshalb nannten sie die Methode "Trimmen". Es gab auch ein R - Paket tclust aber nach diesem , aus CRAN wurde entfernt. Auf jeden Fall ist der Artikel lesenswert.

Miroslav Sabo
quelle