È possibile utilizzare una foresta casuale per la selezione di feature nella regressione lineare multipla?


50

Poiché la RF è in grado di gestire la non linearità ma non può fornire coefficienti, sarebbe saggio utilizzare la foresta casuale per raccogliere le caratteristiche più importanti e quindi collegarle a un modello di regressione lineare multipla al fine di ottenere i loro coefficienti?


@utente777 intendi, stai leggendo "spiegare" come "ottenere" o qualcosa del genere?
Shadowtalker,

1
Dal momento che sembra esserci una sostanziale preoccupazione in merito a ciò che questa domanda potrebbe tentare di porre, potresti modificarla per chiarire la confusione?
whuber

Risposte:


71

Dal momento che la RF è in grado di gestire la non linearità ma non può fornire coefficienti, sarebbe saggio utilizzare Random Forest per raccogliere le caratteristiche più importanti e quindi collegarle a un modello di regressione lineare multipla per spiegare i loro segni?

Interpreto la domanda di una frase di OP nel senso che OP desidera comprendere la desiderabilità della seguente pipeline di analisi:

  1. Adatta una foresta casuale ad alcuni dati
  2. In base a una metrica di importanza variabile tra (1), selezionare un sottoinsieme di funzionalità di alta qualità.
  3. Utilizzando le variabili da (2), stimare un modello di regressione lineare. Ciò consentirà l'accesso OP ai coefficienti che le note OP non possono fornire RF.
  4. Dal modello lineare in (3), interpretare qualitativamente i segni delle stime dei coefficienti.

Non credo che questa pipeline realizzerà ciò che vorresti. Le variabili importanti nella foresta casuale non hanno necessariamente alcun tipo di relazione linearmente additiva con il risultato. Questa osservazione non dovrebbe sorprendere: è ciò che rende la foresta casuale così efficace nello scoprire relazioni non lineari.

Ecco un esempio Ho creato un problema di classificazione con 10 funzioni di rumore, due funzioni di "segnale" e un limite di decisione circolare.

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

inserisci qui la descrizione dell'immagine

E quando applichiamo il modello RF, non siamo sorpresi di scoprire che queste caratteristiche sono facilmente individuabili come importanti dal modello. (NB: questo modello non è sintonizzato a tutti .)

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

Ma quando selezioniamo in basso solo queste due utili funzioni, il modello lineare risultante è terribile.

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

La parte importante del sommario è il confronto tra la devianza residua e la devianza nulla. Possiamo vedere che il modello praticamente non fa nulla per "spostare" la devianza. Inoltre, le stime dei coefficienti sono essenzialmente zero.

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

Cosa spiega la grande differenza tra i due modelli? Bene, chiaramente il limite decisionale che stiamo cercando di imparare non è una funzione lineare delle due caratteristiche "segnale". Ovviamente se conoscessi la forma funzionale del limite di decisione prima di stimare la regressione, potresti applicare una trasformazione per codificare i dati in modo tale che la regressione possa quindi scoprire ... (Ma non ho mai conosciuto la forma del confine a venire di tempo in qualsiasi problema del mondo reale.) Dato che in questo caso stiamo lavorando solo con due caratteristiche del segnale, un set di dati sintetici senza rumore nelle etichette delle classi, quel confine tra le classi è molto evidente nella nostra trama. Ma è meno ovvio quando si lavora con dati reali in un numero realistico di dimensioni.

Inoltre, in generale, la foresta casuale può adattare modelli diversi a diversi sottoinsiemi di dati. In un esempio più complicato, non sarà affatto ovvio che cosa sta succedendo da un singolo diagramma, e costruire un modello lineare con un simile potere predittivo sarà ancora più difficile.

Poiché ci occupiamo solo di due dimensioni, possiamo creare una superficie di previsione. Come previsto, il modello casuale apprende che il quartiere intorno all'origine è importante.

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

inserisci qui la descrizione dell'immagine

Come suggerito dal nostro output di modello abissale, la superficie di previsione per il modello di regressione logistica a variabile ridotta è sostanzialmente piatta.

