Véletlenszerű erdő R-ben bemutató: Algoritmus példával
⚡ Okos összefoglaló
Az R-ben található Random Forest több száz döntési fát épít bootstrappeléssel létrehozott minták alapján, és a szavazataikat átlagolva egyetlen robusztus predikciót alkot. Ez a bemutató az mtry, maxnodes és ntree függvényeket karettel hangolja, és a Titanic túlélési adatain kiértékeli a végső modellt.

Mi az a Random Forest R-ben?
A véletlenszerű erdők egy egyszerű gondolaton alapulnak: „a tömeg bölcsességén”. Több előrejelző eredményének összesítése jobb előrejelzést ad, mint a legjobb egyéni előrejelző. A prediktorok egy csoportját an együttes. Így ezt a technikát ún Együttes tanulás.
Egy korábbi oktatóanyagban megtanultad, hogyan kell használni döntési fák hogy bináris jóslatot készítsünk. Technikánk fejlesztése érdekében edzhetünk egy csoportot Döntési fa osztályozók, mindegyik a vonathalmaz egy másik véletlenszerű részhalmazán. Előrejelzéshez összegyűjtjük az összes egyedi fa jóslatait, és visszaadjuk azt az osztályt, amelyik a legtöbb szavazatot kapja. Ezt a technikát nevezik Véletlen Erdő.
Mielőtt bármilyen kódot írnánk, hasznos látni, hogy pontosan hogyan áll össze az erdő ezekből az egyes fákból.
Hogyan működik a Random Forest R-ben?
A mechanika megértése megkönnyíti az összes hangolási paraméterrel kapcsolatos érvelést. Egy véletlenszerű erdő négy szakaszban épül fel.
- Bootstrap mintavétel. Az algoritmus véletlenszerűen kiválasztja a sorokat cserével minden fa tanulóhalmazából. Nagyjából a sorok egyharmada kimarad minden mintából; ezek a zsákon kívüli (OOB) megfigyelések.
- Véletlenszerű funkcióválasztás. Minden osztásnál csak a prediktorok egy véletlenszerű részhalmazát vesszük figyelembe. Ez a részhalmaz mérete a méter paraméter. A választási lehetőségek korlátozása az, ami megakadályozza, hogy az összes fa egyformán nézzen ki.
- Metszetlen fa növekedése. Minden fa addig nő, amíg meg nem állping olyan szabály, mint maxnodes or csomópontméretAz egyes fákat szándékosan túlillesztik, mivel a hibáik nem korreláltak.
- Összesítés. Osztályozás esetén az erdő a legtöbb szavazattal rendelkező osztályt adja vissza; regresszió esetén az átlagos predikciót adja vissza. Ezt az átlagolási lépést a kifejezés adja vissza. zsákolás (bootstrap aggregálás) leírja.
A sor- és oszlopmintavételezés a lényeg. Egyetlen mély fa alacsony torzítással és nagyon magas varianciával rendelkezik; több száz fa átlagolása alacsony torzítást tart fenn, miközben csökkenti a varianciát.
Zsákon kívüli hiba. Mivel a fák körülbelül egyharmadából minden megfigyelés kizárásra kerül, az R minden sort csak azoknak a fáknak a felhasználásával tud pontozni, amelyek soha nem látták azt. Az így kapott OOB hiba egy ingyenes, beépített validációs becslés, amelyet a randomForest() nyomtat ki:
rf_oob <- randomForest(survived~., data = data_train, ntree = 800, mtry = 4) print(rf_oob) # reports the OOB estimate of error rate
Az OOB hiba egy kényelmes gyors ellenőrzés, de ez az oktatóanyag tízszeres keresztellenőrzést használ kalap segítségével, így minden hangolórácsot azonos hajtásokon hasonlít össze.
Véletlenszerű erdő vs. döntési fa R-ben
Egy véletlenszerű erdő ugyanazon dolgok együttese döntési fák az előző oktatóanyagban tárgyaltuk, ezért érdemes világosan megemlíteni a különbségeket, mielőtt választanánk közöttük.
| Kritériumai | Döntési fa | Véletlen Erdő |
|---|---|---|
| Szerkezet | Egy fa | Szavazással több száz fa gyűlt össze |
| Variancia | Magas, nagyon érzékeny a betanítási mintára | Alacsony, átlagoló érték, amely kiküszöböli az egyedi hibákat |
| Túlillesztettség kockázata | Magas, hacsak nem metszik | Alacsony még metszetlen fák esetén is |
| Értelmezhetőség | Teljesen olvasható folyamatábraként | Csak a változó fontossága olvasható |
| Képzési költség | Nagyon gyors | Arányos az ntree-vel |
| Beépített érvényesítés | Egyik sem | Zsákon kívüli hibabecslés |
| R függvény | rpart() | randomForest() |
Válasszon egyetlen fát, ha a döntési utat nem műszaki közönség számára kell elmagyaráznia. Válasszon erdőt, ha az előrejelzés pontossága fontosabb, mint egy olvasható diagram.
A véletlenszerű erdő előnyei és hátrányai
Az algoritmus erős és gyenge pontjainak ismerete megmutatja, hogy mikor éri meg a további finomhangolási erőfeszítéseket.
Előnyök
- Pontosság metszés nélkül: Sok korrelálatlan fa átlagolása nagyon kevés manuális hangolással erős eredményeket ad.
- Túlhevítéssel szemben ellenálló: Több fa hozzáadása soha nem növeli az általánosítási hibát, így az ntree biztonságosan növelhető.
- Vegyes adatokat kezel: A numerikus és a faktorprediktorok egymás mellett működnek, és a skálázás szükségtelen.
- Ingyenes érvényesítés és rangsorolás: Az OOB hiba és a varImp() nem jár extra számítási költséggel.
Hátrányok
- Átlátszatlan jóslatok: nem tudsz tracegyetlen döntési útvonal, ami szabályozott környezetben számít.
- Lassú a nagy erdőkben: A betanítási és előrejelzési idő lineárisan függ a fák számától.
- Elfogult fontossági pontszámok: A többszintű kategorikus változók fontosabbnak tűnhetnek, mint amilyenek valójában.
- Gyenge extrapoláció: regresszió esetén az erdő soha nem tud a betanítás során látott tartományon kívül eső értékeket előre jelezni.
Miután az elmélet és a kompromisszumok tisztázódtak, a következő hat lépésben egy véletlenszerű erdőt építünk fel, hangolunk és értékelünk ki a Titanic túlélési adatkészletén.
1. lépés) Importálja az adatokat
Annak biztosítása érdekében, hogy ugyanaz az adatkészlet legyen, mint az oktatóanyagban döntési fák, a vonatszerelvény és a tesztkészlet online tárolva van. Importálhatja őket változtatások nélkül.
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)
2. lépés) Tanítsa meg a modellt
Egy modell teljesítményének értékelésének egyik módja, hogy több különböző, kisebb adathalmazon betanítjuk, majd ezeket egy másik, kisebb tesztelési halmazon értékeljük. Ezt nevezzük k-szeres keresztellenőrzés. R van egy függvénye, amely véletlenszerűen felosztja az adatokat k, közel azonos méretű részhalmazra. Például, ha k = 10, akkor a modellt kilenc hajtogatáson tanítják be, és a fennmaradó hajtogatáson értékelik ki. Ez a folyamat addig ismétlődik, amíg az összes részhalmaz kiértékelésre nem kerül. Ezt a technikát széles körben használják modellkiválasztásra, különösen akkor, ha a modellnek paraméterei vannak, amelyeket hangolni kell.
Most, hogy van egy módszerünk a modellünk kiértékelésére, el kell döntenünk, hogy mely paraméterek általánosíthatók legjobban a láthatatlan adatokra.
A véletlenszerű erdő kiválasztja a jellemzők egy véletlenszerű részhalmazát, és sok döntési fát épít. A modell átlagolja a döntési fák összes előrejelzését.
A véletlenszerű erdőnek vannak olyan paraméterei, amelyek megváltoztathatók a predikció általánosításának javítása érdekében. A modell betanításához a randomForest() függvényt fogjuk használni.
A randomForest() szintaxisa a következő:
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
Megjegyzések: Véletlenszerű erdő több paraméterre is betanítható. Hivatkozhat a címke a különböző paraméterek megtekintéséhez.
Egy modell finomhangolása fáradságos munka. A paraméterek számos lehetséges kombinációja létezik. Nem feltétlenül van időd mindegyiket kipróbálni. Jó alternatíva, ha hagyod, hogy a gép megtalálja a legjobb kombinációt. Két módszer áll rendelkezésre:
- Véletlenszerű keresés
- Rács keresés
Mindkét módszert alább definiáljuk, de ez az oktatóanyag rácsos kereséssel tanítja be a modellt.
Grid Search definíció
A rács keresési módszere egyszerű, a modell kiértékelésre kerül a függvényben átadott összes kombinációra keresztellenőrzés segítségével.
Például, ha ki akarja próbálni a modellt 10, 20, 30 fával, és minden fát olyan mtry-n keresztül tesztelnek, amely 1, 2, 3, 4, 5. Ezután a gép 15 különböző modellt tesztel:
.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
Az algoritmus kiértékeli:
randomForest(formula, ntree=10, mtry=1) randomForest(formula, ntree=10, mtry=2) randomForest(formula, ntree=10, mtry=3) randomForest(formula, ntree=20, mtry=2) ...
Minden kombinációt keresztellenőrzéssel értékelünk ki. A rácsos keresés hiányossága a kísérletek száma: robbanásszerűen megnő, ha a kombinációk száma magas. Ennek a problémának a kiküszöbölésére használhatjuk a véletlenszerű keresést.
Véletlenszerű keresés definíciója
A véletlenszerű keresés és a rácsos keresés közötti nagy különbség az, hogy a véletlenszerű keresés nem értékeli ki a hiperparaméterek összes kombinációját a keresési térben. Ehelyett minden iterációban véletlenszerűen választ kombinációt. Az előnye a sokkal alacsonyabb számítási költség.
Állítsa be a vezérlési paramétert
A modell felépítéséhez és értékeléséhez a következőképpen járjon el:
- Értékelje a modellt az alapértelmezett beállítással
- Keresse meg a legjobb számú mtry-t
- Keresse meg a legjobb számú maxnode-ot
- Keresse meg a legjobb számú fát
- Értékelje a modellt a tesztadatkészleten
Mielőtt elkezdené a paraméterek feltárását, két könyvtárat kell telepítenie.
- caret: R gépi tanulási könyvtár. Ha van telepítse az R r-essentialvel. Már a könyvtárban van
- Anakonda: conda install -cr r-caret
- e1071: R gépi tanulási könyvtár.
- Anakonda: conda install -cr r-e1071
Importálhatod őket a randomForest segítségével:
library(randomForest) library(caret) library(e1071)
Alapértelmezett beállítás
A K-szeres keresztellenőrzést a trainControl() függvény vezérli
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.
Megpróbálhatja futtatni a modellt az alapértelmezett paraméterekkel, és megtekintheti a pontossági pontszámot.
Megjegyzések: Ugyanazokat a vezérlőket fogja használni az összes oktatóanyag alatt.
# Define the control trControl <- trainControl(method = "cv", number = 10, search = "grid")
A caret könyvtárat fogja használni a modell értékeléséhez. A könyvtárnak van egy train() nevű függvénye, amely szinte az összeset kiértékeli gépi tanulás algoritmus. Mondjuk másképp, ezzel a funkcióval más algoritmusokat is betaníthat.
Az alap szintaxis a következő:
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
Építsük fel a modellt az alapértelmezett értékekkel.
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 Magyarázat
- trainControl(method=”cv”, number=10, search=”grid”): A modell kiértékelése 10-szeres rácskereséssel
- vonat(…): Véletlenszerű erdőmodell betanítása. A legjobb modellt a pontosság mértékével választják ki.
output:
## 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.
Az algoritmus 500 fát használ, és három különböző mtry értéket tesztel: 2, 6, 10.
A modellhez használt végső érték mtry = 2 volt, 0.792-es keresztvalidált pontossággal. Próbáljunk meg magasabb pontszámot elérni.
Keresd meg a legjobb mtry-t
A modellt 1 és 10 közötti mtry értékekkel tesztelheti
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 Magyarázat
- tuneGrid <- expand.grid(.mtry = c(1:10)): 1-től 10-ig terjedő értékekkel rendelkező vektor létrehozása
output:
## 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.
Az mtry legjobb értéke 4. A következő helyen tárolódik:
rf_mtry$bestTune$mtry
Tárolhatja és használhatja, amikor a többi paramétert hangolnia kell.
max(rf_mtry$results$Accuracy)
output:
## [1] 0.8110729
best_mtry <- rf_mtry$bestTune$mtry best_mtry
output:
## [1] 4
3. lépés) Keresse meg a legjobb maxnode-okat
Létre kell hoznia egy hurkot a maxnodes különböző értékeinek kiértékeléséhez. A következő kódban:
- Hozzon létre egy listát
- Hozzon létre egy változót az mtry paraméter legjobb értékével; Kötelező
- Hozd létre a hurkot
- Tárolja a maxnode aktuális értékét
- Foglalja össze az eredményeket
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 magyarázat:
- store_maxnode <- list(): A modell eredményei ebben a listában lesznek eltárolva
- expand.grid(.mtry=best_mtry): Az mtry legjobb értékét használja
- for (maxnodes in c(5:15)) { … }: Számítsa ki a modellt a maxnodes 5 és 15 közötti értékeivel.
- maxnodes = maxnodes: Minden iterációnál a maxnodes egyenlő az aktuális ciklusértékkel, azaz 5, 6, 7, …
- current_iteration <- toString(maxnodes): A maxnodes értékét karakterláncként tárolja.
- store_maxnode[[aktuális_iteráció]] <- rf_maxnode: A modell eredményének mentése a listában.
- resamples(store_maxnode): Rendezd el a modell eredményeit
- summary(results_mtry): Nyomtassa ki az összes kombináció összefoglalóját.
output:
## ## 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
A legnagyobb átlagos pontosság ebben a tartományban (0.8099) a maxnodes = 14-hez tartozik, a tesztelt intervallum tetején. Mivel a legjobb érték a rács szélén található, a keresést felfelé kell kiterjeszteni.
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)
output:
## ## 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
A legnagyobb átlagos pontosságot, 0.8135-öt, maxnodes = 24 értékkel kapjuk (a maxnodes = 27 megegyezik az átlaggal, de alacsonyabb a harmadik kvartilis). Ezért a fennmaradó lépésekhez a maxnodes = 24 értéket fogjuk használni.
4. lépés) Keresse meg a legjobb fákat
Most, hogy megvan a legjobb mtry és maxnode értéke, beállíthatja a fák számát. A módszer pontosan ugyanaz, mint a 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)
output:
## ## 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
Megvan a végső modelled. A véletlenszerű erdőt a következő paraméterekkel taníthatja:
- ntree = 800: 800 fa kerül betanításra
- mtry = 4: Minden egyes osztásnál 4 jelöltjellemzőt sorsolunk ki
- maxnodes = 24: Minden fa 24 terminálcsomópontra (levélre) korlátozódik
fit_rf <- train(survived~., data_train, method = "rf", metric = "Accuracy", tuneGrid = tuneGrid, trControl = trControl, importance = TRUE, nodesize = 14, ntree = 800, maxnodes = 24)
5. lépés) Értékelje a modellt
A könyvtári ügyeletnek előrejelzési funkciója van.
predict(model, newdata= df)
argument
- `model`: Define the model evaluated before.
- `newdata`: Define the dataset to make prediction
prediction <-predict(fit_rf, data_test)
Az előrejelzés segítségével kiszámíthatja a zavaros mátrixot, és megtekintheti a pontossági pontszámot
confusionMatrix(prediction, data_test$survived)
output:
## 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 ##
A modell 0.7943-as pontosságot ér el, ami a láthatatlan teszthalmazon 79.43 százalékot jelent, ami magasabb, mint az alapértelmezett konfiguráció. Az érzékenység 0.9091, a specificitás pedig 0.6364, így a modell sokkal megbízhatóbban ismeri fel a nem túlélőket, mint a túlélőket.
6. lépés: Vizualizálja az eredményt
Végül a varImp() függvénnyel vizsgálhatod a jellemzők fontosságát. A legfontosabb jellemzők a nem és az életkor. Ez nem meglepő, mivel a fontos jellemzők valószínűleg a fa gyökeréhez közelebb jelennek meg, míg a kevésbé fontos jellemzők általában a levelekhez közelebb.
varImp(fit_rf)
output:
## 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
Véletlenszerű erdő R-ben: Gyors függvényreferencia
Az alábbi táblázat felsorolja a hat lépésben használt összes függvényt, az azt biztosító csomagot és a várt paramétereket.
| könyvtár | Objektív | Funkció | Vizsgált paraméter |
|---|---|---|---|
| randomForest | Hozz létre egy véletlenszerű erdőt | randomForest() | formula, ntree=n, mtry=FALSE, maxnodes = NULL |
| hiányjel | k-szoros keresztellenőrzés létrehozása | trainControl() | metódus = "cv", szám = n, keresés = "rács" |
| hiányjel | Véletlenszerű erdő képzése | vonat() | formula, df, metódus = "rf", metrika = "pontosság", trControl = trainControl(), tuneGrid = NULL |
| hiányjel | Előrejelzés a mintából | előre | modell, newdata= df |
| hiányjel | Zavart mátrix és statisztika | confusionMatrix() | modell, y teszt |
| hiányjel | Változó fontosság | varImp() | modell |
Függelék: Karattal elérhető modellek
A train() függvény sokkal több objektumot képes kezelni, mint a véletlenszerű erdőket. Futtassa az alábbi parancsot az összes olyan modellazonosító kinyomtatásához, amelyet a caret támogat, majd adja át bármelyiket a metódus argumentumának.
names(getModelInfo())
output:
## [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"
