R Random Forest Tutorial med exempel
Vad är Random Forest i R?
Slumpmässiga skogar bygger på en enkel idé: "massans visdom". Aggregering av resultaten från flera prediktorer ger en bättre förutsägelse än den bästa individuella prediktorn. En grupp av prediktorer kallas en ensemble. Således kallas denna teknik Ensemble Learning.
I tidigare handledning lärde du dig hur du använder Besluts träd att göra en binär förutsägelse. För att förbättra vår teknik kan vi träna en grupp av Klassificerare av beslutsträd, var och en på en annan slumpmässig delmängd av tåguppsättningen. För att göra en förutsägelse får vi bara förutsägelserna från alla individers träd och förutsäger sedan den klass som får flest röster. Denna teknik kallas Slumpmässig skog.
Steg 1) Importera data
För att se till att du har samma datauppsättning som i handledningen för beslutsträd, tågtestet och testsetet lagras på internet. Du kan importera dem utan att göra några ändringar.
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)
Steg 2) Träna modellen
Ett sätt att utvärdera prestandan hos en modell är att träna den på ett antal olika mindre datauppsättningar och utvärdera dem över den andra mindre testuppsättningen. Detta kallas F-faldig korsvalidering särdrag. R har en funktion för att slumpmässigt dela upp antal datauppsättningar av nästan samma storlek. Till exempel, om k=9, utvärderas modellen över mappen nio och testas på den återstående testuppsättningen. Denna process upprepas tills alla delmängder har utvärderats. Denna teknik används ofta för val av modell, speciellt när modellen har parametrar att ställa in.
Nu när vi har ett sätt att utvärdera vår modell måste vi ta reda på hur vi väljer de parametrar som generaliserar data bäst.
Random forest väljer en slumpmässig delmängd av funktioner och bygger många beslutsträd. Modellen gör ett genomsnitt av alla förutsägelser från beslutsträden.
Slumpmässig skog har några parametrar som kan ändras för att förbättra generaliseringen av förutsägelsen. Du kommer att använda funktionen RandomForest() för att träna modellen.
Syntax för Randon Forest är
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
Anmärkningar: Slumpmässig skog kan tränas på fler parametrar. Du kan hänvisa till karikatyrerna för att se de olika parametrarna.
Att trimma en modell är mycket tråkigt arbete. Det finns många kombinationer möjliga mellan parametrarna. Du har inte nödvändigtvis tid att prova alla. Ett bra alternativ är att låta maskinen hitta den bästa kombinationen för dig. Det finns två tillgängliga metoder:
- Slumpmässig sökning
- Rutnätssökning
Vi kommer att definiera båda metoderna men under handledningen kommer vi att träna modellen med hjälp av rutnätssökning
Grid Search definition
Rutnätssökningsmetoden är enkel, modellen kommer att utvärderas över alla kombinationer du passerar i funktionen, med hjälp av korsvalidering.
Till exempel, du vill prova modellen med 10, 20, 30 antal träd och varje träd kommer att testas över ett antal mtry lika med 1, 2, 3, 4, 5. Sedan kommer maskinen att testa 15 olika 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 kommer att utvärdera:
RandomForest(formula, ntree=10, mtry=1) RandomForest(formula, ntree=10, mtry=2) RandomForest(formula, ntree=10, mtry=3) RandomForest(formula, ntree=20, mtry=2) ...
Varje gång experimenterar den slumpmässiga skogen med en korsvalidering. En brist med rutnätssökningen är antalet experiment. Det kan bli väldigt lätt explosivt när antalet kombinationer är högt. För att övervinna detta problem kan du använda den slumpmässiga sökningen
Slumpmässig sökning definition
Den stora skillnaden mellan slumpmässig sökning och rutnätssökning är att slumpmässig sökning inte kommer att utvärdera alla kombinationer av hyperparameter i sökutrymmet. Istället kommer den att välja kombination slumpmässigt vid varje iteration. Fördelen är att det sänker beräkningskostnaden.
Ställ in kontrollparametern
Du kommer att gå tillväga enligt följande för att konstruera och utvärdera modellen:
- Utvärdera modellen med standardinställningen
- Hitta det bästa antalet mtry
- Hitta det bästa antalet maxnoder
- Hitta det bästa antalet nträd
- Utvärdera modellen på testdatauppsättningen
Innan du börjar med parametrarnas utforskning måste du installera två bibliotek.
- caret: R maskininlärningsbibliotek. Om du har installera R med r-väsentligt. Den finns redan på biblioteket
- Anakonda: conda installera -cr r-caret
- e1071: R maskininlärningsbibliotek.
- Anakonda: conda installera -cr r-e1071
Du kan importera dem tillsammans med RandomForest
library(randomForest) library(caret) library(e1071)
Standardinställning
K-faldig korsvalidering styrs av 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 prova att köra modellen med standardparametrarna och se noggrannhetspoängen.
Anmärkningar: Du kommer att använda samma kontroller under hela handledningen.
# Define the control trControl <- trainControl(method = "cv", number = 10, search = "grid")
Du kommer att använda caret-biblioteket för att utvärdera din modell. Biblioteket har en funktion som kallas train() för att utvärdera nästan alla maskininlärning algoritm. Säg annorlunda, du kan använda den här funktionen för att träna andra algoritmer.
Den grundläggande syntaxen är:
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
Låt oss försöka bygga modellen med standardvärdena.
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)
Kodförklaring
- trainControl(method=”cv”, number=10, search=”grid”): Utvärdera modellen med en rutnätssökning på 10 mapp
- train(...): Träna en slumpmässig skogsmodell. Bästa modellen väljs med noggrannhetsmåttet.
Produktion:
## 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 använder 500 träd och testade tre olika värden på mtry: 2, 6, 10.
Det slutliga värdet som användes för modellen var mtry = 2 med en noggrannhet på 0.78. Låt oss försöka få en högre poäng.
Steg 2) Sök bästa mtry
Du kan testa modellen med värden på mtry från 1 till 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)
Kodförklaring
- tuneGrid <- expand.grid(.mtry=c(3:10)): Konstruera en vektor med ett värde från 3:10
Det slutliga värdet som användes för modellen var mtry = 4.
Produktion:
## 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.
Det bästa värdet av mtry lagras i:
rf_mtry$bestTune$mtry
Du kan lagra den och använda den när du behöver ställa in de andra parametrarna.
max(rf_mtry$results$Accuracy)
Produktion:
## [1] 0.8110729
best_mtry <- rf_mtry$bestTune$mtry best_mtry
Produktion:
## [1] 4
Steg 3) Sök efter de bästa maxnoderna
Du måste skapa en loop för att utvärdera de olika värdena för maxnoder. I följande kod kommer du:
- Skapa en lista
- Skapa en variabel med det bästa värdet av parametern mtry; Obligatorisk
- Skapa slingan
- Lagra det aktuella värdet för maxnode
- Sammanfatta resultaten
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)
Kodförklaring:
- store_maxnode <- list(): Resultaten av modellen kommer att lagras i denna lista
- expand.grid(.mtry=bästa_mtry): Använd det bästa värdet av mtry
- for (maxnoder i c(15:25)) { … }: Beräkna modellen med värden på maxnoder som börjar från 15 till 25.
- maxnodes=maxnodes: För varje iteration är maxnodes lika med det aktuella värdet på maxnodes. dvs 15, 16, 17, …
- key <- toString(maxnodes): Lagra som en strängvariabel värdet för maxnode.
- store_maxnode[[key]] <- rf_maxnode: Spara resultatet av modellen i listan.
- resamples(store_maxnode): Ordna resultaten av modellen
- summary(results_mtry): Skriv ut sammanfattningen av alla kombinationer.
Produktion:
## ## 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
Det sista värdet på maxnode har den högsta noggrannheten. Du kan prova med högre värden för att se om du kan få en högre poäng.
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)
Produktion:
## ## 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ögsta noggrannhetspoängen erhålls med värdet maxnode lika med 22.
Steg 4) Sök efter de bästa träden
Nu när du har det bästa värdet av mtry och maxnode kan du ställa in antalet träd. Metoden är exakt densamma 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)
Produktion:
## ## 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 slutliga modell. Du kan träna den slumpmässiga skogen med följande parametrar:
- ntree =800: 800 träd kommer att tränas
- mtry=4: 4 funktioner väljs för varje iteration
- maxnoder = 24: Max 24 noder i terminalnoderna (löven)
fit_rf <- train(survived~., data_train, method = "rf", metric = "Accuracy", tuneGrid = tuneGrid, trControl = trControl, importance = TRUE, nodesize = 14, ntree = 800, maxnodes = 24)
Steg 5) Utvärdera modellen
Biblioteket har en funktion att göra förutsägelser.
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 använda förutsägelsen för att beräkna förvirringsmatrisen och se noggrannhetspoängen
confusionMatrix(prediction, data_test$survived)
Produktion:
## 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 noggrannhet på 0.7943 procent, vilket är högre än standardvärdet
Steg 6) Visualisera resultatet
Slutligen kan du titta på egenskapens betydelse med funktionen varImp(). Det verkar som om de viktigaste egenskaperna är kön och ålder. Det är inte förvånande eftersom de viktiga funktionerna sannolikt kommer att synas närmare trädets rot, medan mindre viktiga funktioner ofta verkar stängda för löven.
varImpPlot(fit_rf)
Produktion:
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
Sammanfattning
Vi kan sammanfatta hur man tränar och utvärderar en slumpmässig skog med tabellen nedan:
Bibliotek | Mål | Funktion | Parameter |
---|---|---|---|
randomForest | Skapa en Random skog | RandomForest() | formel, ntree=n, mtry=FALSE, maxnodes = NULL |
markör | Skapa korsvalidering av K-mapp | trainControl() | metod = "cv", nummer = n, sök = "rutnät" |
markör | Träna en Random Forest | tåg() | formel, df, metod = "rf", metrisk = "noggrannhet", trControl = trainControl(), tuneGrid = NULL |
markör | Förutsäg ur provet | förutse | modell, newdata= df |
markör | Förvirringsmatris och statistik | confusionMatrix() | modell, y test |
markör | variabel betydelse | cvarImp() | modell |
Appendix
Lista över modeller som används i caret
names>(getModelInfo())
Produktion:
## [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"