inserisci qui la descrizione dell'immagine

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 nota che l'appartenenza alla classe non è una funzione lineare delle caratteristiche, ma che una funzione lineare è in fase di trasformazione. Poiché il limite di decisione è se quadriamo queste caratteristiche, saremo in grado di costruire un modello lineare più utile. Questo è deliberato. Mentre il modello RF può trovare il segnale in queste due funzioni senza trasformazione, l'analista deve essere più specifico per ottenere risultati altrettanto utili nel GLM. Forse è sufficiente per OP: trovare un utile set di trasformazioni per 2 funzioni è più facile di 12. Ma il mio punto è che anche se una trasformazione produrrà un utile modello lineare, l'importanza delle caratteristiche RF non suggerirà la trasformazione da sola.1=x12+x22,


1
Penso che, seppur bello, manca il punto. Prova un modello leggermente più complesso, che definirei sufficientemente non banale per essere informativo. Considera questo ( people.kyb.tuebingen.mpg.de/spider/demo_dec_vs_svm_2.jpg ) con un po 'di rumore salato e pepato. Ora adattalo con RF. Ora usa RF come "filtro" per rimuovere fenomeni "spuri" e addestra il tuo modello alternativo sulle uscite della RF, non sui suoi coefficienti. L'OP specifica "caratteristiche" e non coefficienti. Il PO non dice "foresta casuale ridotta" ma "foresta casuale". L'implicazione è per l'output dell'intera foresta.
EngrStudent - Ripristina Monica il

3
È interessante notare che il tuo esempio è lineare nei predittori, se li trasformi per primo. La tua equazione è , quindi prendere il quadrato di e trasforma in un modello lineare. In effetti, è uno degli esempi che Friedman, Hastie e Tibshirani hanno usato per dimostrare che il potenziamento si adatta a un modello a bassa dimensione (additivo, nel caso dei monconi). x 1 x 2y=x12+x22x1x2
Hong Ooi,

3
@ user777, ho usato foreste casuali per la riduzione della dimensionalità contro problemi complessi per anni. Il mio ex datore di lavoro, Intel Semiconductor, ha processi di produzione che hanno 20k colonne e 20k passi, e per meno di 10 difetti usa questo come parte di una suite di strumenti analitici per passare da 20k colonne a 30 colonne. Insegnano corsi internamente e tengono lezioni sul contenuto esternamente. ( web.stanford.edu/class/ee392m/Lecture3Tuv.pdf ) La "foresta" è uno strumento incredibilmente potente e tu hai preso la cattiva strada. Ce ne sono due decisamente buoni che ti sei perso.
EngrStudent - Ripristina Monica il

2
@EngrStudent "Intel utilizza RF per passare da molte a meno colonne." Questo è esattamente ciò che fa la mia dimostrazione. Risponde anche alla particolare domanda di OP sul fatto che tali funzioni possano essere utilizzate proficuamente in un modello lineare e la mia risposta è "in generale non saranno direttamente utili, ma in questo esempio potresti trovarle utili in una trasformazione".
Ripristina Monica il

12

La risposta di @Sycorax è fantastica. Oltre a quegli aspetti completamente descritti del problema relativo all'adattamento del modello, c'è un'altra ragione per non perseguire un processo in più fasi come l'esecuzione di foreste casuali, lazo o rete elastica per "apprendere" quali caratteristiche per alimentare la regressione tradizionale. Regressione ordinaria non saprebbe circa la penalizzazione che correttamente ha continuato durante lo sviluppo della foresta casuale o altri metodi, e si adatterebbe effetti unpenalized che sono gravemente viziate di apparire troppo forte nel predire . Ciò non sarebbe diverso dall'eseguire la selezione graduale delle variabili e riportare il modello finale senza tener conto di come è arrivato.Y


2
Grazie, dottor Harrell! Nella mia mente, se OP dovesse utilizzare questa pipeline di analisi, OP farebbe la selezione verso il basso RF e l'adattamento del modello lineare all'interno del loro schema di convalida (incrociata). È sufficiente per mitigare il pregiudizio che descrivi o c'è un altro problema in agguato qui che mi manca?
Ripristina Monica il

