2017-12-15 5 views
0

Ich versuche eine numerische Variable mit Kmeans zu diskretisieren. Es funktionierte ziemlich gut, aber ich frage mich, wie ich die Intervalle in meinem Cluster finden kann.Wie kann ich numerische Intervalle von k-Means-Clustern finden?

Ich arbeite mit FactoMineR, um meine Kmeans zu tun. Ich fand 3 Cluster nach der folgenden Grafik: enter image description here

Mein Punkt ist nun die Intervalle meiner numerischen Variablen innerhalb der Cluster zu identifizieren.

Gibt es eine Option oder Methode in FactoMineR oder ein anderes Paket, um es zu tun? Ich kann es manuell tun, aber da ich es für eine bestimmte Anzahl von Variablen tun muss, würde ich gerne einen einfachen Weg finden, sie zu identifizieren.

+2

Bitte lesen Sie die Informationen über [wie eine gute Frage] (http://stackoverflow.com/help/how-to-ask) und wie ein [reproduzierbares Beispiel] zu erhalten (http: // stackoverflow.com/questions/5963269). Dies wird es anderen sehr erleichtern, Ihnen zu helfen. – Axeman

Antwort

0

Da Sie keine Daten angegeben haben, habe ich das Beispiel aus der kmeans Dokumentation verwendet, die zwei Gruppen für Daten mit zwei Spalten x und y erzeugt. Sie können split die ursprünglichen Daten von dem Cluster, zu dem jede Zeile gehört, und dann Daten aus jeder Gruppe extrahieren. Ich bin nicht sicher, ob meine Beispieldaten Ihren Daten ähneln, aber im unteren Code habe ich einfach den Unterschied zwischen min Wert der Spalte x und max Wert der Spalte y als Grenzen eines möglichen Intervalls verwendet (je nach Anwendungsfall ist dies sinnvoll) oder nicht). Hilft dir das?

data <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2), 
      matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2)) 
colnames(data) <- c("x", "y") 

cl <- kmeans(data, 2) 

data <- as.data.frame(cbind(data, cluster = cl$cluster)) 

lapply(split(data, data$cluster), function(x) { 
    min_x <- min(x$x) 
    max_y <- max(x$y) 
    diff <- max_y-min_x 
    c(min_x = min_x , max_y = max_y, diff = diff) 
}) 

# $`1` 
# min_x  max_y  diff 
# -0.6906124 0.5123950 1.2030074 
# 
# $`2` 
# min_x  max_y  diff 
# 0.2052112 1.6941800 1.4889688 
+0

Oh danke! Es scheint genau das zu sein, wonach ich gesucht habe. Ich dachte an etwas Ähnliches, aber ich benutzte nicht den 'Split'. –

+0

Als zusätzlichen Hinweis können Sie 'str (cl)' ('cl' vom obigen Codebeispiel) verwenden, um den Inhalt Ihrer' kmeans' Ausgabe zu überprüfen. Vielleicht gibt es mehr, die Sie für Ihre Analyse verwenden können. –

Verwandte Themen