Czy losowy las można wykorzystać do wyboru funkcji w wielokrotnej regresji liniowej?

50

Ponieważ RF może poradzić sobie z nieliniowością, ale nie może zapewnić współczynników, czy mądrze byłoby użyć losowego lasu do zebrania najważniejszych cech, a następnie podłączyć je do modelu wielokrotnej regresji liniowej w celu uzyskania ich współczynników?

Ukryty model Markowa
źródło
@ user777 masz na myśli, że czytasz „wyjaśnić” jako „uzyskać” czy coś takiego?
shadowtalker
1
Ponieważ wydaje się, że istnieje poważna obawa o to, jakie pytanie może próbować zadać to pytanie, czy możesz je edytować, aby wyjaśnić zamieszanie?
whuber

Odpowiedzi:

71

Ponieważ RF może poradzić sobie z nieliniowością, ale nie może zapewnić współczynników, czy mądrze byłoby użyć Losowego lasu do zebrania najważniejszych cech, a następnie podłączyć je do modelu wielokrotnej regresji liniowej w celu wyjaśnienia ich znaków?

Interpretuję jedno zdanie pytania OP w ten sposób, że OP chce zrozumieć celowość następującej analizy:

  1. Dopasuj losowy las do niektórych danych
  2. Według niektórych wskaźników o zmiennym znaczeniu z (1) wybierz podzbiór funkcji wysokiej jakości.
  3. Używając zmiennych z (2), oszacuj model regresji liniowej. Umożliwi to OP dostęp do współczynników, których notatki OP RF nie mogą zapewnić.
  4. Z modelu liniowego w (3) interpretuj jakościowo znaki oszacowań współczynników.

Nie sądzę, że ten rurociąg osiągnie to, co chcesz. Zmienne, które są ważne w losowym lesie, niekoniecznie mają związek liniowy z wynikiem. Ta uwaga nie powinna dziwić: to sprawia, że ​​losowy las jest tak skuteczny w odkrywaniu relacji nieliniowych.

Oto przykład. Stworzyłem problem klasyfikacji z 10 cechami szumu, dwiema cechami „sygnałowymi” i okrągłą granicą decyzji.

set.seed(1)
N  <- 500
x1 <- rnorm(N, sd=1.5)
x2 <- rnorm(N, sd=1.5)

y  <- apply(cbind(x1, x2), 1, function(x) (x%*%x)<1)

plot(x1, x2, col=ifelse(y, "red", "blue"))
lines(cos(seq(0, 2*pi, len=1000)), sin(seq(0, 2*pi, len=1000))) 

wprowadź opis zdjęcia tutaj

A kiedy zastosujemy model RF, nie dziwi nas, że funkcje te są łatwo wybierane przez model jako ważne. (Uwaga: ten model nie jest dostrojony w ogóle ).

x_junk   <- matrix(rnorm(N*10, sd=1.5), ncol=10)
x        <- cbind(x1, x2, x_junk)
names(x) <- paste("V", 1:ncol(x), sep="")

rf <- randomForest(as.factor(y)~., data=x, mtry=4)
importance(rf)

    MeanDecreaseGini
x1         49.762104
x2         54.980725
V3          5.715863
V4          5.010281
V5          4.193836
V6          7.147988
V7          5.897283
V8          5.338241
V9          5.338689
V10         5.198862
V11         4.731412
V12         5.221611

Ale kiedy wybieramy w dół tylko te dwie przydatne funkcje, powstały model liniowy jest okropny.

summary(badmodel <- glm(y~., data=data.frame(x1,x2), family="binomial"))

Ważną częścią podsumowania jest porównanie odchylenia resztkowego i odchylenia zerowego. Widzimy, że model w zasadzie nic nie „przesuwa” dewiacji. Ponadto oszacowania współczynników są zasadniczo zerowe.