2
Non so come fare un modello lineare adeguato "all'interno" dello schema. Non so come mitigare la distorsione da eccesso di stima / stima che ne deriverebbe. Forse un approccio migliore è l'approssimazione del modello, a volte chiamata pre-condizionamento. Qui usi modelli tradizionali o alberi singoli (che richiederebbero una tonnellata di nodi) per approssimare l'output di una scatola nera, ereditando il restringimento della scatola nera.
Frank Harrell,

8

Una foresta casuale eseguita correttamente applicata a un problema che è più "foresta casuale appropriata" può funzionare come filtro per rimuovere il rumore e ottenere risultati più utili come input per altri strumenti di analisi.

Avvertenze:

  • È un "proiettile d'argento"? Non c'è modo. Il chilometraggio varierà. Funziona dove funziona e non altrove.
  • Ci sono modi in cui puoi usarlo gravemente in modo errato e ottenere risposte nel dominio junk-to-voodoo? youbetcha. Come ogni strumento analitico, ha dei limiti.
  • Se lecchi una rana, il tuo respiro puzza di rana? probabile. Non ho esperienza lì.

Devo dare un "grido" ai miei "pig" che hanno fatto "Spider". ( link ) Il loro problema di esempio ha informato il mio approccio. ( link ) Adoro anche gli stimatori di Theil-Sen e vorrei poter offrire oggetti di scena a Theil e Sen.

La mia risposta non è su come sbagliarla, ma su come potrebbe funzionare se la prendessi per lo più nel modo giusto. Mentre uso un rumore "banale", voglio che tu pensi al rumore "non banale" o "strutturato".

Uno dei punti di forza di una foresta casuale è quanto bene si applica ai problemi ad alta dimensione. Non riesco a mostrare 20k colonne (ovvero uno spazio dimensionale 20k) in un modo visivamente pulito. Non è un compito facile. Tuttavia, se hai un problema di 20k dimensioni, una foresta casuale potrebbe essere un buon strumento lì quando la maggior parte degli altri si appiattisce sulle loro "facce".

Questo è un esempio di rimozione del rumore dal segnale usando una foresta casuale.

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

Lasciami descrivere cosa sta succedendo qui. L'immagine seguente mostra i dati di allenamento per la classe "1". La classe "2" è casuale uniforme nello stesso dominio e intervallo. Puoi vedere che le "informazioni" di "1" sono principalmente una spirale, ma sono state corrotte con materiale proveniente da "2". Avere il 33% dei dati danneggiati può essere un problema per molti strumenti di adattamento. Theil-Sen inizia a degradare a circa il 29%. ( link )

inserisci qui la descrizione dell'immagine

Ora separiamo le informazioni, avendo solo un'idea di cosa sia il rumore.

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

Ecco il risultato del montaggio:

inserisci qui la descrizione dell'immagine

Mi piace molto perché può mostrare contemporaneamente sia i punti di forza che i punti deboli di un metodo decente a un problema difficile. Se guardi vicino al centro puoi vedere come c'è meno filtro. La scala geometrica delle informazioni è piccola e manca alla foresta casuale. Dice qualcosa sul numero di nodi, il numero di alberi e la densità del campione per la classe 2. C'è anche uno "spazio" vicino (-50, -50) e "getti" in diverse posizioni. In generale, tuttavia, il filtro è decente.

Confronta vs. SVM

Ecco il codice per consentire un confronto con 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))

Risulta nella seguente immagine.

inserisci qui la descrizione dell'immagine

Questo è un SVM decente. Il grigio è il dominio associato alla classe "1" da SVM. I punti blu sono i campioni associati alla classe "1" dalla RF. Il filtro basato su RF offre prestazioni comparabili a SVM senza una base esplicitamente imposta. Si può vedere che i "dati stretti" vicino al centro della spirale sono molto più "strettamente" risolti dalla RF. Ci sono anche "isole" verso la "coda" in cui la RF trova associazione che SVM non ha.

