R Random Forest Tutorial med eksempel
Hva er Random Forest i R?
Tilfeldige skoger er basert på en enkel idé: "menighetens visdom". Aggregering av resultatene fra flere prediktorer gir en bedre prediksjon enn den beste individuelle prediktoren. En gruppe prediktorer kalles en ensemble. Derfor kalles denne teknikken Ensemble læring.
I tidligere opplæring lærte du hvordan du bruker Beslutningstrær å lage en binær prediksjon. For å forbedre vår teknikk kan vi trene en gruppe på Decision Tree klassifiserere, hver på et annet tilfeldig delsett av togsettet. For å lage en spådom innhenter vi bare spådommene til alle individuelle trær, og forutsier deretter klassen som får flest stemmer. Denne teknikken kalles Tilfeldig skog.
Trinn 1) Importer dataene
For å være sikker på at du har samme datasett som i opplæringen for avgjørelse trær, er togtesten og testsettet lagret på internett. Du kan importere dem uten å gjøre noen endringer.
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)
Trinn 2) Tren modellen
En måte å evaluere ytelsen til en modell på er å trene den på en rekke forskjellige mindre datasett og evaluere dem over det andre mindre testsettet. Dette kalles F-fold kryssvalidering funksjonen. R har en funksjon for å dele antall datasett av nesten samme størrelse tilfeldig. For eksempel, hvis k=9, blir modellen evaluert over de ni mappene og testet på det gjenværende testsettet. Denne prosessen gjentas til alle delsettene er evaluert. Denne teknikken er mye brukt for modellvalg, spesielt når modellen har parametere som skal justeres.
Nå som vi har en måte å evaluere modellen vår på, må vi finne ut hvordan vi velger parametrene som best generaliserte dataene.
Tilfeldig skog velger en tilfeldig undergruppe av funksjoner og bygger mange beslutningstrær. Modellen gjennomsnitt ut alle spådommene til beslutningstrærene.
Tilfeldig skog har noen parametere som kan endres for å forbedre generaliseringen av prediksjonen. Du skal bruke funksjonen RandomForest() for å trene modellen.
Syntaks for Randon Forest 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 candidates draw to feed the algorithm. By default, it is the square of the number of columns. - maxnodes: Set the maximum amount of terminal nodes in the forest - importance=TRUE: Whether independent variables importance in the random forest be assessed
Merknader: Tilfeldig skog kan trenes på flere parametere. Du kan referere til vignett for å se de forskjellige parameterne.
Å stille inn en modell er veldig kjedelig arbeid. Det er mange kombinasjoner mulig mellom parameterne. Du har ikke nødvendigvis tid til å prøve dem alle. Et godt alternativ er å la maskinen finne den beste kombinasjonen for deg. Det er to tilgjengelige metoder:
- Tilfeldig søk
- Rutenett søk
Vi vil definere begge metodene, men i løpet av opplæringen vil vi trene modellen ved å bruke rutenettsøk
Definisjon av rutenettsøk
Rutenettsøkemetoden er enkel, modellen vil bli evaluert over all kombinasjonen du passerer i funksjonen, ved bruk av kryssvalidering.
For eksempel vil du prøve modellen med 10, 20, 30 antall trær og hvert tre vil bli testet over et antall mtry lik 1, 2, 3, 4, 5. Deretter vil maskinen teste 15 forskjellige 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 gang eksperimenterer den tilfeldige skogen med en kryssvalidering. En mangel ved rutenettsøket er antall eksperimenter. Det kan bli veldig lett eksplosivt når antallet kombinasjoner er høyt. For å løse dette problemet kan du bruke det tilfeldige søket
Definisjon av tilfeldig søk
Den store forskjellen mellom tilfeldig søk og rutenettsøk er at tilfeldig søk ikke vil evaluere all kombinasjonen av hyperparameter i søkeområdet. I stedet vil den tilfeldig velge kombinasjon ved hver iterasjon. Fordelen er at det reduserer beregningskostnadene.
Still inn kontrollparameteren
Du vil fortsette som følger for å konstruere og evaluere modellen:
- Evaluer modellen med standardinnstillingen
- Finn det beste antallet mtry
- Finn det beste antallet maksnoder
- Finn det beste antallet ntre
- Evaluer modellen på testdatasettet
Før du begynner med parameterutforskningen, må du installere to biblioteker.
- caret: R maskinlæringsbibliotek. Hvis du har installer R med r-essensielt. Den ligger allerede på biblioteket
- Anaconda: conda install -cr r-caret
- e1071: R maskinlæringsbibliotek.
- Anaconda: conda install -cr r-e1071
Du kan importere dem sammen med RandomForest
library(randomForest) library(caret) library(e1071)
Standardinnstilling
K-fold kryssvalidering styres av trainControl()-funksjonen
trainControl(method = "cv", number = n, search ="grid") arguments - method = "cv": The method used to resample the dataset. - number = n: Number of folders to create - search = "grid": Use the search grid method. For randomized method, use "grid" Note: You can refer to the vignette to see the other arguments of the function.
Du kan prøve å kjøre modellen med standardparametrene og se nøyaktighetsscore.
Merknader: Du vil bruke de samme kontrollene under hele opplæringen.
# Define the control trControl <- trainControl(method = "cv", number = 10, search = "grid")
Du vil bruke caret-biblioteket til å evaluere modellen din. Biblioteket har en funksjon kalt train() for å evaluere nesten alle maskinlæring algoritme. Si annerledes, du kan bruke denne funksjonen til å trene andre algoritmer.
Den grunnleggende syntaksen 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
La oss prøve å bygge modellen med standardverdiene.
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)
Kode Forklaring
- trainControl(method=”cv”, number=10, search=”grid”): Evaluer modellen med et rutenettsøk på 10 mapper
- tog(...): Tren en tilfeldig skogmodell. Beste modell er valgt med nøyaktighetsmålet.
Utgang:
## 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 bruker 500 trær og testet tre forskjellige verdier av mtry: 2, 6, 10.
Den endelige verdien som ble brukt for modellen var mtry = 2 med en nøyaktighet på 0.78. La oss prøve å få en høyere poengsum.
Trinn 2) Søk best mtry
Du kan teste modellen med verdier 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)
Kode Forklaring
- tuneGrid <- expand.grid(.mtry=c(3:10)): Konstruer en vektor med verdi fra 3:10
Den endelige verdien som ble brukt for modellen var mtry = 4.
Utgang:
## 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 beste verdien av mtry er lagret i:
rf_mtry$bestTune$mtry
Du kan lagre den og bruke den når du trenger å stille inn de andre parameterne.
max(rf_mtry$results$Accuracy)
Utgang:
## [1] 0.8110729
best_mtry <- rf_mtry$bestTune$mtry best_mtry
Utgang:
## [1] 4
Trinn 3) Søk etter de beste maxnodene
Du må lage en løkke for å evaluere de forskjellige verdiene til maxnodes. I følgende kode vil du:
- Lag en liste
- Lag en variabel med den beste verdien av parameteren mtry; Obligatorisk
- Lag løkken
- Lagre gjeldende verdi for maxnode
- Oppsummer resultatene
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)
Kodeforklaring:
- store_maxnode <- list(): Resultatene av modellen vil bli lagret i denne listen
- expand.grid(.mtry=best_mtry): Bruk den beste verdien av mtry
- for (maksnoder i c(15:25)) { … }: Beregn modellen med verdier for maksnoder som starter fra 15 til 25.
- maxnodes=maxnodes: For hver iterasjon er maxnodes lik gjeldende verdi av maxnodes. dvs. 15, 16, 17, …
- key <- toString(maxnodes): Lagre som en strengvariabel verdien til maxnode.
- store_maxnode[[key]] <- rf_maxnode: Lagre resultatet av modellen i listen.
- resamples(store_maxnode): Ordne resultatene av modellen
- summary(results_mtry): Skriv ut sammendraget av alle kombinasjonene.
Utgang:
## ## 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 siste verdien av maxnode har høyest nøyaktighet. Du kan prøve med høyere verdier for å se om du kan få en høyere poengsum.
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)
Utgang:
## ## 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øyeste nøyaktighetsscore oppnås med en verdi på maxnode lik 22.
Trinn 4) Søk i de beste treene
Nå som du har den beste verdien av mtry og maxnode, kan du justere antall trær. Metoden er nøyaktig 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)
Utgang:
## ## 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 modell. Du kan trene den tilfeldige skogen med følgende parametere:
- ntree =800: 800 trær skal trenes
- mtry=4: 4 funksjoner er valgt for hver iterasjon
- maxnodes = 24: Maksimalt 24 noder i terminalnodene (blader)
fit_rf <- train(survived~., data_train, method = "rf", metric = "Accuracy", tuneGrid = tuneGrid, trControl = trControl, importance = TRUE, nodesize = 14, ntree = 800, maxnodes = 24)
Trinn 5) Vurder modellen
Biblioteket har en funksjon for å forutsi.
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 bruke prediksjonen til å beregne forvirringsmatrisen og se nøyaktighetsscore
confusionMatrix(prediction, data_test$survived)
Utgang:
## 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 ##
Du har en nøyaktighet på 0.7943 prosent, som er høyere enn standardverdien
Trinn 6) Visualiser resultatet
Til slutt kan du se på funksjonens betydning med funksjonen varImp(). Det ser ut til at de viktigste egenskapene er kjønn og alder. Det er ikke overraskende fordi de viktige funksjonene sannsynligvis vises nærmere roten av treet, mens mindre viktige funksjoner ofte vil virke lukket for bladene.
varImpPlot(fit_rf)
Utgang:
varImp(fit_rf) ## 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
Oppsummering
Vi kan oppsummere hvordan man trener og evaluerer en tilfeldig skog med tabellen nedenfor:
Bibliotek | Målet | Funksjon | Parameter |
---|---|---|---|
randomForest | Lag en tilfeldig skog | RandomForest() | formel, ntree=n, mtry=FALSE, maxnodes = NULL |
vaktmester | Opprett kryssvalidering av K-mappe | trainControl() | metode = "cv", tall = n, søk = "rutenett" |
vaktmester | Tren en tilfeldig skog | tog() | formel, df, metode = "rf", metrisk = "Nøyaktighet", trControl = trainControl(), tuneGrid = NULL |
vaktmester | Forutsi ut av prøven | forutsi | modell, newdata= df |
vaktmester | Forvirringsmatrise og statistikk | confusionMatrix() | modell, y test |
vaktmester | variabel betydning | cvarImp() | modell |
Vedlegg
Liste over modeller brukt i caret
names>(getModelInfo())
Utgang:
## [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"