Call:
glm(formula = as.factor(y) ~ ., family = "binomial", data = data.frame(x1, 
    x2))

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.6914  -0.6710  -0.6600  -0.6481   1.8079  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -1.398378   0.112271 -12.455   <2e-16 ***
x1          -0.020090   0.076518  -0.263    0.793    
x2          -0.004902   0.071711  -0.068    0.946    
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 497.62  on 499  degrees of freedom
Residual deviance: 497.54  on 497  degrees of freedom
AIC: 503.54

Number of Fisher Scoring iterations: 4

Co tłumaczy dziką różnicę między tymi dwoma modelami? Oczywiście granica decyzyjna, której próbujemy się nauczyć, nie jest liniową funkcją dwóch cech „sygnałowych”. Oczywiście, jeśli znasz funkcjonalną formę granicy decyzji przed oszacowaniem regresji, możesz zastosować transformację, aby zakodować dane w taki sposób, aby regresja mogła następnie odkryć ... (Ale nigdy nie znałem formy granicy przed sobą czasu w jakimkolwiek rzeczywistym problemie.) Ponieważ w tym przypadku pracujemy tylko z dwiema cechami sygnału, syntetycznym zestawem danych bez szumu na etykietach klas, granica między klasami jest bardzo oczywista na naszym wykresie. Jest to jednak mniej oczywiste podczas pracy z rzeczywistymi danymi w realistycznej liczbie wymiarów.

Ponadto, ogólnie, losowy las może dopasować różne modele do różnych podzbiorów danych. W bardziej skomplikowanym przykładzie nie będzie oczywiste, co się dzieje z pojedynczej fabuły, a zbudowanie liniowego modelu o podobnej mocy predykcyjnej będzie jeszcze trudniejsze.

Ponieważ zajmujemy się tylko dwoma wymiarami, możemy wykonać powierzchnię predykcyjną. Zgodnie z oczekiwaniami, model przypadkowy dowiaduje się, że sąsiedztwo wokół źródła jest ważne.

M                 <- 100
x_new             <- seq(-4,4, len=M)
x_new_grid        <- expand.grid(x_new, x_new)
names(x_new_grid) <- c("x1", "x2")
x_pred            <- data.frame(x_new_grid, matrix(nrow(x_new_grid)*10, ncol=10))
names(x_pred)     <- names(x)

y_hat             <- predict(object=rf, newdata=x_pred, "vote")[,2]

library(fields)
y_hat_mat         <- as.matrix(unstack(data.frame(y_hat, x_new_grid), y_hat~x1))

image.plot(z=y_hat_mat, x=x_new, y=x_new, zlim=c(0,1), col=tim.colors(255), 
           main="RF Prediction surface", xlab="x1", ylab="x2")

wprowadź opis zdjęcia tutaj

Jak wynika z naszego wyjściowego modelu bezwzględnego, powierzchnia predykcyjna dla modelu regresji logistycznej o zredukowanej zmiennej jest zasadniczo płaska.

wprowadź opis zdjęcia tutaj

bad_y_hat     <- predict(object=badmodel, newdata=x_new_grid, type="response")
bad_y_hat_mat <- as.matrix(unstack(data.frame(bad_y_hat, x_new_grid), bad_y_hat~x1))
image.plot(z=bad_y_hat_mat, x=x_new, y=x_new, zlim=c(0,1), col=tim.colors(255), 
           main="Logistic regression prediction surface", xlab="x1", ylab="x2")

HongOoi zauważa, że ​​członkostwo w klasie nie jest funkcją liniową cech, ale że jest to funkcja liniowa podlegająca transformacji. Ponieważ granica decyzyjna wynosi jeśli wyprostujemy te cechy, będziemy w stanie zbudować bardziej użyteczny model liniowy. To celowe. Podczas gdy model RF może znaleźć sygnał w tych dwóch funkcjach bez transformacji, analityk musi być bardziej szczegółowy, aby uzyskać podobnie pomocne wyniki w GLM. Być może to wystarcza dla OP: znalezienie użytecznego zestawu transformacji dla 2 cech jest łatwiejsze niż 12. Ale chodzi mi o to, że nawet jeśli transformacja da użyteczny model liniowy, znaczenie funkcji RF nie sugeruje transformacji jako takiej.1=x12+x22,

