Random Forest i R-vejledning: Algoritme med eksempel

โšก Smart opsummering

Random Forest i R bygger hundredvis af beslutningstrรฆer pรฅ bootstrappede prรธver og gennemsnittet af deres stemmer til รฉn robust forudsigelse. Denne gennemgang finjusterer mtry, maxnodes og ntree med caret og evaluerer den endelige model pรฅ Titanic-overlevelsesdataene.

  • ???? Kerneprincip: Bagging trรฆner hvert trรฆ pรฅ en bootstrap-stikprรธve og en tilfรฆldig delmรฆngde af prรฆdiktorer, sรฅ individuelle fejl ophรฆver hinanden under flertalsafstemningen.
  • ๐Ÿงช Valideringsopsรฆtning: trainControl(method = โ€œcvโ€, number = 10, search = โ€œgridโ€) retter en tifoldig gittersรธgning, der genbruges pรฅ tvรฆrs af hvert tuningtrin.
  • ๐ŸŽฏ Tuningsrรฆkkefรธlge: Optimer fรธrst mtry, derefter maxnodes og derefter ntree, og bรฆr den vindende vรฆrdi fremad i hvert trin.
  • ๐Ÿ“ˆ Bedste konfiguration: mtry = 4, maxnodes = 24 og ntree = 800 gav den stรฆrkeste krydsvaliderede nรธjagtighed pรฅ dette datasรฆt.
  • ๐Ÿงฎ Testresultat: confusionMatrix() rapporterer en nรธjagtighed pรฅ 79.43 procent, en sensitivitet pรฅ 0.9091 og en specificitet pรฅ 0.6364 pรฅ hold-out-data.

Tilfรฆldig skov i R

Hvad er Random Forest i R?

Tilfรฆldige skove er baseret pรฅ en simpel idรฉ: 'mรฆngdens visdom'. Aggregering af resultaterne af flere prรฆdiktorer giver en bedre forudsigelse end den bedste individuelle prรฆdiktor. En gruppe af prรฆdiktorer kaldes en ensemble. Sรฅledes kaldes denne teknik Ensemble lรฆring.

I en tidligere vejledning lรฆrte du, hvordan man bruger beslutning trรฆer at lave en binรฆr forudsigelse. For at forbedre vores teknik kan vi trรฆne en gruppe af Decision Tree klassifikatorer, hver pรฅ en forskellig tilfรฆldig delmรฆngde af togsรฆttet. For at lave en forudsigelse indsamler du forudsigelserne for alle de individuelle trรฆer og returnerer den klasse, der fรฅr flest stemmer. Denne teknik kaldes Tilfรฆldig Skov.

Fรธr man skriver kode, er det en god idรฉ at se prรฆcis, hvordan skoven er sammensat af de enkelte trรฆer.

Hvordan fungerer en tilfรฆldig skov i R?

Forstรฅelse af mekanikken gรธr det lettere at rรฆsonnere om hver tuningparameter. En tilfรฆldig skov opbygges i fire faser.

  1. Bootstrap prรธveudtagning. Algoritmen tegner en tilfรฆldig stikprรธve af rรฆkker med udskiftning fra trรฆningssรฆttet for hvert trรฆ. Omtrent en tredjedel af rรฆkkerne er udeladt af hver stikprรธve; disse er observationerne uden for posen (OOB).
  2. Tilfรฆldig funktionsudvรฆlgelse. Ved hver opdeling tages kun en tilfรฆldig delmรฆngde af prรฆdiktorer i betragtning. Denne delmรฆngdestรธrrelse er mtry parameter. Begrรฆnsning af valget er det, der forhindrer alle trรฆerne i at ligne hinanden.
  3. Ubeskรฅret trรฆvรฆkst. Hvert trรฆ vokser, indtil det stopperping regel som f.eks. maxnoder or nodestรธrrelseIndividuelle trรฆer fรฅr bevidst lov til at overfitte, fordi deres fejl er ukorrelerede.
  4. Aggregering. Ved klassificering returnerer skoven klassen med flest stemmer; ved regression returnerer den den gennemsnitlige forudsigelse. Dette gennemsnitstrin er, hvad termen sรฆkke (bootstrap-aggregering) beskriver.

