Satunnainen metsä R-opetusohjelmassa: Algoritmi esimerkin kanssa
⚡ Älykäs yhteenveto
R:n Random Forest rakentaa satoja päätöspuita bootstrappeilla käsitellyistä näytteistä ja laskee niiden äänten keskiarvon yhdeksi vankaksi ennusteeksi. Tämä läpikäynti säätää mtry:tä, maxnodesia ja ntree:tä caret-komennolla ja arvioi lopullisen mallin Titanicin selviytymisdatan perusteella.
Mikä on Random Forest R:ssä?
Satunnaiset metsät perustuvat yksinkertaiseen ajatukseen: "joukon viisaudelle". Useiden ennustajien tulosten aggregaatti antaa paremman ennusteen kuin paras yksittäinen ennustaja. Ennustajien ryhmää kutsutaan an kokonaisuus. Siksi tätä tekniikkaa kutsutaan Yhtye-oppiminen.
Aiemmassa opetusohjelmassa opit käyttämään päätöksentekopuut tehdä binäärinen ennustus. Tekniikkamme parantamiseksi voimme kouluttaa ryhmän Päätöspuun luokittimet, jokainen eri satunnaisella junajoukon osajoukolla. Ennusteen tekemiseksi keräät kaikkien yksittäisten puiden ennusteet ja palautat luokan, joka saa eniten ääniä. Tätä tekniikkaa kutsutaan Satunnainen metsä.
Ennen minkään koodin kirjoittamista on hyödyllistä nähdä tarkalleen, miten metsä kootaan näistä yksittäisistä puista.
Miten satunnainen metsä toimii R:ssä?
Mekaniikan ymmärtäminen helpottaa jokaisen viritysparametrin perusteluja. Satunnaismetsä rakennetaan neljässä vaiheessa.
- Bootstrap näytteenotto. Algoritmi ottaa satunnaisen otoksen riveistä vaihdon kanssa jokaisen puun harjoitusjoukosta. Noin kolmannes riveistä jätetään pois kustakin otoksesta; nämä ovat pussin ulkopuolisia (OOB) havaintoja.
- Satunnainen ominaisuuksien valinta. Jokaisessa jaossa otetaan huomioon vain satunnainen osajoukko ennustajista. Tämän osajoukon koko on mtry parametri. Valinnan rajoittaminen estää kaikkia puita näyttämästä samanlaisilta.
- Leikkaamattoman puun kasvu. Jokainen puu kasvaa, kunnes se pysähtyyping sääntö, kuten maxnodes or solmukokoYksittäisten puiden annetaan tarkoituksella ylisovittua, koska niiden virheet ovat korreloimattomia.
- Yhteenlasku. Luokittelussa metsä palauttaa eniten ääniä saaneen luokan; regressiossa se palauttaa keskimääräisen ennusteen. Tätä keskiarvoaskelta käytetään termillä pussitus (bootstrap-aggregointi) kuvaa.
Rivi- ja sarakeotanta on koko homman juju. Yhdellä syvällä puulla on pieni harha ja erittäin suuri varianssi; satojen puuden keskiarvon laskeminen pitää harhan pienenä ja samalla pienentää varianssia.
Laukun loppumisvirhe. Koska jokainen havainto on jätetty pois noin kolmasosasta puista, R voi pisteyttää jokaisen rivin käyttämällä vain niitä puita, jotka eivät koskaan nähneet sitä. Tuloksena oleva OOB-virhe on vapaa, sisäänrakennettu validointiarvio, jonka tulostaa randomForest():
rf_oob <- randomForest(survived~., data = data_train, ntree = 800, mtry = 4) print(rf_oob) # reports the OOB estimate of error rate
OOB-virhe on kätevä pikatarkistus, mutta tässä tutoriaalissa käytetään kymmenkertaista ristiinvalidointia sirkumfleksin avulla, joten jokaista viritysruudukkoa verrataan identtisillä taitoksilla.
Satunnainen metsä vs. päätöspuu R:ssä
Satunnainen metsä on samanlaisten asioiden kokonaisuus päätöksentekopuut käsiteltiin edellisessä opetusohjelmassa, joten erot kannattaa mainita selvästi ennen kuin valitset niiden välillä.
| Kriteeri | Päätöspuu | Satunnainen metsä |
|---|---|---|
| Tuote mallit | Yksi puu | Satoja puita yhdistettiin äänestämällä |
| vaihtelu | Korkea, erittäin herkkä harjoitusnäytteelle | Matala, keskiarvoistava vaikutus poistaa yksittäiset virheet |
| Ylisovitusriski | Korkea, ellei leikata | Matala jopa leikkaamattomilla puilla |
| tulkittavuutta | Täysin luettava vuokaaviona | Vain muuttujien tärkeys on luettavissa |
| Koulutuksen kustannukset | Erittäin nopea | Verrannollinen ntree-arvoon |
| Sisäänrakennettu validointi | Ei eristetty | Laukun ulkopuolisen virheen arvio |
| R-toiminto | rpart() | satunnainenMetsä() |
Valitse yksi puu, kun sinun on selitettävä päätöksentekopolku ei-tekniselle yleisölle. Valitse metsä, kun ennustustarkkuus on tärkeämpää kuin luettava kaavio.
Satunnaisen metsän edut ja haitat
Algoritmin vahvuuden ja heikkouden tunteminen kertoo, milloin tuleva viritystyö on vaivan arvoista.
edut
- Tarkkuus ilman karsimista: Useiden korreloimattomien puiden keskiarvon laskeminen antaa vahvoja tuloksia hyvin vähäisellä manuaalisella säädöllä.
- Ylisovituksen kestävä: Useamman puun lisääminen ei koskaan lisää yleistysvirhettä, joten ntree-muuttujaa voidaan käyttää turvallisesti.
- Käsittelee sekadataa: numeeriset ja tekijäennustajat toimivat rinnakkain, eikä skaalausta tarvita.
- Ilmainen validointi ja sijoitus: OOB-virhe ja varImp() eivät aiheuta ylimääräisiä laskentakustannuksia.
Haitat
- Läpinäkymättömät ennusteet: et voi tracyksi ainoa päätöksentekopolku, jolla on merkitystä säännellyissä ympäristöissä.
- Hidas suurissa metsissä: koulutus- ja ennustusaikaskaala lineaarisesti puiden lukumäärän kanssa.
- Puolueelliset tärkeyspisteet: Useilla tasoilla varustetut kategoriset muuttujat voivat näyttää tärkeämmiltä kuin ne todellisuudessa ovat.
- Heikko ekstrapolointi: regressiossa metsä ei voi koskaan ennustaa harjoittelussa havaitun alueen ulkopuolella.
Kun teoria ja kompromissit on selvitetty, seuraavat kuusi vaihetta rakentavat, virittävät ja arvioivat satunnaisen metsän päästä päähän Titanicin selviytymisaineistosta.
Vaihe 1) Tuo tiedot
Varmistaaksesi, että sinulla on sama tietojoukko kuin opetusohjelmassa päätöksentekopuut, junayksikkö ja testiyksikkö sijaitsevat verkossa. Voit tuoda ne tekemättä muutoksia.
library(dplyr) data_train <- read.csv("https://raw.githubusercontent.com/guru99-edu/R-Programming/master/train.csv") glimpse(data_train) data_test <- read.csv("https://raw.githubusercontent.com/guru99-edu/R-Programming/master/test.csv") glimpse(data_test)
Vaihe 2) Kouluta malli
Yksi tapa arvioida mallin suorituskykyä on kouluttaa sitä useilla eri pienemmillä tietojoukoilla ja arvioida niitä muiden pienempien testijoukkojen avulla. Tätä kutsutaan k-kertainen ristivalidointi. R sisältää funktion, joka jakaa datan satunnaisesti k:aan lähes samankokoiseen osajoukkoon. Esimerkiksi, jos k = 10, mallia koulutetaan yhdeksällä taitolla ja arvioidaan jäljellä olevalla taitolla. Tätä prosessia toistetaan, kunnes kaikki osajoukot on arvioitu. Tätä tekniikkaa käytetään laajalti mallin valintaan, erityisesti silloin, kun mallilla on viritettäviä parametreja.
Nyt kun meillä on tapa arvioida malliamme, meidän on päätettävä, mitkä parametrit yleistyvät parhaiten näkymättömään dataan.
Satunnainen metsä valitsee satunnaisen osajoukon ominaisuuksia ja rakentaa useita päätöspuita. Malli laskee keskiarvon kaikista päätöspuiden ennusteista.
Satunnaismetsässä on joitakin parametreja, joita voidaan muuttaa ennusteen yleistyksen parantamiseksi. Mallia koulutetaan randomForest()-funktiolla.
randomForest():n syntaksi on:
randomForest(formula, ntree=n, mtry=FALSE, maxnodes = NULL) Arguments: - Formula: Formula of the fitted model - ntree: number of trees in the forest - mtry: Number of candidate variables drawn at each split. By default, it is the square root of the number of predictors for classification. - maxnodes: Set the maximum number of terminal nodes each tree can have - importance=TRUE: Whether independent variables importance in the random forest be assessed
Huomautuksia: Satunnaista metsää voidaan kouluttaa useammille parametreille. Voit viitata vinjetti nähdäksesi eri parametrit.
Mallin virittäminen on työlästä työtä. Parametrien yhdistelmiä on monia. Sinulla ei välttämättä ole aikaa kokeilla niitä kaikkia. Hyvä vaihtoehto on antaa koneen löytää paras yhdistelmä puolestasi. Käytettävissä on kaksi menetelmää:
- Satunnainen haku
- Ruudukkohaku
Molemmat menetelmät on määritelty alla, mutta tässä tutoriaalissa mallia koulutetaan ruudukkohaun avulla.
Ruudukkohaun määritelmä
Ruudukkohakumenetelmä on yksinkertainen, mallia arvioidaan ristiinvalidoinnin avulla kaikkien funktiossa välitettyjen yhdistelmän osalta.
Haluat esimerkiksi kokeilla mallia, jossa on 10, 20, 30 puuta, ja jokainen puu testataan usealla mtry:llä, joka on 1, 2, 3, 4, 5. Sitten kone testaa 15 eri mallia:
.mtry ntrees 1 1 10 2 2 10 3 3 10 4 4 10 5 5 10 6 1 20 7 2 20 8 3 20 9 4 20 10 5 20 11 1 30 12 2 30 13 3 30 14 4 30 15 5 30
Algoritmi arvioi:
randomForest(formula, ntree=10, mtry=1) randomForest(formula, ntree=10, mtry=2) randomForest(formula, ntree=10, mtry=3) randomForest(formula, ntree=20, mtry=2) ...
Jokainen yhdistelmä arvioidaan ristivalidoinnilla. Ruudukkohaun heikkous on kokeiden määrä: se kasvaa räjähdysmäisesti, kun yhdistelmien määrä on suuri. Tämän ongelman voi ratkaista käyttämällä satunnaishakua.
Satunnaishaun määritelmä
Suurin ero satunnaishaun ja ruudukkohaun välillä on se, että satunnaishaku ei arvioi kaikkia hyperparametrien yhdistelmiä hakuavaruudessa. Sen sijaan se valitsee satunnaisen yhdistelmän jokaisella iteraatiolla. Etuna on paljon pienemmät laskentakustannukset.
Aseta ohjausparametri
Rakennat ja arvioit mallin seuraavasti:
- Arvioi malli oletusasetuksilla
- Etsi paras määrä mtry
- Etsi paras määrä maxnodeja
- Etsi paras määrä puita
- Arvioi malli testitietojoukosta
Ennen kuin aloitat parametrien tutkimisen, sinun on asennettava kaksi kirjastoa.
- caret: R koneoppimiskirjasto. Jos sinulla on asenna R r-essentialin kanssa. Se on jo kirjastossa
- Anaconda: conda install -cr r-caret
- e1071: R-koneoppimiskirjasto.
- Anaconda: conda install -cr r-e1071
Voit tuoda ne yhdessä randomForestin kanssa:
library(randomForest) library(caret) library(e1071)
Oletusasetus
K-kertaista ristiinvalidointia ohjaa trainControl()-funktio
trainControl(method = "cv", number = n, search ="grid") arguments - method = "cv": The method used to resample the dataset. - number = n: Number of folds to create - search = "grid": Use the grid search method. For the randomized method, use "random" Note: You can refer to the vignette to see the other arguments of the function.
Voit yrittää ajaa mallia oletusparametreilla ja nähdä tarkkuuspisteet.
Huomautuksia: Käytät samoja säätimiä koko opetusohjelman ajan.
# Define the control trControl <- trainControl(method = "cv", number = 10, search = "grid")
Arvioi mallisi Caret-kirjaston avulla. Kirjastossa on yksi funktio nimeltä train() arvioimaan lähes kaikki koneoppiminen algoritmi. Sano toisin, voit käyttää tätä toimintoa muiden algoritmien opettamiseen.
Perussyntaksi on:
train(formula, df, method = "rf", metric= "Accuracy", trControl = trainControl(), tuneGrid = NULL) argument - `formula`: Define the formula of the algorithm - `method`: Define which model to train. Note, at the end of the tutorial, there is a list of all the models that can be trained - `metric` = "Accuracy": Define how to select the optimal model - `trControl = trainControl()`: Define the control parameters - `tuneGrid = NULL`: Return a data frame with all the possible combination
Rakennetaan malli oletusarvoilla.
set.seed(1234) # Run the model rf_default <- train(survived~., data = data_train, method = "rf", metric = "Accuracy", trControl = trControl) # Print the results print(rf_default)
Code Selitys
- trainControl(method=”cv”, number=10, search=”grid”): Arvioi mallia ruudukkohaulla 10 taittokerran yli
- juna(…): Harjoittele satunnainen metsämalli. Paras malli valitaan tarkkuusmittauksella.
lähtö:
## Random Forest ## ## 836 samples ## 7 predictor ## 2 classes: 'No', 'Yes' ## ## No pre-processing ## Resampling: Cross-Validated (10 fold) ## Summary of sample sizes: 753, 752, 753, 752, 752, 752, ... ## Resampling results across tuning parameters: ## ## mtry Accuracy Kappa ## 2 0.7919248 0.5536486 ## 6 0.7811245 0.5391611 ## 10 0.7572002 0.4939620 ## ## Accuracy was used to select the optimal model using the largest value. ## The final value used for the model was mtry = 2.
Algoritmi käyttää 500 puuta ja testasi kolmea erilaista mtry-arvoa: 2, 6, 10.
Mallissa käytetty lopullinen arvo oli mtry = 2, jonka ristiinvalidoitu tarkkuus oli 0.792. Yritetään saada korkeampi pistemäärä.
Hae parhaita mtry-sivustoja
Voit testata mallia mtry-arvoilla 1-10
set.seed(1234) tuneGrid <- expand.grid(.mtry = c(1: 10)) rf_mtry <- train(survived~., data = data_train, method = "rf", metric = "Accuracy", tuneGrid = tuneGrid, trControl = trControl, importance = TRUE, nodesize = 14, ntree = 300) print(rf_mtry)
Code Selitys
- tuneGrid <- expand.grid(.mtry = c(1:10)): Luo vektori arvoilla 1-10
lähtö:
## Random Forest ## ## 836 samples ## 7 predictor ## 2 classes: 'No', 'Yes' ## ## No pre-processing ## Resampling: Cross-Validated (10 fold) ## Summary of sample sizes: 753, 752, 753, 752, 752, 752, ... ## Resampling results across tuning parameters: ## ## mtry Accuracy Kappa ## 1 0.7572576 0.4647368 ## 2 0.7979346 0.5662364 ## 3 0.8075158 0.5884815 ## 4 0.8110729 0.5970664 ## 5 0.8074727 0.5900030 ## 6 0.8099111 0.5949342 ## 7 0.8050918 0.5866415 ## 8 0.8050918 0.5855399 ## 9 0.8050631 0.5855035 ## 10 0.7978916 0.5707336 ## ## Accuracy was used to select the optimal model using the largest value. ## The final value used for the model was mtry = 4.
mtry:n paras arvo on 4. Se tallennetaan kansioon:
rf_mtry$bestTune$mtry
Voit tallentaa sen ja käyttää sitä, kun haluat virittää muita parametreja.
max(rf_mtry$results$Accuracy)
lähtö:
## [1] 0.8110729
best_mtry <- rf_mtry$bestTune$mtry best_mtry
lähtö:
## [1] 4
Vaihe 3) Etsi parhaat maxsolmut
Sinun on luotava silmukka arvioidaksesi maxnode-arvoja. Seuraavassa koodissa saat:
- Luo luettelo
- Luo muuttuja, jolla on paras parametrin arvo mtry; Pakollinen
- Luo silmukka
- Tallenna maxnoden nykyinen arvo
- Tee yhteenveto tuloksista
store_maxnode <- list() tuneGrid <- expand.grid(.mtry = best_mtry) for (maxnodes in c(5: 15)) { set.seed(1234) rf_maxnode <- train(survived~., data = data_train, method = "rf", metric = "Accuracy", tuneGrid = tuneGrid, trControl = trControl, importance = TRUE, nodesize = 14, maxnodes = maxnodes, ntree = 300) current_iteration <- toString(maxnodes) store_maxnode[[current_iteration]] <- rf_maxnode } results_mtry <- resamples(store_maxnode) summary(results_mtry)
Code selitys:
- store_maxnode <- list(): Mallin tulokset tallennetaan tähän luetteloon
- expand.grid(.mtry=best_mtry): Käytä mtry:n parasta arvoa
- for (maxnodes in c(5:15)) { … }: Laske malli maxnodes-arvoilla 5–15.
- maxnodes = maxnodes: Jokaisella iteraatiolla maxnodes on yhtä suuri kuin nykyisen silmukan arvo, eli 5, 6, 7, …
- current_iteration <- toString(maxnodes): Tallentaa maxnodes-muuttujalle arvon merkkijonona.
- store_maxnode[[current_iteration]] <- rf_maxnode: Tallentaa mallin tuloksen listaan.
- resamples(store_maxnode): Järjestä mallin tulokset
- summary(results_mtry): Tulosta yhteenveto kaikesta yhdistelmästä.
lähtö:
## ## Call: ## summary.resamples(object = results_mtry) ## ## Models: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ## Number of resamples: 10 ## ## Accuracy ## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's ## 5 0.6785714 0.7529762 0.7903758 0.7799771 0.8168388 0.8433735 0 ## 6 0.6904762 0.7648810 0.7784710 0.7811962 0.8125000 0.8313253 0 ## 7 0.6904762 0.7619048 0.7738095 0.7788009 0.8102410 0.8333333 0 ## 8 0.6904762 0.7627295 0.7844234 0.7847820 0.8184524 0.8433735 0 ## 9 0.7261905 0.7747418 0.8083764 0.7955250 0.8258749 0.8333333 0 ## 10 0.6904762 0.7837780 0.7904475 0.7895869 0.8214286 0.8433735 0 ## 11 0.7023810 0.7791523 0.8024240 0.7943775 0.8184524 0.8433735 0 ## 12 0.7380952 0.7910929 0.8144005 0.8051205 0.8288511 0.8452381 0 ## 13 0.7142857 0.8005952 0.8192771 0.8075158 0.8403614 0.8452381 0 ## 14 0.7380952 0.7941050 0.8203528 0.8098967 0.8403614 0.8452381 0 ## 15 0.7142857 0.8000215 0.8203528 0.8075301 0.8378873 0.8554217 0 ## ## Kappa ## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's ## 5 0.3297872 0.4640436 0.5459706 0.5270773 0.6068751 0.6717371 0 ## 6 0.3576471 0.4981484 0.5248805 0.5366310 0.6031287 0.6480921 0 ## 7 0.3576471 0.4927448 0.5192771 0.5297159 0.5996437 0.6508314 0 ## 8 0.3576471 0.4848320 0.5408159 0.5427127 0.6200253 0.6717371 0 ## 9 0.4236277 0.5074421 0.5859472 0.5601687 0.6228626 0.6480921 0 ## 10 0.3576471 0.5255698 0.5527057 0.5497490 0.6204819 0.6717371 0 ## 11 0.3794326 0.5235007 0.5783191 0.5600467 0.6126720 0.6717371 0 ## 12 0.4460432 0.5480930 0.5999072 0.5808134 0.6296780 0.6717371 0 ## 13 0.4014252 0.5725752 0.6087279 0.5875305 0.6576219 0.6678832 0 ## 14 0.4460432 0.5585005 0.6117973 0.5911995 0.6590982 0.6717371 0 ## 15 0.4014252 0.5689401 0.6117973 0.5867010 0.6507194 0.6955990 0
Tämän alueen korkein keskimääräinen tarkkuus (0.8099) on testattavan aikavälin yläosassa, kun maxnodes = 14. Koska paras arvo on ruudukon reunalla, hakua tulisi laajentaa ylöspäin.
store_maxnode <- list() tuneGrid <- expand.grid(.mtry = best_mtry) for (maxnodes in c(20: 30)) { set.seed(1234) rf_maxnode <- train(survived~., data = data_train, method = "rf", metric = "Accuracy", tuneGrid = tuneGrid, trControl = trControl, importance = TRUE, nodesize = 14, maxnodes = maxnodes, ntree = 300) key <- toString(maxnodes) store_maxnode[[key]] <- rf_maxnode } results_node <- resamples(store_maxnode) summary(results_node)
lähtö:
## ## Call: ## summary.resamples(object = results_node) ## ## Models: 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 ## Number of resamples: 10 ## ## Accuracy ## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's ## 20 0.7142857 0.7821644 0.8144005 0.8075301 0.8447719 0.8571429 0 ## 21 0.7142857 0.8000215 0.8144005 0.8075014 0.8403614 0.8571429 0 ## 22 0.7023810 0.7941050 0.8263769 0.8099254 0.8328313 0.8690476 0 ## 23 0.7023810 0.7941050 0.8263769 0.8111302 0.8447719 0.8571429 0 ## 24 0.7142857 0.7946429 0.8313253 0.8135112 0.8417599 0.8690476 0 ## 25 0.7142857 0.7916667 0.8313253 0.8099398 0.8408635 0.8690476 0 ## 26 0.7142857 0.7941050 0.8203528 0.8123207 0.8528758 0.8571429 0 ## 27 0.7023810 0.8060456 0.8313253 0.8135112 0.8333333 0.8690476 0 ## 28 0.7261905 0.7941050 0.8203528 0.8111015 0.8328313 0.8690476 0 ## 29 0.7142857 0.7910929 0.8313253 0.8087063 0.8333333 0.8571429 0 ## 30 0.6785714 0.7910929 0.8263769 0.8063253 0.8403614 0.8690476 0 ## ## Kappa ## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's ## 20 0.3956835 0.5316120 0.5961830 0.5854366 0.6661120 0.6955990 0 ## 21 0.3956835 0.5699332 0.5960343 0.5853247 0.6590982 0.6919315 0 ## 22 0.3735084 0.5560661 0.6221836 0.5914492 0.6422128 0.7189781 0 ## 23 0.3735084 0.5594228 0.6228827 0.5939786 0.6657372 0.6955990 0 ## 24 0.3956835 0.5600352 0.6337821 0.5992188 0.6604703 0.7189781 0 ## 25 0.3956835 0.5530760 0.6354875 0.5912239 0.6554912 0.7189781 0 ## 26 0.3956835 0.5589331 0.6136074 0.5969142 0.6822128 0.6955990 0 ## 27 0.3735084 0.5852459 0.6368425 0.5998148 0.6426088 0.7189781 0 ## 28 0.4290780 0.5589331 0.6154905 0.5946859 0.6356141 0.7189781 0 ## 29 0.4070588 0.5534173 0.6337821 0.5901173 0.6423101 0.6919315 0 ## 30 0.3297872 0.5534173 0.6202632 0.5843432 0.6590982 0.7189781 0
Korkein keskiarvon tarkkuus, 0.8135, saadaan arvolla maxnodes = 24 (maxnodes = 27 on sama kuin keskiarvo, mutta sen kolmas kvartiili on alempi). Siksi käytät arvoa maxnodes = 24 jäljellä olevissa vaiheissa.
Vaihe 4) Etsi parhaat puut
Nyt kun sinulla on paras arvo mtry:lle ja maxnodelle, voit säätää puiden määrää. Menetelmä on täsmälleen sama kuin maxnode.
store_maxtrees <- list() for (ntree in c(250, 300, 350, 400, 450, 500, 550, 600, 800, 1000, 2000)) { set.seed(5678) rf_maxtrees <- train(survived~., data = data_train, method = "rf", metric = "Accuracy", tuneGrid = tuneGrid, trControl = trControl, importance = TRUE, nodesize = 14, maxnodes = 24, ntree = ntree) key <- toString(ntree) store_maxtrees[[key]] <- rf_maxtrees } results_tree <- resamples(store_maxtrees) summary(results_tree)
lähtö:
## ## Call: ## summary.resamples(object = results_tree) ## ## Models: 250, 300, 350, 400, 450, 500, 550, 600, 800, 1000, 2000 ## Number of resamples: 10 ## ## Accuracy ## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's ## 250 0.7380952 0.7976190 0.8083764 0.8087010 0.8292683 0.8674699 0 ## 300 0.7500000 0.7886905 0.8024240 0.8027199 0.8203397 0.8452381 0 ## 350 0.7500000 0.7886905 0.8024240 0.8027056 0.8277623 0.8452381 0 ## 400 0.7500000 0.7886905 0.8083764 0.8051009 0.8292683 0.8452381 0 ## 450 0.7500000 0.7886905 0.8024240 0.8039104 0.8292683 0.8452381 0 ## 500 0.7619048 0.7886905 0.8024240 0.8062914 0.8292683 0.8571429 0 ## 550 0.7619048 0.7886905 0.8083764 0.8099062 0.8323171 0.8571429 0 ## 600 0.7619048 0.7886905 0.8083764 0.8099205 0.8323171 0.8674699 0 ## 800 0.7619048 0.7976190 0.8083764 0.8110820 0.8292683 0.8674699 0 ## 1000 0.7619048 0.7976190 0.8121510 0.8086723 0.8303571 0.8452381 0 ## 2000 0.7619048 0.7886905 0.8121510 0.8086723 0.8333333 0.8452381 0 ## ## Kappa ## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's ## 250 0.4061697 0.5667400 0.5836013 0.5856103 0.6335363 0.7196807 0 ## 300 0.4302326 0.5449376 0.5780349 0.5723307 0.6130767 0.6710843 0 ## 350 0.4302326 0.5449376 0.5780349 0.5723185 0.6291592 0.6710843 0 ## 400 0.4302326 0.5482030 0.5836013 0.5774782 0.6335363 0.6710843 0 ## 450 0.4302326 0.5449376 0.5780349 0.5750587 0.6335363 0.6710843 0 ## 500 0.4601542 0.5449376 0.5780349 0.5804340 0.6335363 0.6949153 0 ## 550 0.4601542 0.5482030 0.5857118 0.5884507 0.6396872 0.6949153 0 ## 600 0.4601542 0.5482030 0.5857118 0.5884374 0.6396872 0.7196807 0 ## 800 0.4601542 0.5667400 0.5836013 0.5910088 0.6335363 0.7196807 0 ## 1000 0.4601542 0.5667400 0.5961590 0.5857446 0.6343666 0.6678832 0 ## 2000 0.4601542 0.5482030 0.5961590 0.5862151 0.6440678 0.6656337 0
Sinulla on lopullinen mallisi. Voit harjoitella satunnaista metsää seuraavilla parametreilla:
- ntree = 800: 800 puuta koulutetaan
- mtry = 4: Jokaisella jaolla arvotaan 4 ehdokasominaisuutta
- maxnodes = 24: Jokainen puu on rajoitettu 24 päätesolmuun (lehteen)
fit_rf <- train(survived~., data_train, method = "rf", metric = "Accuracy", tuneGrid = tuneGrid, trControl = trControl, importance = TRUE, nodesize = 14, ntree = 800, maxnodes = 24)
Vaihe 5) Arvioi malli
Kirjastokartalla on ennustetoiminto.
predict(model, newdata= df)
argument
- `model`: Define the model evaluated before.
- `newdata`: Define the dataset to make prediction
prediction <-predict(fit_rf, data_test)
Voit käyttää ennustetta laskeaksesi sekavuusmatriisin ja nähdäksesi tarkkuuspisteet
confusionMatrix(prediction, data_test$survived)
lähtö:
## Confusion Matrix and Statistics ## ## Reference ## Prediction No Yes ## No 110 32 ## Yes 11 56 ## ## Accuracy : 0.7943 ## 95% CI : (0.733, 0.8469) ## No Information Rate : 0.5789 ## P-Value [Acc > NIR] : 3.959e-11 ## ## Kappa : 0.5638 ## Mcnemar's Test P-Value : 0.002289 ## ## Sensitivity : 0.9091 ## Specificity : 0.6364 ## Pos Pred Value : 0.7746 ## Neg Pred Value : 0.8358 ## Prevalence : 0.5789 ## Detection Rate : 0.5263 ## Detection Prevalence : 0.6794 ## Balanced Accuracy : 0.7727 ## ## 'Positive' Class : No ##
Malli saavuttaa 0.7943:n tarkkuuden eli 79.43 prosenttia näkymättömässä testijoukossa, mikä on korkeampi kuin oletuskonfiguraatiossa. Herkkyys on 0.9091 ja spesifisyys 0.6364, joten malli tunnistaa kuolleet paljon luotettavammin kuin selviytyjät.
Vaihe 6) Visualisoi tulos
Lopuksi voit tarkastella ominaisuuksien tärkeyttä varImp()-funktiolla. Tärkeimmät ominaisuudet ovat sukupuoli ja ikä. Tämä ei ole yllättävää, koska tärkeät ominaisuudet esiintyvät todennäköisemmin lähempänä puun juurta, kun taas vähemmän tärkeät ominaisuudet esiintyvät yleensä lähempänä lehtiä.
varImp(fit_rf)
lähtö:
## rf variable importance ## ## Importance ## sexmale 100.000 ## age 28.014 ## pclassMiddle 27.016 ## fare 21.557 ## pclassUpper 16.324 ## sibsp 11.246 ## parch 5.522 ## embarkedC 4.908 ## embarkedQ 1.420 ## embarkedS 0.000
Satunnainen metsä R:ssä: Pikaopas funktioille
Alla olevassa taulukossa luetellaan kaikki kuudessa vaiheessa käytetyt funktiot, niitä toimittava paketti ja niiden odottamat parametrit.
| Kirjasto | Tavoite | Toiminto | Parametri |
|---|---|---|---|
| satunnainen metsä | Luo satunnainen metsä | satunnainenMetsä() | kaava, ntree=n, mtry=FALSE, maxnodes = NULL |
| caret | Luo k-kertainen ristivalidointi | trainControl() | menetelmä = "cv", numero = n, haku = "ruudukko" |
| caret | Harjoittele satunnaista metsää | kouluttaa() | kaava, df, metodi = "rf", metriikka = "Tarkkuus", trControl = trainControl(), tuneGrid = NULL |
| caret | Ennusta pois näytteestä | ennustaa | malli, newdata= df |
| caret | Sekaannusmatriisi ja tilastot | confusionMatrix() | malli, y testi |
| caret | Vaihtuva merkitys | varImp() | malli |
Liite: Saatavilla olevat mallit, joissa on ikkuna
train()-funktio voi sovittaa paljon enemmän kuin satunnaisia metsiä. Suorita alla oleva komento tulostaaksesi kaikki mallitunnisteet, joita caret tukee, ja välitä sitten mikä tahansa niistä metodiargumentille.
names(getModelInfo())
lähtö:
## [1] "ada" "AdaBag" "AdaBoost.M1" ## [4] "adaboost" "amdai" "ANFIS" ## [7] "avNNet" "awnb" "awtan" ## [10] "bag" "bagEarth" "bagEarthGCV" ## [13] "bagFDA" "bagFDAGCV" "bam" ## [16] "bartMachine" "bayesglm" "binda" ## [19] "blackboost" "blasso" "blassoAveraged" ## [22] "bridge" "brnn" "BstLm" ## [25] "bstSm" "bstTree" "C5.0" ## [28] "C5.0Cost" "C5.0Rules" "C5.0Tree" ## [31] "cforest" "chaid" "CSimca" ## [34] "ctree" "ctree2" "cubist" ## [37] "dda" "deepboost" "DENFIS" ## [40] "dnn" "dwdLinear" "dwdPoly" ## [43] "dwdRadial" "earth" "elm" ## [46] "enet" "evtree" "extraTrees" ## [49] "fda" "FH.GBML" "FIR.DM" ## [52] "foba" "FRBCS.CHI" "FRBCS.W" ## [55] "FS.HGD" "gam" "gamboost" ## [58] "gamLoess" "gamSpline" "gaussprLinear" ## [61] "gaussprPoly" "gaussprRadial" "gbm_h3o" ## [64] "gbm" "gcvEarth" "GFS.FR.MOGUL" ## [67] "GFS.GCCL" "GFS.LT.RS" "GFS.THRIFT" ## [70] "glm.nb" "glm" "glmboost" ## [73] "glmnet_h3o" "glmnet" "glmStepAIC" ## [76] "gpls" "hda" "hdda" ## [79] "hdrda" "HYFIS" "icr" ## [82] "J48" "JRip" "kernelpls" ## [85] "kknn" "knn" "krlsPoly" ## [88] "krlsRadial" "lars" "lars2" ## [91] "lasso" "lda" "lda2" ## [94] "leapBackward" "leapForward" "leapSeq" ## [97] "Linda" "lm" "lmStepAIC" ## [100] "LMT" "loclda" "logicBag" ## [103] "LogitBoost" "logreg" "lssvmLinear" ## [106] "lssvmPoly" "lssvmRadial" "lvq" ## [109] "M5" "M5Rules" "manb" ## [112] "mda" "Mlda" "mlp" ## [115] "mlpKerasDecay" "mlpKerasDecayCost" "mlpKerasDropout" ## [118] "mlpKerasDropoutCost" "mlpML" "mlpSGD" ## [121] "mlpWeightDecay" "mlpWeightDecayML" "monmlp" ## [124] "msaenet" "multinom" "mxnet" ## [127] "mxnetAdam" "naive_bayes" "nb" ## [130] "nbDiscrete" "nbSearch" "neuralnet" ## [133] "nnet" "nnls" "nodeHarvest" ## [136] "null" "OneR" "ordinalNet" ## [139] "ORFlog" "ORFpls" "ORFridge" ## [142] "ORFsvm" "ownn" "pam" ## [145] "parRF" "PART" "partDSA" ## [148] "pcaNNet" "pcr" "pda" ## [151] "pda2" "penalized" "PenalizedLDA" ## [154] "plr" "pls" "plsRglm" ## [157] "polr" "ppr" "PRIM" ## [160] "protoclass" "pythonKnnReg" "qda" ## [163] "QdaCov" "qrf" "qrnn" ## [166] "randomGLM" "ranger" "rbf" ## [169] "rbfDDA" "Rborist" "rda" ## [172] "regLogistic" "relaxo" "rf" ## [175] "rFerns" "RFlda" "rfRules" ## [178] "ridge" "rlda" "rlm" ## [181] "rmda" "rocc" "rotationForest" ## [184] "rotationForestCp" "rpart" "rpart1SE" ## [187] "rpart2" "rpartCost" "rpartScore" ## [190] "rqlasso" "rqnc" "RRF" ## [193] "RRFglobal" "rrlda" "RSimca" ## [196] "rvmLinear" "rvmPoly" "rvmRadial" ## [199] "SBC" "sda" "sdwd" ## [202] "simpls" "SLAVE" "slda" ## [205] "smda" "snn" "sparseLDA" ## [208] "spikeslab" "spls" "stepLDA" ## [211] "stepQDA" "superpc" "svmBoundrangeString"## [214] "svmExpoString" "svmLinear" "svmLinear2" ## [217] "svmLinear3" "svmLinearWeights" "svmLinearWeights2" ## [220] "svmPoly" "svmRadial" "svmRadialCost" ## [223] "svmRadialSigma" "svmRadialWeights" "svmSpectrumString" ## [226] "tan" "tanSearch" "treebag" ## [229] "vbmpRadial" "vglmAdjCat" "vglmContRatio" ## [232] "vglmCumulative" "widekernelpls" "WM" ## [235] "wsrf" "xgbLinear" "xgbTree" ## [238] "xyf"

