RandomForest - MDS-Plotinterpretation

14

Ich habe randomForest verwendet, um 6 Verhaltensweisen von Tieren (z. B. Stehen, Gehen, Schwimmen usw.) anhand von 8 Variablen (unterschiedliche Körperhaltungen und Bewegungen) zu klassifizieren.

Der MDSplot im randomForest-Paket gibt diese Ausgabe aus und es treten Probleme bei der Interpretation des Ergebnisses auf. Ich habe eine PCA mit den gleichen Daten durchgeführt und eine gute Trennung zwischen allen Klassen in PC1 und PC2 erhalten, aber hier scheinen Dim1 und Dim2 nur drei Verhalten zu unterscheiden. Bedeutet dies, dass diese drei Verhaltensweisen die unterschiedlichsten sind als alle anderen Verhaltensweisen (daher versucht MDS, die größte Ungleichheit zwischen Variablen zu finden, aber nicht unbedingt alle Variablen im ersten Schritt)? Was zeigt die Positionierung der drei Cluster (wie z. B. in Dim1 und Dim2)? Da ich RI noch nicht so gut kenne, habe ich auch Probleme, eine Legende für diese Handlung zu zeichnen (ich habe jedoch eine Vorstellung davon, was die verschiedenen Farben bedeuten), aber vielleicht könnte jemand helfen? Danke vielmals!!

RandomForest MDSplot von 6 verschiedenen Tierverhalten

Ich füge einen Plot hinzu, der mit der ClassCenter-Funktion in RandomForest erstellt wurde. Diese Funktion verwendet auch die Proximity-Matrix (wie im MDS-Plot) zum Plotten der Prototypen. Aber wenn ich nur die Datenpunkte für die sechs verschiedenen Verhaltensweisen betrachte, kann ich nicht verstehen, warum die Proximity-Matrix meine Prototypen so darstellt, wie sie sind. Ich habe auch die Classcenter-Funktion mit den Iris-Daten ausprobiert und es funktioniert. Aber es scheint, als würde es für meine Daten nicht funktionieren ...

Hier ist der Code, den ich für diesen Plot verwendet habe

be.rf <- randomForest(Behaviour~., data=be, prox=TRUE, importance=TRUE)
class1 <- classCenter(be[,-1], be[,1], be.rf$prox)
Protoplot <- plot(be[,4], be[,7], pch=21, xlab=names(be)[4], ylab=names(be)[7], bg=c("red", "green", "blue", "yellow", "turquoise", "orange") [as.numeric(factor(be$Behaviour))])
points(class1[,4], class1[,7], pch=21, cex=2, bg=c("red", "green", "blue", "yellow", "turquoise", "orange"))

Meine Klassenspalte ist die erste, gefolgt von 8 Prädiktoren. Ich habe zwei der besten Prädiktorvariablen als x und y dargestellt.

RandomForest ClassCenter-Diagramm für 6 verschiedene Tierverhalten

Klopfen
quelle

Antworten:

10

Die Funktion MDSplot zeichnet die (PCA) der Proximity-Matrix. Aus der Dokumentation für randomForest ergibt sich folgende Proximity-Matrix:

Eine Näherungsmatrix misst zwischen den Eingaben (basierend auf der Häufigkeit, mit der sich Datenpunktpaare in denselben Endknoten befinden).

Anhand dieser Beschreibung können wir erraten, was die verschiedenen Darstellungen bedeuten. Sie scheinen k = 4 angegeben zu haben, was eine Zerlegung der Näherungsmatrix in 4 Komponenten bedeutet. Für jeden Eintrag (i, j) in dieser Diagrammmatrix ist die PCA-Zerlegung entlang der Dimension i gegen die PCA-Zerlegung entlang der Dimension j aufgetragen.

Ich habe eine PCA mit den gleichen Daten durchgeführt und eine gute Trennung zwischen allen Klassen in PC1 und PC2 erhalten, aber hier scheinen Dim1 und Dim2 nur drei Verhalten zu unterscheiden. Bedeutet dies, dass diese drei Verhaltensweisen die unterschiedlichsten sind als alle anderen Verhaltensweisen (daher versucht MDS, die größte Ungleichheit zwischen Variablen zu finden, aber nicht unbedingt alle Variablen im ersten Schritt)?

MDS kann seine Analyse nur auf die Ausgabe Ihres randomForest stützen. Wenn Sie eine bessere Trennung erwarten, können Sie die Klassifizierungsleistung Ihres randomForest überprüfen. Beachten Sie auch, dass Ihr PCA 9-dimensionale Daten auf 2 Dimensionen abbildet, der MDS jedoch eine NxN-dimensionale Proximity-Matrix auf 2 Dimensionen abbildet, wobei N die Anzahl der Datenpunkte ist.

Was zeigt die Positionierung der drei Cluster (wie z. B. in Dim1 und Dim2)?

Es zeigt Ihnen nur, wie weit (relativ) diese Cluster voneinander entfernt sind. Es ist eine Visualisierungshilfe, damit ich es nicht überdeute.

Da ich RI noch nicht so gut kenne, habe ich auch Probleme, eine Legende zu diesem Plot zu zeichnen (ich habe jedoch eine Idee, was die verschiedenen Farben bedeuten), aber vielleicht könnte jemand helfen?

So wie R funktioniert, gibt es keine Möglichkeit, Legenden nachträglich zu zeichnen (anders als in Matlab, wo diese Informationen im Figurenobjekt gespeichert sind). Wenn wir uns den Code für MDSplot ansehen, sehen wir jedoch, dass der relevante Codeblock:

palette <- if (require(RColorBrewer) && nlevs < 12) brewer.pal(nlevs, "Set1")

...

plot(rf.mds$points, col = palette[as.numeric(fac)], pch = pch, ...)

Die Farben werden also aus dieser Palette entnommen und den Ebenen (Verhaltensweisen) in der Reihenfolge zugeordnet, in der Sie sie angegeben haben. Wenn Sie also eine Legende zeichnen möchten:

legend(x,y,levels(fac),col=brewer.pal(nlevs, 'Set1'), pch=pch)

würde wahrscheinlich funktionieren.

FrankD
quelle
Vielen Dank für Ihre Antwort, das ist wirklich hilfreich! Die Klassifizierungsleistung meines zufälligen Gesamtstrukturmodells ist ziemlich gut (OOB-Fehlerrate 4,94% und Genauigkeit 95% mit CV), deshalb habe ich eine bessere Trennung in der MDS-Darstellung erwartet. Ich habe auch versucht, mit der Funktion classCenter eine Figur für Prototypen der Klassen zu zeichnen (ich habe das Iris-Beispiel im RF-Handbuch befolgt), aber da die Funktion auch die Proximity-Matrix verwendet, scheinen die Prototypen einfach keinen Sinn zu ergeben. Aber in dieser Handlung ist es offensichtlich, dass die Klassen gut voneinander getrennt sind, die Prototypen jedoch nicht.
Pat
Ich werde das ClassCenter-Diagramm zu meiner obigen Frage hinzufügen. Ich dachte auch, dass die verschiedenen Maßstäbe meiner Prädiktoren das Problem sein könnten, aber es scheint, als ob eine Skalierung bei der Verwendung von Zufallsgesamtstrukturen nicht erforderlich ist. Ich habe den Legendenbefehl nur schnell ausprobiert, aber er hat nicht funktioniert, aber ich denke, ich habe wahrscheinlich einen Fehler gemacht. Werde es morgen nochmal versuchen. Danke noch einmal!
Pat