Sono divertito. Senza avere il background, ho fatto una delle prime cose fatte anche da un ottimo collaboratore sul campo. L'autore originale ha usato la "distribuzione di riferimento" ( link , link ).

MODIFICARE:

Applica FOREST casuale a questo modello:
Mentre user777 ha una buona idea che una CART sia l'elemento di una foresta casuale, la premessa della foresta casuale è "aggregazione di gruppi di discenti deboli". Il CART è uno studente debole noto ma non è nulla di remoto vicino a un "ensemble". L '"insieme", sebbene in una foresta casuale sia inteso "nel limite di un gran numero di campioni". La risposta di user777, nel grafico a dispersione, utilizza almeno 500 campioni e dice qualcosa sulla leggibilità umana e le dimensioni dei campioni in questo caso. Il sistema visivo umano (a sua volta un insieme di discenti) è un sensore e un elaboratore di dati straordinari e trova quel valore sufficiente per facilitare l'elaborazione.

Se prendiamo anche le impostazioni predefinite su uno strumento a foresta casuale, possiamo osservare che il comportamento dell'errore di classificazione aumenta per i primi diversi alberi e non raggiunge il livello di un albero finché non ci sono circa 10 alberi. Inizialmente l'errore cresce, la riduzione dell'errore diventa stabile attorno a 60 alberi. Per stabile intendo

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

Che produce:
inserisci qui la descrizione dell'immagine

Se invece di guardare lo "studente minimo debole" osserviamo l '"insieme minimo debole" suggerito da una breve euristica per l'impostazione predefinita dello strumento, i risultati sono leggermente diversi.

Nota, ho usato "linee" per disegnare il cerchio che indica il bordo sopra l'approssimazione. Puoi vedere che è imperfetto, ma molto meglio della qualità di un singolo studente.

inserisci qui la descrizione dell'immagine

Il campionamento originale ha 88 campioni "interni". Se le dimensioni del campione vengono aumentate (consentendo l'applicazione dell'ensemble), migliora anche la qualità dell'approssimazione. Lo stesso numero di studenti con 20.000 campioni si adatta in modo incredibilmente migliore.

inserisci qui la descrizione dell'immagine

Le informazioni di input di qualità molto più elevata consentono anche la valutazione del numero appropriato di alberi. L'ispezione della convergenza suggerisce che in questo caso particolare 20 alberi rappresentano il numero minimo sufficiente per rappresentare bene i dati.

inserisci qui la descrizione dell'immagine


In che modo questo dimostra / confuta che la RF può essere utilizzata per selezionare funzionalità di alta qualità per un modello lineare? Non si discute di selezione delle caratteristiche o modelli lineari nella risposta.
Ripristina Monica il

la premessa di chi chiede è di usare la RF come pre-filtro e poi guardare i parametri del modello lineare. Non stava guardando i parametri della foresta. Quando l'ho letto, a causa della sua mancanza di profondità o specificità, il "modello lineare multiplo" sembrava secondario. A me questo sembrava un "può un RF preelaborare / pulire i dati prima di inserirli nello strumento analitico x".
EngrStudent - Ripristina Monica il

Vedo artefatti orizzontali e verticali. Sono tentato di creare un "dato coniugato" su coordinate ruotate di 45 gradi e di aggiungere le colonne alla RF. Scommetto che una trasformazione del genere ridurrebbe il numero di artefatti, anche se non sono sicuro di come cambierebbe i parametri di input.
EngrStudent - Ripristina Monica l'

2
A parte questo, la "foresta di rotazione" è una variante recente di questa idea, in cui PCA viene utilizzato per determinare la nuova base. ncbi.nlm.nih.gov/pubmed/16986543
Ripristina Monica

1
Ordinato: Liu, Fei Tony, Ting, Kai Ming e Zhou, Zhi-Hua. "Foresta di isolamento". Data mining, 2008. ICDM'08. Ottava conferenza internazionale IEEE su.
EngrStudent - Ripristina Monica l'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.