Come controllare il costo dell'errata classificazione nelle foreste casuali?


21

È possibile controllare il costo dell'errata classificazione nel pacchetto R randomForest ?

Nel mio lavoro, i falsi negativi (ad esempio, la mancanza di errori che una persona potrebbe avere una malattia) sono molto più costosi dei falsi positivi. Il pacchetto rpart consente all'utente di controllare i costi di classificazione errata specificando una matrice di perdita per ponderare diversamente le classificazioni errate. Esiste qualcosa di simile per randomForest? Dovrei, ad esempio, usare l' classwtopzione per controllare il criterio Gini?

Risposte:


8

Non proprio, se non facendo manualmente il clone RF facendo l'insacco dei rpartmodelli.

Alcune opzioni derivano dal fatto che l'output di RF è in realtà un punteggio continuo piuttosto che una decisione chiara, ovvero la frazione di alberi che hanno votato su una classe. Può essere estratto predict(rf_model,type="prob")e utilizzato per creare, ad esempio, una curva ROC che rivelerà una soglia migliore di 0,5 (che può essere successivamente incorporata nell'allenamento RF con cutoffparametro).

classwt Anche l'approccio sembra valido, ma in pratica non funziona molto bene - la transizione tra previsione equilibrata e casting banale della stessa classe indipendentemente dagli attributi tende ad essere troppo acuta per essere utilizzabile.


MBQ. Grazie molto. (i) Curva ROC: in questo caso non ho bisogno della curva ROC poiché ho i miei priori su quale dovrebbe essere la ponderazione dei costi. (ii) classwt: Sì, ho scoperto che in pratica e in linea con altri utenti, i risultati non sono quelli previsti. (iii) cutoff: non sono chiaro su come utilizzare cutoffin questo caso e sarei lieto di ricevere ulteriori consigli.
user5944

3

Esistono diversi modi per includere i costi.
(1) Il campionamento sopra / sotto per ciascun albero insaccato (campionamento stratificato) è il metodo più comune per introdurre i costi. si bilancia intenzionalmente un set di dati.
(2) Ponderazione. Non funziona mai Penso che questo sia sottolineato nella documentazione. Alcuni sostengono che devi solo ponderare in tutte le fasi, tra cui la divisione di Gini e il voto finale. Se funzionerà, sarà un'implementazione complicata.
(3) Funzione Metacost in Weka.
(4) Trattare una foresta casuale come un classificatore probabilistico e modificare la soglia. Mi piace meno questa opzione. Probabilmente a causa della mia mancanza di conoscenza, ma anche se l'algoritmo può generare probabilità non ha senso trattarle come se si trattasse di un modello probabilistico.

Ma sono sicuro che ci sono approcci aggiuntivi.


3

Se la variabile che si sta tentando di prevedere non è del 50% class 1e del 50% class 2(come nella maggior parte dei casi), si consiglia di regolare il cutoffparametro in modo che rappresenti il ​​reale OOBin sintesi.

Per esempio,

randomForest(data=my_data, formula, ntree = 501, cutoff=c(.96,.04))

In questo caso, la probabilità di avere un valore di uno class 1è .96mentre si ha un valore di class 2is .04.

Altrimenti le foreste casuali usano una soglia di 0.5.


1

Si può integrare costMatrixin randomForestmodo esplicito tramite parmsil parametro:

library(randomForest)
costMatrix <- matrix(c(0,10,1,0), nrow=2)
mod_rf <- randomForest(outcome ~ ., data = train, ntree = 1000, parms = list(loss=costMatrix))

0

È possibile incorporare la sensibilità ai costi utilizzando la sampsizefunzione nel randomForestpacchetto.

model1=randomForest(DependentVariable~., data=my_data, sampsize=c(100,20))

Varia le cifre in (100,20)base ai dati che hai e alle ipotesi / regole commerciali con cui stai lavorando.

Ci vuole un po 'di approccio di prova ed errore per ottenere una matrice di confusione che rifletta i costi dell'errore di classificazione. Dai un'occhiata alle Previsioni sul rischio criminali di Richard Berk : un approccio all'apprendimento automatico , p. 82.

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.