RandomForest - interpretacja fabuły MDS


14

Użyłem randomForest, aby sklasyfikować 6 zachowań zwierząt (np. Stanie, chodzenie, pływanie itp.) W oparciu o 8 zmiennych (różne postawy ciała i ruch).

MDSplot w pakiecie randomForest daje mi to wyjście i mam problemy z interpretacją wyniku. Zrobiłem PCA na tych samych danych i uzyskałem już dobrą separację między wszystkimi klasami w PC1 i PC2, ale tutaj Dim1 i Dim2 wydają się rozdzielać 3 zachowania. Czy to oznacza, że ​​te trzy zachowania są bardziej odmienne niż wszystkie inne zachowania (więc MDS próbuje znaleźć największą różnicę między zmiennymi, ale niekoniecznie wszystkimi zmiennymi w pierwszym kroku)? Co wskazuje położenie trzech klastrów (jak np. W Dim1 i Dim2)? Ponieważ jestem raczej nowy w RI, mam również problemy z wykreśleniem legendy dla tego wątku (jednak mam pojęcie, co oznaczają różne kolory), ale może ktoś mógłby pomóc? Wielkie dzięki!!

RandomForest MDS Wykres 6 różnych zachowań zwierząt

Dodaję wykres wykonany za pomocą funkcji ClassCenter w RandomForest. Ta funkcja wykorzystuje również macierz zbliżeniową (taką samą jak na wykresie MDS) do wykreślania prototypów. Ale patrząc na punkty danych dla sześciu różnych zachowań, nie rozumiem, dlaczego macierz bliskości wykreśliłaby moje prototypy. Próbowałem także funkcji classcenter z danymi tęczówki i to działa. Ale wygląda na to, że to nie działa na moje dane ...

Oto kod, którego użyłem do tego wątku

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

Moja kolumna klasy jest pierwsza, a po niej 8 predyktorów. Narysowałem dwie najlepsze zmienne predykcyjne jako xiy.

Wykres RandomForest ClassCenter dla 6 różnych zachowań zwierząt

Odpowiedzi:


10

Funkcja MDSplot wykreśla (PCA) macierz zbliżeniową. Z dokumentacji losowego lasu wynika, że ​​macierz bliskości jest następująca:

Macierz pomiarów bliskości między danymi wejściowymi (na podstawie częstotliwości, w której pary punktów danych znajdują się w tych samych węzłach końcowych).

Na podstawie tego opisu możemy zgadywać, co oznaczają różne wykresy. Wydaje się, że podałeś k = 4, co oznacza rozkład macierzy zbliżeniowej na 4 składniki. Dla każdego wpisu (i, j) w tej matrycy wykresów wykreślany jest rozkład PCA wzdłuż wymiaru i kontra rozkład PCA wzdłuż wymiaru j.

Zrobiłem PCA na tych samych danych i uzyskałem już dobrą separację między wszystkimi klasami w PC1 i PC2, ale tutaj Dim1 i Dim2 wydają się rozdzielać 3 zachowania. Czy to oznacza, że ​​te trzy zachowania są bardziej odmienne niż wszystkie inne zachowania (więc MDS próbuje znaleźć największą różnicę między zmiennymi, ale niekoniecznie wszystkimi zmiennymi w pierwszym kroku)?

MDS może opierać swoją analizę tylko na danych wyjściowych randomForest. Jeśli oczekujesz lepszej separacji, możesz sprawdzić wydajność klasyfikacyjną swojego randomForest. Inną rzeczą, o której należy pamiętać, jest to, że twój PCA mapuje dane 9-wymiarowe na 2 wymiary, ale MDS mapuje macierz zbliżeniową NxN-wymiarową na 2 wymiary, gdzie N jest liczbą punktów danych.

Co wskazuje położenie trzech klastrów (jak np. W Dim1 i Dim2)?

To po prostu mówi, jak daleko od siebie (względnie) są te klastry. To pomoc w wizualizacji, więc nie przesadziłbym z jej interpretacją.

Ponieważ jestem raczej nowy w RI, mam również problemy z wykreśleniem legendy dla tego wątku (jednak mam pojęcie, co oznaczają różne kolory), ale może ktoś mógłby pomóc?

Sposób, w jaki działa R, nie ma możliwości wykreślenia legendy po fakcie (w przeciwieństwie do powiedzmy Matlaba, gdzie ta informacja jest przechowywana wewnątrz obiektu postaci). Jednak patrząc na kod MDSplot, widzimy, że odpowiedni blok kodu to:

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

...

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

Tak więc kolory zostaną pobrane z tej palety i zmapowane do poziomów (zachowań) w dowolnej kolejności, w jakiej je nadałeś. Więc jeśli chcesz wykreślić legendę:

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

prawdopodobnie by zadziałało.


Bardzo dziękuję za odpowiedź, to jest naprawdę pomocne !! Klasyfikacja mojego losowego modelu lasu jest dość dobra (poziom błędu OOB 4,94% i dokładność 95% z CV), dlatego spodziewałem się lepszego rozdziału na wykresie MDS. Próbowałem też wykreślić rysunek za pomocą funkcji classCenter dla prototypów klas (podążałem za przykładem tęczówki w podręczniku RF), ale ponieważ funkcja wykorzystuje również macierz zbliżeniową, prototypy po prostu wydają się nie mieć sensu. Ale na tym wątku oczywiste jest, że klasy ładnie się rozdzielają, ale prototypy nie.
Pat

Dodam wykres ClassCenter do mojego pytania powyżej. Pomyślałem również, że problemem mogą być różne skale moich predyktorów, ale wydaje się, że skalowanie nie jest konieczne przy korzystaniu z losowego lasu. Po prostu szybko wypróbowałem polecenie legendy, ale to nie zadziałało, ale myślę, że prawdopodobnie popełniłem błąd. Spróbuję jutro. Dzięki jeszcze raz!
Pat
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.