Bagging e Foreste Casuali con R Emanuele Taufer file:///c:/users/emanuele.taufer/google%20drive/2%20corsi/3%20sqg/labs/l8-bagging-fc.html#(10) 1/10
Bagging e Foreste casuali con R Utilizziamo ancora una volta il dataset Hitters della libreria ISLR per illustrare come implementare le tecniche descritte con R. Il data set contiene in totale 20 variabili. Per fare Bagging e costruire Foreste casuali è necessaria la libreria randomforest. library(randomforest) library(islr) data(hitters) Hitters<-Hitters[complete.cases(Hitters),] file:///c:/users/emanuele.taufer/google%20drive/2%20corsi/3%20sqg/labs/l8-bagging-fc.html#(10) 2/10
Bagging Bagging è un caso speciale di una foresta casuale dove m = p. La funzione randomforest() dalla libreria randomforest può essere usata per costruire un modello bagged oppure una foresta casuale. set.seed (1) bag.hitters=randomforest(salary~.,data=hitters, mtry=19, importance =TRUE, ntree=2000) mtry=19: si specifica di utilizzare tutti i 19 predittori del dataset ad ogni split degli alberi (nel caso di foresta casuale ridurremo il numero di predittori da considerare) importance=true : si chiede di costruire le misure d influenza delle variabili ntree=2000: numero di campioni bootstrap ( B) file:///c:/users/emanuele.taufer/google%20drive/2%20corsi/3%20sqg/labs/l8-bagging-fc.html#(10) 3/10
Output bag.hitters ## ## Call: ## randomforest(formula = Salary ~., data = Hitters, mtry = 19, importance = TRUE ## Type of random forest: regression ## Number of trees: 2000 ## No. of variables tried at each split: 19 ## ## Mean of squared residuals: 80866.74 ## % Var explained: 60.11 file:///c:/users/emanuele.taufer/google%20drive/2%20corsi/3%20sqg/labs/l8-bagging-fc.html#(10) 4/10
Foresta casuale Per far crescere una foresta casuale si procede nello stesso modo eccetto che si utilizza un valore di mtry inferiore a p. Per impostazione predefinita, randomforest() usa: p/3 variabili per le foreste di alberi di regressione p variabili per le foreste di alberi di classificazione. In questo caso specifichiamo direttamente mtry = 6. set.seed (1) rf.hitters =randomforest(salary~.,data=hitters, ntree=2000, mtry=6, importance =TRUE) file:///c:/users/emanuele.taufer/google%20drive/2%20corsi/3%20sqg/labs/l8-bagging-fc.html#(10) 5/10
Output rf.hitters ## ## Call: ## randomforest(formula = Salary ~., data = Hitters, ntree = 2000, mtry = 6, impo ## Type of random forest: regression ## Number of trees: 2000 ## No. of variables tried at each split: 6 ## ## Mean of squared residuals: 78755.25 ## % Var explained: 61.15 file:///c:/users/emanuele.taufer/google%20drive/2%20corsi/3%20sqg/labs/l8-bagging-fc.html#(10) 6/10
Statistiche d influenza R riporta due misure d influenza: una basata sul decremento medio nella precisione delle previsioni nel campione OOB quando una certa variabile è esclusa dal modello. un altra basata sull incemento della purezza del nodo che risulta dallo split con una certa variabile. Nel caso di alberi di regressione, la purezza del nodo è misurata con RSS (RSS diminuisce all aumentare della purezza); per gli alberi di classificazione si usa l indice di Gini. importance(rf.hitters) ## %IncMSE IncNodePurity ## AtBat 15.3572974 2576178.7 ## Hits 13.3401652 3221356.4 ## HmRun 8.4316516 1414497.3 ## Runs 12.2022456 2624893.8 ## RBI 10.5361186 3785319.1 ## Walks 9.7340375 3837767.6 ## Years 15.3785260 1237828.0 ## CAtBat 24.8209359 5108956.7 ## CHits 29.0801370 6815114.4 ## CHmRun 16.4601432 2955894.6 ## CRuns 23.3951026 5231722.0 ## CRBI 21.9441825 6026892.0 ## CWalks 15.1699499 3107771.2 ## League -1.9024760 108708.8 ## Division -1.3730803 167623.5 ## PutOuts 8.1726948 2270897.5 ## Assists -0.2716656 695372.2 ## Errors 2.7525188 637234.0 ## NewLeague 1.2432180 116661.1 file:///c:/users/emanuele.taufer/google%20drive/2%20corsi/3%20sqg/labs/l8-bagging-fc.html#(10) 7/10
Grafico Utilizzare la funzione varimpplot() per riportare graficamente le variabili d influenza. varimpplot(rf.hitters,pch=19,cex=1.5,col="blue",lwd=2) file:///c:/users/emanuele.taufer/google%20drive/2%20corsi/3%20sqg/labs/l8-bagging-fc.html#(10) 8/10
Previsione con le foreste casuali Per fare previsioni dato un insieme di predittori, possiamo usare la funzione predict() Proviamo a confrontare il salario effettivo con quello previsto dal modello per cinque giocatori presi a caso: 1. Selezioniamo 5 giocatori casualmente (osserviamo solo alcune variabili) set.seed(5) R.players<-Hitters[sample(nrow(Hitters),5),] R.players[,c(2,7,19)] ## Hits Years Salary ## -Dave Concepcion 81 17 320.00 ## -Mike Young 93 5 350.00 ## -Tim Hulett 120 4 185.00 ## -Dave Winfield 148 14 1861.46 ## -Brook Jacoby 168 5 612.50 file:///c:/users/emanuele.taufer/google%20drive/2%20corsi/3%20sqg/labs/l8-bagging-fc.html#(10) 9/10
2. Facciamo la previsione (definiamo l oggetto contenente i risultati direttamente come variabile del data.frame R.players) R.players$Pred.Salary<-predict(rf.Hitters,R.players) 3. Compariamo i valori R.players[,c(2,7,19,21)] ## Hits Years Salary Pred.Salary ## -Dave Concepcion 81 17 320.00 423.0378 ## -Mike Young 93 5 350.00 330.8263 ## -Tim Hulett 120 4 185.00 191.7850 ## -Dave Winfield 148 14 1861.46 1659.9885 ## -Brook Jacoby 168 5 612.50 573.9683 file:///c:/users/emanuele.taufer/google%20drive/2%20corsi/3%20sqg/labs/l8-bagging-fc.html#(10) 10/10