Przywróć Monikę
źródło
1
Myślę, że choć miło, to nie trafia w sedno. Wypróbuj nieco bardziej złożony model - taki, który nazwałbym wystarczająco trywialny, aby był informacyjny. Rozważ to ( people.kyb.tuebingen.mpg.de/spider/demo_dec_vs_svm_2.jpg ) z pewnym hałasem solnym i pieprzowym. Teraz dopasuj do RF. Teraz użyj RF jako „filtra” do usunięcia „fałszywych” zjawisk i wytrenuj swój alternatywny model na wyjściach RF, a nie jego współczynników. PO określa „cechy”, a nie współczynniki. PO nie mówi „zredukowany losowy las”, ale „losowy las”. Implikacja dotyczy wyników całego lasu.
EngrStudent
3
Co ciekawe, twój przykład jest liniowy w predyktorach - jeśli najpierw je przekształcisz. Twoje równanie to , więc biorąc kwadrat i zamienia go w model liniowy. W rzeczywistości jest to jeden z przykładów, które Friedman, Hastie i Tibshirani pokazali, że wzmocnienie pasuje do modelu niskiego wymiaru (addytywny, w przypadku kikutów). x 1 x 2y=x12+x22x1x2
Hong Ooi
3
@ user777, od lat używałem losowych lasów do redukcji wymiarów w stosunku do złożonych problemów. Mój były pracodawca, Intel Semiconductor, ma procesy produkcyjne, które mają 20 tys. Kolumn i 20 tys. Kroków, aw przypadku mniej niż 10 defektów wykorzystuje to jako część pakietu narzędzi analitycznych do przejścia z 20 tys. Kolumn do 30 kolumn. Uczą kursów wewnętrznie i wykładają treści na zewnątrz. ( web.stanford.edu/class/ee392m/Lecture3Tuv.pdf ) „Las” jest niezwykle potężnym narzędziem i wybrałeś jedną złą drogę. Są dwa bardzo dobre, za którymi tęskniłeś.
EngrStudent
2
@EngrStudent „Intel używa RF do przechodzenia z wielu do mniejszej liczby kolumn”. Właśnie to robi moja demonstracja. Odpowiada również na szczególne pytanie OP dotyczące tego, czy te funkcje mogą być z korzyścią wykorzystywane w modelu liniowym, a moja odpowiedź brzmi: „ogólnie rzecz biorąc, nie będą one bezpośrednio przydatne, ale w tym przykładzie mogą okazać się przydatne podczas transformacji”.
Przywróć Monikę
12

Odpowiedź @Sycorax jest fantastyczna. Oprócz tych w pełni opisanych aspektów problemu związanych z dopasowaniem modelu istnieje jeszcze jeden powód, aby nie realizować wieloetapowego procesu, takiego jak uruchamianie losowych lasów, lasso lub elastycznej sieci, aby „nauczyć się”, które funkcje należy zastosować w tradycyjnej regresji. Zwyczajne regresji nie wiedziałby o penalizacji, że właściwie się działo podczas rozwoju lasu losowego lub innych metod, a pasowałoby efekty unpenalized że są źle tendencyjne być zbyt silny w przewidywaniu . Nie różni się to niczym od stopniowego wybierania zmiennych i raportowania ostatecznego modelu bez uwzględnienia sposobu jego otrzymania.Y

Frank Harrell
źródło
2
Dzięki, Dr. Harrell! Moim zdaniem, gdyby OP użył tego potoku analizy, OP dokonałby selekcji w dół RF i dopasowania modelu liniowego w ramach swojego (krzyżowego) schematu walidacji. Czy to wystarczy, aby złagodzić opisywane przez ciebie uprzedzenia, czy też czai się tutaj inny problem, którego mi brakuje?
Przywróć Monikę
2
Nie wiem, jak zrobić właściwy model liniowy „wewnątrz” schematu. Nie wiem, jak złagodzić uprzedzenia wynikające z nadmiernego dopasowania / oszacowania. Być może lepszym podejściem jest aproksymacja modelu, zwana czasem wstępnym. Tutaj używasz tradycyjnych modeli lub pojedynczych drzew (które wymagałyby ton węzłów) do przybliżenia wyjścia czarnej skrzynki, dziedziczącej kurczenie się czarnej skrzynki.
Frank Harrell,
8