Rรฆkkesampling plus kolonnesampling er hele tricket. Et enkelt dybt trรฆ har lav bias og meget hรธj varians; at bruge hundredvis af dem i gennemsnit holder den lave bias, samtidig med at variansen reduceres.

Fejl ved udpakning. Fordi hver observation er udelukket fra omkring en tredjedel af trรฆerne, kan R score hver rรฆkke ved kun at bruge de trรฆer, der aldrig har set den. Den resulterende OOB-fejl er et gratis, indbygget valideringsestimat, der udskrives af randomForest():

rf_oob <- randomForest(survived~., data = data_train, ntree = 800, mtry = 4)
print(rf_oob)   # reports the OOB estimate of error rate

OOB-fejlen er en praktisk hurtig kontrol, men denne vejledning bruger tifold krydsvalidering via cirkumfleks, sรฅ hvert tuninggitter sammenlignes pรฅ identiske foldninger.

Tilfรฆldig skov vs. beslutningstrรฆ i R

En tilfรฆldig skov er et ensemble af det samme beslutning trรฆer dรฆkket i den forrige vejledning, sรฅ forskellene er vรฆrd at nรฆvne tydeligt, fรธr du vรฆlger mellem dem.

Kriterier Beslutningstrรฆ Tilfรฆldig Skov
Struktur Et trรฆ Hundredvis af trรฆer kombineret ved afstemning
varians Hรธj, meget fรธlsom over for trรฆningsprรธven Lav, gennemsnittet eliminerer individuelle fejl
Risiko for overtilpasning Hรธj medmindre beskรฆret Lav selv med ubeskรฅrne trรฆer
Fortolkningsmulighed Fuldt lรฆsbar som et flowdiagram Kun variabel vigtighed er lรฆsbar
Udgifter til uddannelse Meget hurtig Proportionelt med ntree
Indbygget validering Ingen Estimat af fejl ved udlรธbsdato
R funktion rpart() tilfรฆldigSkov()

Vรฆlg et enkelt trรฆ, nรฅr du skal forklare beslutningsvejen til et ikke-teknisk publikum. Vรฆlg en skov, nรฅr prรฆdiktiv nรธjagtighed er vigtigere end et lรฆsbart diagram.

Fordele og ulemper ved Random Forest

At vide, hvor algoritmen er stรฆrk og svag, fortรฆller dig, hvornรฅr den forudgรฅende justeringsindsats er vรฆrd at bruge.

Fordele

  • Prรฆcision uden beskรฆring: Midling af mange ukorrelerede trรฆer giver stรฆrke resultater med meget lidt manuel justering.
  • Modstandsdygtig over for overmontering: Tilfรธjelse af flere trรฆer รธger aldrig generaliseringsfejlen, sรฅ ntree kan hรฆves sikkert.
  • Hรฅndterer blandede data: Numeriske og faktorprรฆdiktorer fungerer side om side, og skalering er unรธdvendig.
  • Gratis validering og rangering: OOB-fejlen og varImp() kommer uden ekstra beregningsomkostninger.

Ulemper

  • Uigennemsigtige forudsigelser: du kan ikke tracรฉn enkelt beslutningsvej, hvilket er vigtigt i regulerede miljรธer.
  • Langsomt i store skove: trรฆnings- og forudsigelsestidsskala lineรฆrt med antallet af trรฆer.
  • Forudindtagede vigtighedsscorer: Kategoriske variabler med mange niveauer kan se vigtigere ud, end de i virkeligheden er.
  • Svag ekstrapolering: For regression kan skoven aldrig forudsige uden for det interval, der ses i trรฆning.

Nรฅr teorien og afvejningerne er afklaret, opbygger, finjusterer og evaluerer de nรฆste seks trin en tilfรฆldig skov ende til anden pรฅ Titanic-overlevelsesdatasรฆttet.

Trin 1) Importer dataene

For at sikre dig, at du har det samme datasรฆt som i vejledningen til beslutning trรฆer, togsรฆttet og testsรฆttet hostes online. Du kan importere dem uden at foretage nogen รฆndringer.

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)

Trin 2) Trรฆn modellen

