2015-07-10 50 views
5

Sto cercando di capire come la foresta casuale funzioni in inglese e non in matematica. Qualcuno può darmi una spiegazione davvero semplice di come funziona questo algoritmo?Una semplice spiegazione di Random Forest

Per quanto ne so, alimentiamo le caratteristiche e le etichette senza dire all'algoritmo quale caratteristica deve essere classificata come quale etichetta? Come ho usato per fare Naive Bayes che si basa sulla probabilità, dobbiamo dire quale caratteristica dovrebbe essere quale etichetta. Sono completamente lontano?

Se riesco a ottenere una spiegazione molto semplice in inglese, sarei davvero apprezzato.

+5

https: //www.quora.com/Foreste casuali/How-do-random-forests-work-in-laymans-terms – CoryKramer

risposta

4

RandomForest utilizza un cosiddetto approccio di insacco. L'idea si basa sul classico compromesso tra varianza e distorsione. Supponiamo di disporre di un set (ad esempio N) di stimatori sovradimensionati con bias basso ma alta varianza campionaria incrociata. Quindi il bias è buono e vogliamo mantenerlo, l'alta varianza è cattiva e vogliamo ridurla. RandomForest cerca di ottenere ciò facendo un cosiddetto bootstrap/sottocampionamento (come menzionato da @Alexander, questa è una combinazione di campionamento bootstrap su entrambe le osservazioni e caratteristiche). La previsione è la media dei singoli stimatori, quindi la proprietà low-bias viene conservata correttamente. Inoltre, con il Teorema del limite centrale, la varianza di questa media campionaria ha una varianza pari a variance of individual estimator divided by square root of N. Quindi ora ha proprietà di bassa polarizzazione e bassa varianza, ed è per questo che lo RandomForest sovraperforma spesso lo stimatore indipendente.

+0

Per estendere leggermente l'eccellente sommario di Jianxun sopra, un RandomForest tipicamente prende una selezione casuale di un terzo degli attributi in ciascun nodo nell'albero per un problema di regressione (e la radice quadrata del numero di attributi per un problema di classificazione). Quindi è una combinazione di insaccamento (prendendo campioni casuali di bootstrap dei dati originali) e selezione casuale degli attributi. – Alexander

8

Proverò a dare un'altra spiegazione complementare con parole semplici.

Una foresta casuale è una raccolta di alberi di decisione casuali (numero n_estimators in sklearn). Quello che devi capire è come costruire un albero decisionale casuale.

In parole povere, per costruire un albero decisionale casuale si parte da un sottoinsieme dei campioni di allenamento. In ciascun nodo disegnerai casualmente un sottoinsieme di funzionalità (numero determinato da max_features in sklearn). Per ognuna di queste funzionalità testerai diverse soglie e vedrai come suddividono i campioni in base a un determinato criterio (generalmente entropia o gini, parametro criterion in sklearn). Quindi manterrai la funzione e la sua soglia che meglio divideranno i tuoi dati e li registreranno nel nodo. Al termine della costruzione dell'albero (può essere per diversi motivi: profondità massima raggiunta (max_depth in sklearn), numero minimo di campioni raggiunto (min_samples_leaf in sklearn) ecc.) Si guardano i campioni in ogni foglia e si mantiene frequenza delle etichette. Di conseguenza, è come se l'albero fornisse una partizione dei campioni di allenamento in base a caratteristiche significative.

Dato che ogni nodo è costituito da caratteristiche prese casualmente, si capisce che ogni albero costruito in questo modo sarà diverso. Ciò contribuisce al buon compromesso tra distorsione e varianza, come spiegato da @Jianxun Li.

Quindi in modalità di test, un campione di prova passerà attraverso ogni albero, fornendo le frequenze dell'etichetta per ogni albero. L'etichetta più rappresentata è generalmente il risultato finale della classifica.

4

Aggiungendo alle due risposte precedenti, poiché hai menzionato una semplice spiegazione. Ecco una recensione che ritengo sia il modo più semplice per spiegare le foreste casuali.

I crediti vanno a Edwin Chen per la semplice spiegazione here in termini laici per le foreste casuali. Pubblicando lo stesso di seguito.

Supponiamo che tu sia molto indeciso, quindi ogni volta che vuoi guardare un film, chiedi al tuo amico Willow se pensa che ti piacerà. Per rispondere, Willow deve prima capire quali film ti piacciono, quindi le dai un sacco di film e dirle se ti è piaciuto o meno (cioè, le dai un set di formazione etichettato). Poi, quando le chiedi se pensa che ti piacerà il film X oppure no, gioca con un gioco di 20 domande con IMDB, facendo domande come "X è un film romantico?", "Johnny Depp recita in X?" , e così via. Prima chiede più domande informative (cioè, massimizza il guadagno di informazioni di ogni domanda) e ti dà una risposta sì/no alla fine.

Quindi, Willow è un albero decisionale per le preferenze dei tuoi film.

Ma Willow è solo umano, quindi non sempre generalizza le tue preferenze molto bene (cioè, si veste troppo). Per ottenere consigli più accurati, ti piacerebbe chiedere a un gruppo di amici e guardare il film X se molti di loro dicono che pensano che ti piacerà. Cioè, invece di chiedere solo Willow, vuoi chiedere anche a Woody, Apple e Cartman, e votano se ti piacerà un film (ad esempio, in questo caso costruisci un classificatore d'insieme, ovvero una foresta).

Ora non vuoi che tutti i tuoi amici facciano la stessa cosa e ti diano la stessa risposta, quindi prima dai a ciascuno di loro dati leggermente diversi. Dopotutto, non sei assolutamente sicuro delle tue preferenze tu stesso - hai detto a Willow che amavi Titanic, ma forse quel giorno lo sei stato solo felice perché era il tuo compleanno, quindi forse alcuni dei tuoi amici non dovrebbero usare il fatto che ti piaceva Titanic nel fare le loro raccomandazioni. O forse le hai detto che amavi Cenerentola, ma in realtà l'amavi davvero tanto, quindi alcuni dei tuoi amici dovrebbero dare più peso a Cenerentola. Quindi, invece di dare ai tuoi amici gli stessi dati che hai dato a Willow, dai loro versioni leggermente perturbate. Non cambi le tue decisioni di amore/odio, dici solo che ami/odi alcuni film un po 'di più o meno (formalmente, dai a ciascuno dei tuoi amici una versione bootstrap dei tuoi dati di allenamento originali). Ad esempio, mentre tu dicevi a Willow che ti piacevano Black Swan e Harry Potter e amavi Avatar, dici a Woody che ti piaceva tanto il Black Swan che lo guardavi due volte, che non amavi Avatar e che non menzionassi affatto Harry Potter.

Utilizzando questo ensemble, è la speranza che, mentre ciascuno dei vostri amici dà raccomandazioni po idiosincratici (Willow si pensa come i film sui vampiri più di te, Woody si pensa come i film Pixar, e Cartman pensa basta odio tutto), il gli errori vengono cancellati nella maggioranza. Così, i tuoi amici ora formano una foresta insaccata (bootstrap aggregata) delle preferenze del tuo film.

C'è ancora un problema con i dati, tuttavia. Mentre amavi sia Titanic che Inception, non è perché ti piacciono i film che hanno come protagonista Leonardo DiCaprio. Forse ti sono piaciuti entrambi i film per altri motivi. Quindi, non vuoi che i tuoi amici basino le loro raccomandazioni su se Leo è in un film o no. Quindi, quando ogni amico chiede a IMDB una domanda, è consentito solo un sottoinsieme casuale delle possibili domande (cioè, quando si sta costruendo un albero decisionale, in ogni nodo si usa un po 'di casualità nella selezione dell'attributo da suddividere, ad esempio selezionando casualmente un attributo o selezionando un attributo da un sottoinsieme casuale). Ciò significa che ai tuoi amici non è permesso chiedere se Leonardo DiCaprio è nel film ogni volta che lo desidera. Quindi, mentre in precedenza hai iniettato casualità a livello di dati, perturbando leggermente le tue preferenze, ora stai iniettando casualità a livello di modello, facendo in modo che i tuoi amici facciano domande diverse in momenti diversi.

E così i tuoi amici ora formano una foresta casuale.