Prawidłowo wykonany losowy las zastosowany do problemu, który jest bardziej „losowy odpowiedni dla lasu”, może działać jako filtr do usuwania szumu i uzyskiwania wyników, które są bardziej przydatne jako dane wejściowe do innych narzędzi analitycznych.

Zastrzeżenia:

  • Czy to „srebrna kula”? Nie ma mowy. Przebieg będzie się różnić. Działa tam, gdzie działa, a nie gdzie indziej.
  • Czy istnieją sposoby, w jakie można błędnie i rażąco użyć go i uzyskać odpowiedzi, które znajdują się w domenie śmieci-do-voodoo? youbetcha. Jak każde narzędzie analityczne ma ograniczenia.
  • Jeśli polizasz żabę, czy twój oddech będzie pachniał jak żaba? prawdopodobne. Nie mam tam doświadczenia.

Muszę „wykrzyczeć” moim „podglądaczom”, którzy stworzyli „Pająka”. ( link ) Ich przykładowy problem świadczył o moim podejściu. ( link ) Uwielbiam także estymatory Theil-Sen i chciałbym dać rekwizyty Theilowi ​​i Senowi.

Moja odpowiedź nie dotyczy tego, jak to zrobić źle, ale tego, jak może działać, jeśli masz rację. Chociaż używam „trywialnego” hałasu, chcę, abyś pomyślał o „nietrywialnym” lub „ustrukturyzowanym” hałasie.

Jedną z mocnych stron losowego lasu jest to, jak dobrze stosuje się do problemów wielowymiarowych. Nie mogę pokazać 20 tys. Kolumn (czyli przestrzeni 20 tys. Wymiarów) w przejrzysty sposób. To nie jest łatwe zadanie. Jeśli jednak masz problem z wymiarami 20k, losowy las może być dobrym narzędziem, gdy większość innych pada płasko na swoje „twarze”.

Jest to przykład usuwania szumu z sygnału za pomocą losowego lasu.

#housekeeping
rm(list=ls())

#library
library(randomForest)

#for reproducibility
set.seed(08012015)

#basic
n <- 1:2000
r <- 0.05*n +1 
th <- n*(4*pi)/max(n)

#polar to cartesian
x1=r*cos(th) 
y1=r*sin(th)

#add noise
x2 <- x1+0.1*r*runif(min = -1,max = 1,n=length(n))
y2 <- y1+0.1*r*runif(min = -1,max = 1,n=length(n))

#append salt and pepper
x3 <- runif(min = min(x2),max = max(x2),n=length(n)/2)
y3 <- runif(min = min(y2),max = max(y2),n=length(n)/2)

x4 <- c(x2,x3)
y4 <- c(y2,y3)
z4 <- as.vector(matrix(1,nrow=length(x4)))

#plot class "A" derivation
plot(x1,y1,pch=18,type="l",col="Red", lwd=2)
points(x2,y2)
points(x3,y3,pch=18,col="Blue")
legend(x = 65,y=65,legend = c("true","sampled","false"),
col = c("Red","Black","Blue"),lty = c(1,-1,-1),pch=c(-1,1,18))

Pozwól mi opisać, co się tutaj dzieje. Poniższy obraz pokazuje dane treningowe dla klasy „1”. Klasa „2” jest jednolita losowo w tej samej dziedzinie i zakresie. Widać, że „informacja” z „1” jest głównie spiralą, ale została zepsuta materiałem z „2”. Uszkodzenie 33% danych może stanowić problem dla wielu narzędzi do dopasowania. Theil-Sen zaczyna degradować się o około 29%. ( link )

wprowadź opis zdjęcia tutaj