En mรฅde at evaluere en models ydeevne pรฅ er at trรฆne den pรฅ en rรฆkke forskellige mindre datasรฆt og evaluere dem i forhold til de andre mindre testsรฆt. Dette kaldes k-fold krydsvalidering. R har en funktion, der tilfรฆldigt opdeler dataene i k delmรฆngder af nรฆsten samme stรธrrelse. Hvis k f.eks. = 10, trรฆnes modellen pรฅ ni foldninger og evalueres pรฅ den resterende foldning. Denne proces gentages, indtil alle delmรฆngder er blevet evalueret. Denne teknik bruges i vid udstrรฆkning til modeludvรฆlgelse, isรฆr nรฅr modellen har parametre, der skal justeres.

Nu hvor vi har en mรฅde at evaluere vores model pรฅ, skal vi beslutte, hvilke parametre der bedst generaliserer til usete data.

Tilfรฆldig skov vรฆlger en tilfรฆldig delmรฆngde af funktioner og bygger mange beslutningstrรฆer. Modellen udligner alle forudsigelserne fra beslutningstrรฆerne.

Random forest har nogle parametre, der kan รฆndres for at forbedre generaliseringen af โ€‹โ€‹forudsigelsen. Du skal bruge funktionen randomForest() til at trรฆne modellen.

Syntaksen for randomForest() er:

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

Bemรฆrk: Tilfรฆldig skov kan trรฆnes pรฅ flere parametre. Du kan henvise til tegnefilm for at se de forskellige parametre.

Det er et kedeligt arbejde at finjustere en model. Der er mange mulige parameterkombinationer. Du har ikke nรธdvendigvis tid til at prรธve dem alle. Et godt alternativ er at lade maskinen finde den bedste kombination for dig. Der er to metoder tilgรฆngelige:

  • Tilfรฆldig sรธgning
  • Netsรธgning

Begge metoder er defineret nedenfor, men denne vejledning trรฆner modellen ved hjรฆlp af gittersรธgning.

Grid Search definition

Gittersรธgningsmetoden er enkel, modellen vil blive evalueret over al den kombination, du passerer i funktionen, ved hjรฆlp af krydsvalidering.

For eksempel vil du prรธve modellen med 10, 20, 30 antal trรฆer, og hvert trรฆ vil blive testet over et antal mtry svarende til 1, 2, 3, 4, 5. Derefter vil maskinen teste 15 forskellige modeller:

    .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	

Algoritmen vil evaluere:

randomForest(formula, ntree=10, mtry=1)
randomForest(formula, ntree=10, mtry=2)
randomForest(formula, ntree=10, mtry=3)
randomForest(formula, ntree=20, mtry=2)
...

Hver kombination evalueres med krydsvalidering. Manglen ved gridsรธgning er antallet af eksperimenter: det vokser eksplosivt, nรฅr antallet af kombinationer er hรธjt. For at overvinde dette problem kan du bruge tilfรฆldig sรธgning.

Definition af tilfรฆldig sรธgning

Den store forskel mellem tilfรฆldig sรธgning og gittersรธgning er, at tilfรฆldig sรธgning ikke evaluerer alle kombinationer af hyperparametre i sรธgeomrรฅdet. I stedet vรฆlger den tilfรฆldigt en kombination ved hver iteration. Fordelen er en meget lavere beregningsomkostning.

Indstil kontrolparameteren

Du vil fortsรฆtte som fรธlger for at konstruere og evaluere modellen:

  • Evaluer modellen med standardindstillingen
  • Find det bedste antal mtry
  • Find det bedste antal maxnodes
  • Find det bedste antal ntrรฆer
  • Evaluer modellen pรฅ testdatasรฆttet

Fรธr du begynder med udforskningen af โ€‹โ€‹parametrene, skal du installere to biblioteker.

  • caret: R maskinlรฆringsbibliotek. Hvis du har installer R med r-essentiel. Den ligger allerede pรฅ biblioteket
  • e1071: R maskinlรฆringsbibliotek.

Du kan importere dem sammen med randomForest:

library(randomForest)
library(caret)
library(e1071)

Standardindstilling

K-fold krydsvalidering styres af trainControl()-funktionen

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.

Du kan prรธve at kรธre modellen med standardparametrene og se nรธjagtighedsscore.

Bemรฆrk: Du vil bruge de samme kontroller under hele selvstudiet.

