Confronta R-quadrato da due diversi modelli di Foresta casuale


10

Sto usando il pacchetto randomForest in R per sviluppare un modello di foresta casuale per cercare di spiegare un risultato continuo in un set di dati "ampio" con più predittori che campioni.

In particolare, sto inserendo un modello RF che consente alla procedura di selezionare da un insieme di ~ 75 variabili predittive che ritengo importanti.

Sto testando quanto quel modello prevede il risultato effettivo per un set di test riservato, usando l' approccio pubblicato qui in precedenza , ovvero

... o in R:

1 - sum((y-predicted)^2)/sum((y-mean(y))^2)

Ma ora ho altre ~ 25 variabili predittive che posso aggiungere. Quando si utilizza il set di ~ 100 predittori, l'R² è maggiore. Voglio testarlo statisticamente, in altre parole, quando si utilizza l'insieme di ~ 100 predittori, il test del modello è significativamente migliore nei test dei dati rispetto all'adattamento del modello usando ~ 75 predittori. Vale a dire, l'R² dal test del modello RF si adatta sull'insieme di dati completo significativamente più elevato dell'R² dal test del modello RF sul set di dati ridotto.

Questo è importante per me testarlo, perché si tratta di dati pilota e ottenere quei 25 predittori extra è stato costoso e devo sapere se dovrei pagare per misurare quei predittori in uno studio di follow-up più ampio.

Sto cercando di pensare a una sorta di approccio di ricampionamento / permutazione ma non mi viene in mente nulla.

Risposte:


8

Cross-validate! Usa la funzione del treno nel cursore per adattarti ai tuoi 2 modelli. Usa un valore di mtry (lo stesso per entrambi i modelli). Caret restituirà una stima ricampionata di RMSE e .R2

Vedi pagina 3 della vignetta del cursore (anche nel manuale di riferimento completo )


Sono d'accordo, tranne per la tua omissione, che OP dovrebbe usare il rettangolo R rettificato, in quanto è progettato per questo. I modelli hanno lo stesso Y ma set di predittori diversi, quindi è necessario un aggiustamento del R-quadrato per penalizzare la differenza nei gradi di libertà / complessità del modello spesi. L'altro problema che vedo è potenzialmente un problema relativo alle dimensioni del campione; OP richiederebbe una dimensione del campione MASSIVE per avere ogni sorta di vera speranza che questo non sia solo un adattamento eccessivo, anche con CV.
LSC,

@LSC Direi che se di tiene fuori un set di dati aggiuntivo (non usato per la selezione), potrebbero usare R2 senza regolazione, dato che è solo RMSE normalizzato. Sono d'accordo che avrebbero bisogno di un set di dati piuttosto grande per farlo.
Zach,

nuovi dati o vecchi, tutti gli altri costanti, mettendo 100 termini in un modello contro 25 avranno un R-quadrato non aggiustato più alto rispetto all'R-quadrato del modello predittore 25. Questo si vede facilmente quando si calcola la somma degli errori al quadrato tra i due (più termini sono SSE inferiori, tutti uguali). Penso che la gente dimentichi spesso che più termini non diminuiranno mai il R-quadrato, ma se puzzano rispetto al loro valore, possono diminuire il R-quadrato regolato, che è una misura migliore da usare per guardare il dollaro.
LSC

"più termini non diminuiranno mai R-quadrato" <- Questa affermazione è falsa, quando si calcola R2 fuori campione.
Zach

Come ho già detto, lo sto sottolineando perché molte persone che fanno queste domande non ricordano questa idea in primo luogo. Penso che capire perché questo sia vero nel campione e potrebbe non trattenere nuovi dati sia importante per capire cosa e come qualcosa è ottimizzato nell'equazione originale.
LSC

4

Concordo con Zach sul fatto che l'idea migliore è convalidare in modo incrociato entrambi i modelli e quindi confrontare gli s, ad esempio raccogliendo i valori da ogni piega e confrontando i vettori risultanti con il test di Wilcoxon (accoppiato per k-fold, non accoppiato per casuale CV).R2

L'opzione laterale è quella di utilizzare tutta la selezione delle funzionalità rilevanti, ciò che ti direbbe quali attributi hanno la possibilità di essere significativamente utili per la classificazione, quindi il tempo è valsa il loro prezzo per quegli attributi costosi. Può essere fatto ad esempio con un wrapper RF, Boruta .


per un test accoppiato, presumo che i 2 modelli si adattino alle stesse pieghe? In modo che le k righe della matrice siano le pieghe e le due colonne siano il modello 1 e il modello 2?
B_Miner il

@B_Miner Precisely.

1