Teraz rozdzielamy informacje, mając jedynie pojęcie, czym jest hałas.

#Create "B" class of uniform noise
x5 <- runif(min = min(x4),max = max(x4),n=length(x4))
y5 <- runif(min = min(y4),max = max(y4),n=length(x4))
z5 <- 2*z4 

#assemble data into frame 
data <- data.frame(c(x4,x5),c(y4,y5),as.factor(c(z4,z5)))
names(data) <- c("x","y","z")

#train random forest - I like h2o, but this is textbook Breimann
fit.rf <- randomForest(z~.,data=data,
                       ntree = 1000, replace=TRUE, nodesize = 20)
data2 <- predict(fit.rf,newdata=data[data$z==1,c(1,2)],type="response")

#separate class "1" from training data
idx1a <- which(data[,3]==1)

#separate class "1" from the predicted data
idx1b <- which(data2==1)

#show the difference in classes before and after RF based filter
plot(data[idx1a,1],data[idx1a,2])
points(data[idx1b,1],data[idx1b,2],col="Red")

Oto wynik dopasowania:

wprowadź opis zdjęcia tutaj

Naprawdę podoba mi się to, ponieważ może jednocześnie pokazać mocne i słabe strony przyzwoitej metody na trudny problem. Jeśli spojrzysz w pobliżu centrum, zobaczysz mniej filtrowania. Geometryczna skala informacji jest niewielka, a losowy las tego brakuje. Mówi coś o liczbie węzłów, liczbie drzew i gęstości próbki dla klasy 2. Istnieje również „przerwa” w pobliżu (-50, -50) i „dysze” w kilku lokalizacjach. Ogólnie jednak filtrowanie jest przyzwoite.

Porównaj vs. SVM

Oto kod umożliwiający porównanie z SVM:

#now to fit to svm
fit.svm <-  svm(z~., data=data, kernel="radial",gamma=10,type = "C")

x5 <- seq(from=min(x2),to=max(x2),by=1)
y5 <- seq(from=min(y2),to=max(y2),by=1)

count <- 1
x6 <- numeric()
y6 <- numeric()
for (i in 1:length(x5)){

     for (j in 1:length(y5)){
          x6[count]<-x5[i]
          y6[count]<-y5[j]
          count <- count+1
     }
}

data4 <- data.frame(x6,y6)
names(data4) <- c("x","y")

data4$z <- predict(fit.svm,newdata=data4)

idx4 <- which(data4$z==1,arr.ind=TRUE)


plot(data4[idx4,1],data4[idx4,2],col="Gray",pch=20)
points(data[idx1b,1],data[idx1b,2],col="Blue",pch=20)
lines(x1,y1,pch=18,col="Green", lwd=2)
grid()
legend(x = 65,y=65,
       legend = c("true","from RF","From SVM"),
       col = c("Green","Blue","Gray"),lty = c(1,-1,-1),pch=c(-1,20,15),pt.cex=c(1,1,2.25))

Daje to następujący obraz.

wprowadź opis zdjęcia tutaj

To przyzwoity SVM. Szary jest domeną skojarzoną przez SVM z klasą „1”. Niebieskie kropki to próbki skojarzone przez RF z klasą „1”. Filtr oparty na częstotliwości radiowej działa porównywalnie z SVM bez wyraźnie narzuconej podstawy. Można zauważyć, że „ścisłe dane” w pobliżu środka spirali są znacznie bardziej „ściśle” rozwiązywane przez RF. Istnieją również „wyspy” w kierunku „ogona”, w których RF znajduje skojarzenie, którego nie ma SVM.

Jestem rozrywką. Nie mając doświadczenia, zrobiłem jedną z pierwszych rzeczy, które wykonałem również bardzo dobry współpracownik w tej dziedzinie. Oryginalny autor użył „dystrybucji odniesienia” ( link , link ).

EDYTOWAĆ:

Zastosuj losowy FOREST do tego modelu:
Podczas gdy użytkownik777 ma fajną myśl o tym, że KOSZYK jest elementem losowego lasu, założeniem losowego lasu jest „zbiór agregacji słabych uczniów”. KOSZYK jest znanym słabym uczniem, ale nie jest niczym w pobliżu „zespołu”. „Zespół”, choć w losowym lesie, jest przeznaczony „na granicy dużej liczby próbek”. Odpowiedź użytkownika777 na wykresie rozrzutu wykorzystuje co najmniej 500 próbek, co w tym przypadku mówi coś o czytelności człowieka i rozmiarach próbek. Ludzki system wizualny (sam zespół uczniów) jest niesamowitym czujnikiem i procesorem danych i uznaje tę wartość za wystarczającą do łatwego przetwarzania.

Jeśli weźmiemy nawet domyślne ustawienia narzędzia losowego lasu, możemy zaobserwować zachowanie wzrostu błędu klasyfikacji dla pierwszych kilku drzew i nie osiągnie poziomu jednego drzewa, dopóki nie będzie około 10 drzew. Początkowo rośnie błąd redukcja błędu staje się stabilna około 60 drzew. Mam na myśli stajnię

x        <- cbind(x1, x2)
plot(rf,type="b",ylim=c(0,0.06))
grid()

Co daje:
wprowadź opis zdjęcia tutaj

Jeśli zamiast patrzeć na „minimum słabego ucznia”, patrzymy na „minimum słaby zespół” sugerowany przez bardzo krótką heurystykę dla domyślnego ustawienia narzędzia, wyniki są nieco inne.

Uwaga: użyłem „linii”, aby narysować okrąg wskazujący krawędź ponad przybliżeniem. Widać, że jest niedoskonały, ale znacznie lepszy niż jakość jednego ucznia.

wprowadź opis zdjęcia tutaj

Oryginalne próbkowanie zawiera 88 próbek „wewnętrznych”. Jeśli rozmiary próbek zostaną zwiększone (umożliwiając zastosowanie zestawu), poprawi się również jakość aproksymacji. Ta sama liczba uczniów z 20 000 próbek zapewnia oszałamiająco lepsze dopasowanie.

wprowadź opis zdjęcia tutaj

Znacznie lepsza jakość danych wejściowych umożliwia również ocenę odpowiedniej liczby drzew. Kontrola konwergencji sugeruje, że 20 drzew to minimalna wystarczająca liczba w tym konkretnym przypadku, aby dobrze przedstawić dane.

wprowadź opis zdjęcia tutaj

EngrStudent
źródło
Jak to dowodzi / obala, że ​​RF może być użyte do wyboru wysokiej jakości funkcji dla modelu liniowego? W swojej odpowiedzi nie omawiasz wyboru funkcji ani modeli liniowych.
Przywróć Monikę
założeniem pytającego jest użycie RF jako filtra wstępnego, a następnie spojrzenie na parametry modelu liniowego. Nie patrzył na parametry lasu. Kiedy go czytam, z powodu braku głębi lub specyficzności „wielokrotny model liniowy” wydawał się drugorzędny. Dla mnie wyglądało to jak „może RF przetworzyć / wyczyścić dane przed umieszczeniem ich w narzędziu analitycznym x”.
EngrStudent
Widzę poziome i pionowe artefakty. Kusi mnie, aby „skoniugować dane” o współrzędnych obróconych o 45 stopni i dołączyć kolumny do RF. Założę się, że taka transformacja zmniejszyłaby liczbę artefaktów, choć nie jestem pewien, jak zmieniłaby parametry wejściowe.
EngrStudent
2
Nawiasem mówiąc, „las rotacyjny” to ostatnia odmiana tego pomysłu, w której PCA jest wykorzystywany do ustalenia nowej podstawy. ncbi.nlm.nih.gov/pubmed/16986543
Przywróć Monikę
1
Czysty: Liu, Fei Tony, Ting, Kai Ming i Zhou, Zhi-Hua. „Isolation forest.” Data Mining, 2008. ICDM'08. Ósma międzynarodowa konferencja IEEE w sprawie.
EngrStudent,