# Define the control
trControl <- trainControl(method = "cv",
    number = 10,
    search = "grid")

Du vil bruge caret-biblioteket til at evaluere din model. Biblioteket har en funktion kaldet train() til at evaluere nรฆsten alle machine learning algoritme. Sig anderledes, du kan bruge denne funktion til at trรฆne andre algoritmer.

Den grundlรฆggende syntaks er:

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

Lad os bygge modellen med standardvรฆrdierne.

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 Forklaring

  • trainControl(method="cv", number="10, search="grid"): Evaluer modellen med en gridsรธgning over 10 folder
  • tog(...): Trรฆn en tilfรฆldig skovmodel. Bedste model vรฆlges med nรธjagtighedsmรฅlet.

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.

Algoritmen bruger 500 trรฆer og testede tre forskellige vรฆrdier af mtry: 2, 6, 10.

Den endelige vรฆrdi, der blev brugt til modellen, var mtry = 2, med en krydsvalideret nรธjagtighed pรฅ 0.792. Lad os prรธve at fรฅ en hรธjere score.

Sรธg efter den bedste mtry

Du kan teste modellen med vรฆrdier pรฅ mtry fra 1 til 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 Forklaring

  • tuneGrid <- expand.grid(.mtry = c(1:10)): Konstruer en vektor med vรฆrdier fra 1 til 10

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.

Den bedste vรฆrdi for mtry er 4. Den er gemt i:

rf_mtry$bestTune$mtry

Du kan gemme det og bruge det, nรฅr du skal indstille de andre parametre.

max(rf_mtry$results$Accuracy)

Output:

## [1] 0.8110729
best_mtry <- rf_mtry$bestTune$mtry 
best_mtry

Output:

## [1] 4

Trin 3) Sรธg efter de bedste maxnodes

Du skal oprette en lรธkke for at evaluere de forskellige vรฆrdier af maxnodes. I fรธlgende kode vil du:

  • Opret en liste
  • Opret en variabel med den bedste vรฆrdi af parameteren mtry; Obligatorisk
  • Opret lรธkken
  • Gem den aktuelle vรฆrdi af maxnode
  • Opsummer resultaterne
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 forklaring:

  • store_maxnode <- list(): Resultaterne af modellen vil blive gemt pรฅ denne liste
  • expand.grid(.mtry=best_mtry): Brug den bedste vรฆrdi af mtry
  • for (maxnodes in c(5:15)) { โ€ฆ }: Beregn modellen med vรฆrdier af maxnodes fra 5 til 15.
  • maxnodes = maxnodes: For hver iteration er maxnodes lig med den aktuelle loopvรฆrdi, dvs. 5, 6, 7, โ€ฆ
  • current_iteration <- toString(maxnodes): Gem vรฆrdien af โ€‹โ€‹maxnodes som en streng.
  • store_maxnode[[current_iteration]] <- rf_maxnode: Gem resultatet af modellen i listen.
  • resamples(store_maxnode): Arranger resultaterne af modellen
  • summary(results_mtry): Udskriv oversigten over alle kombinationerne.

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

Den hรธjeste gennemsnitlige nรธjagtighed i dette interval (0.8099) tilhรธrer maxnodes = 14, รธverst i det testede interval. Da den bedste vรฆrdi ligger i kanten af โ€‹โ€‹gitteret, bรธr du udvide sรธgningen opad.

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

Den hรธjeste gennemsnitlige nรธjagtighed, 0.8135, opnรฅs med maxnodes = 24 (maxnodes = 27 stemmer overens med gennemsnittet, men har en lavere tredje kvartil). Du vil derfor bruge maxnodes = 24 til de resterende trin.

Trin 4) Sรธg efter de bedste trรฆer

Nu hvor du har den bedste vรฆrdi af mtry og maxnode, kan du justere antallet af trรฆer. Metoden er nรธjagtig den samme som 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

Du har din endelige model. Du kan trรฆne den tilfรฆldige skov med fรธlgende parametre:

  • ntree = 800: 800 trรฆer vil blive trรฆnet
  • mtry = 4: 4 kandidatfunktioner tegnes ved hver opdeling
  • maxnodes = 24: Hvert trรฆ er begrรฆnset til 24 terminalnoder (blade)
