R Random Forest Tutorial med eksempel
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 tidligere selvstudie lærte du, hvordan du 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 indhenter vi blot forudsigelserne fra alle individuelle træer og forudsiger derefter den klasse, der får flest stemmer. Denne teknik kaldes Tilfældig Skov.
Trin 1) Importer dataene
For at sikre dig, at du har det samme datasæt som i vejledningen til beslutning træer, er togtesten og testsættet gemt på internettet. 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 F-fold krydsvalidering funktion. R har en funktion til tilfældigt at opdele antallet af datasæt af næsten samme størrelse. For eksempel, hvis k=9, evalueres modellen over de ni mapper og testes på det resterende testsæt. Denne proces gentages, indtil alle delmængderne er blevet evalueret. Denne teknik er meget udbredt til modelvalg, især når modellen har parametre, der skal indstilles.
Nu hvor vi har en måde at evaluere vores model på, skal vi finde ud af, hvordan vi vælger de parametre, der bedst generaliserede dataene.
Tilfældig skov vælger en tilfældig delmængde af funktioner og bygger mange beslutningstræer. Modellen udligner alle forudsigelserne fra beslutningstræerne.
Tilfældig skov har nogle parametre, der kan ændres for at forbedre generaliseringen af forudsigelsen. Du skal bruge funktionen RandomForest() til at træne 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
Bemærk: Tilfældig skov kan trænes på flere parametre. Du kan henvise til tegnefilm for at se de forskellige parametre.
At tune en model er meget kedeligt arbejde. Der er mange kombinationer mulige mellem parametrene. 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 tilgængelige metoder:
- Tilfældig søgning
- Netsøgning
Vi vil definere begge metoder, men i løbet af selvstudiet vil vi træne 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 gang eksperimenterer den tilfældige skov med en krydsvalidering. En mangel ved gittersøgningen er antallet af eksperimenter. Det kan meget let blive eksplosivt, når antallet af kombinationer er højt. For at løse dette problem kan du bruge den tilfældige 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 al kombinationen af hyperparametre i søgerummet. I stedet vil den tilfældigt vælge kombination ved hver iteration. Fordelen er, at det sænker beregningsomkostningerne.
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
- 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)
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 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 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 prøve at 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)
Kode Forklaring
- trainControl(metode=”cv”, nummer=10, search=”grid”): Evaluer modellen med en gittersøgning på 10 mappe
- 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 nøjagtighed på 0.78. Lad os prøve at få en højere score.
Trin 2) Søg efter 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)
Kode Forklaring
- tuneGrid <- expand.grid(.mtry=c(3:10)): Konstruer en vektor med værdi fra 3:10
Den endelige værdi, der blev brugt til modellen, var mtry = 4.
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 af mtry 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)
Kodeforklaring:
- 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(15:25)) { … }: Beregn modellen med værdier af maxnodes startende fra 15 til 25.
- maxnodes=maxnodes: For hver iteration er maxnodes lig med den aktuelle værdi af maxnodes. dvs 15, 16, 17, …
- key <- toString(maxnodes): Gem værdien af maxnode som en strengvariabel.
- store_maxnode[[key]] <- rf_maxnode: Gem resultatet af modellen på 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 sidste værdi af maxnode har den højeste nøjagtighed. Du kan prøve med højere værdier for at se, om du kan få en højere score.
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 nøjagtighedsscore opnås med en værdi på maxnode lig med 22.
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 funktioner er valgt for hver iteration
- maxnodes = 24: Maksimalt 24 noder i terminalnoderne (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 ##
Du har en nøjagtighed på 0.7943 procent, hvilket er højere end standardværdien
Trin 6) Visualiser resultatet
Til sidst kan du se på funktionens betydning med funktionen varImp(). Det ser ud til, at de vigtigste egenskaber er køn og alder. Det er ikke overraskende, fordi de vigtige træk sandsynligvis vises tættere på træets rod, mens mindre vigtige træk ofte vil virke lukket for bladene.
varImpPlot(fit_rf)
Output:
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
Resumé
Vi kan opsummere, hvordan man træner og evaluerer en tilfældig skov med nedenstående tabel:
| Bibliotek | Objektiv | Funktion | Parameter |
|---|---|---|---|
| randomForest | Opret en tilfældig skov | RandomForest() | formel, ntree=n, mtry=FALSE, maxnodes = NULL |
| indskudsmærke | Opret K-mappe 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 | cvarImp() | model |
Tillæg
Liste over model brugt i caret
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"