Potresti pensare in termini di significato pratico piuttosto che di significato statistico (o entrambi). Con dati sufficienti puoi trovare statisticamente elementi significativi che non avranno alcun impatto reale sul tuo utilizzo. Ricordo di aver analizzato un modello una volta in cui le interazioni a 5 vie erano statisticamente significative, ma quando le previsioni dal modello, incluso tutto, fino alle interazioni a 5 vie, venivano confrontate con le previsioni di un modello, comprese solo le interazioni a 2 vie e gli effetti principali , la differenza maggiore era inferiore a 1 persona (la risposta era il numero di persone e tutti i valori interessanti erano lontani da 0). Quindi la complessità aggiunta non ne valeva la pena. Quindi osserva le differenze nelle tue previsioni per vedere se le differenze sono sufficienti per giustificare il costo aggiuntivo, se no, allora perché preoccuparsi di cercare il significato statistico? Se le differenze sono abbastanza grandi da giustificare il costo se sono reali, allora secondo le altre congetture sull'uso della convalida incrociata.


1

Un'opzione sarebbe quella di creare un intervallo di confidenza per l'errore quadratico medio. Vorrei usare l'errore quadratico medio invece di poiché il denominatore è lo stesso per entrambi i modelli. L'articolo di Dudoit e van der Laan ( articolo e documento di lavoro ) fornisce un teorema generale per la costruzione di un intervallo di confidenza per qualsiasi stimatore del rischio. Utilizzando l'esempio dai dati dell'iride, ecco un codice R che crea un intervallo di confidenza al 95% usando il metodo:R2

library(randomForest)
data(iris)
set.seed(42)

# split the data into training and testing sets
index <- 1:nrow(iris)
trainindex <- sample(index, trunc(length(index)/2))
trainset <- iris[trainindex, ]
testset <- iris[-trainindex, ]

# with species
model1 <- randomForest(Sepal.Length ~ Sepal.Width + Petal.Length +
   Petal.Width + Species, data = trainset)
# without species
model2 <- randomForest(Sepal.Length ~ Sepal.Width + Petal.Length + 
   Petal.Width, data = trainset)

pred1 <- predict(model1, testset[, -1])
pred2 <- predict(model2, testset[, -1])

y <- testset[, 1]
n <- length(y)

# psi is the mean squared prediction error (MSPE) estimate
# sigma2 is the estimate of the variance of the MSPE
psi1 <- mean((y - pred1)^2)
sigma21 <- 1/n * var((y - pred1)^2) 
# 95% CI:
c(psi1 - 1.96 * sqrt(sigma21), psi1, psi1 + 1.96 * sqrt(sigma21))

psi2 <- mean((y - pred2)^2)
sigma22 <- 1/n * var((y - pred2)^2) 
# 95% CI:
c(psi2 - 1.96 * sqrt(sigma22), psi2, psi2 + 1.96 * sqrt(sigma22))

Il metodo può anche essere esteso per funzionare all'interno della validazione incrociata (non solo la suddivisione del campione come mostrato sopra).


0

Dato che stai già utilizzando randomForestdopo la convalida incrociata, potresti emettere il calcolo dell'adattamento scelto dei valori di importanza del predittore.

> require(randomForest)
> rf.fit = randomForest(Species~.,data=iris,importance=TRUE)
> rf.fit$importance
                  setosa   versicolor   virginica MeanDecreaseAccuracy MeanDecreaseGini
Sepal.Length 0.036340893  0.021013369 0.032345037          0.030708732         9.444598
Sepal.Width  0.005399468 -0.002131412 0.007499143          0.003577089         2.046650
Petal.Length 0.319872296  0.297426025 0.290278930          0.299795555        42.494972
Petal.Width  0.343995456  0.309455331 0.277644128          0.307843300        45.286720

0

Vedo che questa domanda è stata posta molto tempo fa; tuttavia, nessuna risposta indica ancora le significative carenze e incomprensioni nella domanda.

Notare che:

  1. Si afferma che R ^ 2 = ESS / TSS = 1 - RSS / TSS. Questo è vero solo in un contesto lineare. L'uguaglianza TSS = RSS + ESS è valida solo nella regressione lineare con intercetta. Pertanto non è possibile utilizzare tali definizioni per foreste casuali in modo intercambiabile. Questo è il motivo per cui RMSE e simili sono funzioni di perdita più tipiche.

  2. Ancora più importante a fini statistici: R ^ 2 segue una distribuzione sconosciuta (anche nell'impostazione lineare). Ciò significa che testare un'ipotesi con significato statistico usando R ^ 2 non è così semplice. La convalida incrociata, come menzionato da Zach , è una buona scelta.

Per quanto riguarda la risposta dell'utente88 : la convalida incrociata con il test Wilcoxon è un approccio valido. Un recente articolo utilizza i test dei ranghi firmati Wilcoxon e i test di Friedman per il confronto di diversi metodi e algoritmi.

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.