fit_rf <- train(survived~.,
    data_train,
    method = "rf",
    metric = "Accuracy",
    tuneGrid = tuneGrid,
    trControl = trControl,
    importance = TRUE,
    nodesize = 14,
    ntree = 800,
    maxnodes = 24)

Trin 5) Evaluer modellen

Biblioteket har en funktion til at forudsige.

predict(model, newdata= df)
argument
- `model`: Define the model evaluated before. 
- `newdata`: Define the dataset to make prediction
prediction <-predict(fit_rf, data_test)

Du kan bruge forudsigelsen til at beregne forvirringsmatricen og se nรธjagtighedsscore

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             
## 

Modellen nรฅr en nรธjagtighed pรฅ 0.7943, det vil sige 79.43 procent pรฅ det usete testsรฆt, hvilket er hรธjere end standardkonfigurationen. Fรธlsomheden er 0.9091, og specificiteten er 0.6364, sรฅ modellen genkender ikke-overlevende langt mere pรฅlideligt end overlevende.

Trin 6) Visualiser resultatet

Til sidst kan du se pรฅ vigtigheden af โ€‹โ€‹funktionerne med funktionen varImp(). De vigtigste funktioner er kรธn og alder. Det er ikke overraskende, da de vigtige funktioner sandsynligvis vises tรฆttere pรฅ trรฆets rod, mens mindre vigtige funktioner normalt vises tรฆttere pรฅ bladene.

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		

Tilfรฆldig skov i R: Hurtig funktionsreference

Tabellen nedenfor viser alle funktioner, der bruges pรฅ tvรฆrs af de seks trin, den pakke, der leverer den, og de parametre, den forventer.

Bibliotek Objektiv Funktion Parameter
randomForest Opret en tilfรฆldig skov tilfรฆldigSkov() formel, ntree=n, mtry=FALSE, maxnodes = NULL
indskudsmรฆrke Opret k-fold krydsvalidering trainControl() metode = "cv", tal = n, sรธg = "gitter"
indskudsmรฆrke Trรฆn en tilfรฆldig skov tog() formel, df, metode = "rf", metrisk = "Nรธjagtighed", trControl = trainControl(), tuneGrid = NULL
indskudsmรฆrke Forudsig ud af prรธven forudsige model, newdata= df
indskudsmรฆrke Forvirringsmatrix og statistik confusionMatrix() model, y test
indskudsmรฆrke Variabel betydning varImp() model

Bilag: Modeller tilgรฆngelige i markeret markering

Funktionen train() kan passe til langt mere end tilfรฆldige skove. Kรธr kommandoen nedenfor for at udskrive alle modelidentifikatorer, som cirkumfleks understรธtter, og send derefter en af โ€‹โ€‹dem til metodeargumentet.

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"

Ofte Stillede Spรธrgsmรฅl

Start med 500, standardvรฆrdien for randomForest(). Nรธjagtigheden flader normalt ud mellem 300 og 1000 trรฆer. At hรฆve ntree skader aldrig nรธjagtigheden, kun runtime, sรฅ รธg den, indtil fejlkurven flader ud.

Out-of-bag-fejlen scorer hver observation ved kun at bruge de trรฆer, der er trรฆnet uden den. Det er et hurtigt, upartisk estimat og erstatter ofte krydsvalidering, selvom k-foldning stadig er at foretrรฆkke, nรฅr man sammenligner tuninggitre pรฅ identiske folder.

Ja. Angiv et numerisk svar, og randomForest() beregner gennemsnittet af trรฆforudsigelserne i stedet for at stemme. I cirkumflekssymbolet skal du beholde metoden = "rf" og รฆndre metrikargumentet fra nรธjagtighed til RMSE.

Tilfรฆldige skove forbliver en standardbaseline for tabelformede AI-problemer sรฅsom churn, svindel og risikoscoring. Teams benchmarker ofte en skov, fรธr de forpligter sig til gradientboosting eller neurale netvรฆrk.

Ja. AI-assistenter kan udarbejde tuninggitre, forklare resampling-output og foreslรฅ fornuftige mรฅleomrรฅder. Kรธr altid den genererede kode igen med et fast seed, sรฅ den rapporterede nรธjagtighed er reproducerbar.

Opsummer dette indlรฆg med: