Per la classificazione con Random Forests in R, come si dovrebbe adattarsi alle dimensioni delle classi sbilanciate?


17

Sto esplorando diversi metodi di classificazione per un progetto a cui sto lavorando e sono interessato a provare le foreste casuali. Sto cercando di educare me stesso mentre vado avanti e apprezzerei qualsiasi aiuto fornito dalla comunità CV.

Ho diviso i miei dati in set di allenamento / test. Dalla sperimentazione con foreste casuali in R (usando il pacchetto randomForest), ho avuto problemi con un alto tasso di classificazione errata per la mia classe più piccola. Ho letto questo documento sull'esecuzione di foreste casuali su dati sbilanciati e gli autori hanno presentato due metodi per gestire lo squilibrio di classe quando si usano foreste casuali.

1. Foreste casuali ponderate

2. Foreste casuali equilibrate

Il pacchetto R non consente la ponderazione delle classi (dai forum della guida R, ho letto che il parametro classwt non funziona correttamente ed è programmato come futura correzione di bug), quindi sono rimasto con l'opzione 2. Sono in grado di specificare il numero di oggetti campionati da ogni classe per ogni iterazione della foresta casuale.

Mi sento a disagio nell'impostare le stesse dimensioni del campione per foreste casuali, poiché mi sento come se stessi perdendo troppe informazioni sulla classe più ampia che porta a scarse prestazioni con dati futuri. I tassi di errata classificazione durante il downsampling della classe più grande hanno dimostrato di migliorare, ma mi chiedevo se ci fossero altri modi per gestire le dimensioni delle classi squilibrate nelle foreste casuali?


1
Sto anche affrontando il problema simile. Potresti fornire lo script per Foresta casuale ponderata e Foresta casuale basata su metrica, se ne hai ?? In attesa di risposta

Risposte:


5

Se non ti piacciono queste opzioni, hai preso in considerazione l'idea di utilizzare un metodo di potenziamento? Data un'appropriata funzione di perdita, il potenziamento ricalibra automaticamente i pesi man mano che procede. Se la natura stocastica delle foreste casuali ti affascina, anche l'incremento stocastico del gradiente lo arricchisce.


Ciao David, grazie per il suggerimento. Il potenziamento sarebbe possibile all'interno / in combinazione con foreste casuali? Inoltre, ho letto che il potenziamento potrebbe non essere applicabile con dati rumorosi. I dati con cui sto lavorando contengono molte variabili "rumorose". Attualmente sto eseguendo foreste casuali senza selezione delle caratteristiche, sottocampionando la classe più grande per gestire gli squilibri. Ho ottenuto risultati accettabili (classificando correttamente l'85% della classe più piccola e il 93% della classe più grande nel set di formazione), ma i miglioramenti sono sempre ben accetti.
ialm,

@Jonathan Non ho una buona idea di quanto rumore è necessario prima che le foreste casuali inizino a superare i vari metodi di potenziamento, ma la mia impressione è che sia molto difficile. Il gbmpacchetto Rha un termine "pesi" funzionante e puoi aumentare la casualità in modo molto simile alle foreste casuali diminuendo con il termine "bag.fraction". Sembra che valga la pena provare.
David J. Harris,

@ DavidJ.Harris Boosting soffre anche di uno squilibrio di classe, specialmente nel caso della rarità assoluta, quando le informazioni sulle classi minoritarie sono scarse
Antoine,

2

Penso che ponderare gli oggetti sia in qualche modo equivalente a duplicarli. Forse dovresti provare a modificare il passaggio bootstrap campionando opportunamente le tue diverse classi.

0.5


0

Invece di campionare grandi classi puoi espandere piccole classi! Se le classi di grandi dimensioni hanno molte volte più osservazioni che piccole, allora il biase sarà piccolo. Spero che tu possa gestire quel set di dati di grandi dimensioni.

Puoi anche identificare sottoinsiemi di osservazioni che gestiscono la maggior parte delle informazioni su grandi classi, ci sono molte procedure possibili, la più semplice penso sia basata sul metodo dei vicini più vicini - il campionamento delle osservazioni condizionato sulla struttura del grafico di quartiere garantisce che il campione avrà una densità di probabilità più simile a quello originale.

randomForest è scritto in Fortran ec, il codice sorgente è disponibile (http://cran.r-project.org/src/contrib/randomForest_4.6-2.tar.gz) ma non riesco a individuare il luogo in cui viene calcolata l'entropia, ps. up che la foresta casuale usano Gini invece di entropia


Identificare sottoinsiemi di osservazioni nella classe più ampia sembra un'idea interessante. La seconda parte del progetto sta effettivamente differenziando la classe più grande in sottogruppi più piccoli e utili che potrebbero essere utili per studi futuri. Per quanto riguarda i calcoli dell'entropia nel codice, in realtà non ho approfondito il codice e ho solo esaminato una parte della teoria alla base di RF, quindi non posso commentarlo.
ialm,

Volevo modificare quel codice molto tempo fa, ma non avevo tempo per questo, aggiungere pesi non sarebbe stato concettualmente difficile.
Qbik

La foresta casuale in R potrebbe essere utilizzata come strumento di regressione, forse è utile anche per la classificazione senza supervisione. Volevo modificare il codice di randomForest molto tempo fa, ma non avevo tempo per quello, l'aggiunta di pesi non sarebbe concettualmente difficile. Tempo fa mi stavo chiedendo da solo come usare la foresta casuale per la clusterizzazione senza supervisione e mi è venuta un'idea ma non ho ancora verificato che, sfortunatamente, sembra piuttosto impegnativo dal punto di vista computazionale - numerofobservations ^ 2.
Qbik

0

(1) Hai ragione la funzione di ponderazione non funziona e non sei sicuro che sia mai stata riparata.

(2) La maggior parte utilizza l'opzione 2 con dati bilanciati. La chiave per non perdere troppi dati è il campionamento stratificato. Campionate casualmente un set bilanciato univoco per ciascun albero.


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.