R Výukový program Random Forest s příkladem
Co je Random Forest v R?
Náhodné lesy jsou založeny na jednoduché myšlence: „Moudrost davu“. Součet výsledků více prediktorů poskytuje lepší předpověď než nejlepší individuální prediktor. Skupina prediktorů se nazývá an soubor. Tak se tato technika nazývá Ensemble Learning.
V předchozím tutoriálu jste se naučili používat Rozhodovací stromy udělat binární předpověď. Abychom zlepšili naši techniku, můžeme trénovat skupinu Klasifikátory rozhodovacího stromu, každý na jiné náhodné podmnožině vlakové soupravy. Abychom mohli předpovědět, stačí získat předpovědi všech stromů jednotlivců a poté předpovědět třídu, která získá nejvíce hlasů. Tato technika se nazývá Náhodný les.
Krok 1) Importujte data
Abyste se ujistili, že máte stejnou datovou sadu jako v tutoriálu pro rozhodovací stromy, test vlaku a testovací sada jsou uloženy na internetu. Můžete je importovat bez jakýchkoliv změn.
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)
Krok 2) Trénujte model
Jedním ze způsobů, jak vyhodnotit výkon modelu, je natrénovat jej na řadě různých menších datových sad a vyhodnotit je na druhé menší testovací sadě. Toto se nazývá F-násobná křížová validace vlastnost. R má funkci pro náhodné rozdělení počtu datových sad téměř stejné velikosti. Pokud je například k=9, model je vyhodnocen přes devět složek a testován na zbývající testovací sadě. Tento proces se opakuje, dokud nejsou vyhodnoceny všechny podmnožiny. Tato technika je široce používána pro výběr modelu, zvláště když má model parametry k vyladění.
Nyní, když máme způsob, jak vyhodnotit náš model, musíme zjistit, jak vybrat parametry, které nejlépe zobecňují data.
Náhodný les vybírá náhodnou podmnožinu funkcí a vytváří mnoho rozhodovacích stromů. Model zprůměruje všechny předpovědi stromů rozhodnutí.
Náhodný les má některé parametry, které lze změnit, aby se zlepšilo zobecnění předpovědi. K trénování modelu použijete funkci RandomForest().
Syntaxe pro Randon Forest je
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
Pozor: Náhodný les lze trénovat na více parametrech. Můžete odkazovat na viněta abyste viděli různé parametry.
Ladění modelu je velmi zdlouhavá práce. Mezi parametry je možné mnoho kombinací. Nemusíte nutně mít čas vyzkoušet je všechny. Dobrou alternativou je nechat stroj, aby pro vás našel nejlepší kombinaci. K dispozici jsou dvě metody:
- Náhodné vyhledávání
- Vyhledávání v mřížce
Budeme definovat obě metody, ale během tutoriálu budeme model trénovat pomocí vyhledávání v mřížce
Definice Grid Search
Metoda vyhledávání v mřížce je jednoduchá, model bude vyhodnocen přes všechny kombinace, které předáte ve funkci, pomocí křížové validace.
Například chcete vyzkoušet model s počtem 10, 20, 30 stromů a každý strom bude testován na počtu mtry rovnajícím se 1, 2, 3, 4, 5. Potom stroj otestuje 15 různých modelů:
.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
Algoritmus vyhodnotí:
RandomForest(formula, ntree=10, mtry=1) RandomForest(formula, ntree=10, mtry=2) RandomForest(formula, ntree=10, mtry=3) RandomForest(formula, ntree=20, mtry=2) ...
Pokaždé náhodný les experimentuje s křížovou validací. Jedním nedostatkem vyhledávání v mřížce je množství experimentů. Při vysokém počtu kombinací se může stát velmi snadno výbušným. Chcete-li tento problém vyřešit, můžete použít náhodné vyhledávání
Definice náhodného vyhledávání
Velký rozdíl mezi náhodným vyhledáváním a vyhledáváním v mřížce je, že náhodné vyhledávání nevyhodnotí všechny kombinace hyperparametrů v prostoru vyhledávání. Místo toho náhodně vybere kombinaci při každé iteraci. Výhodou jsou nižší výpočetní náklady.
Nastavte parametr ovládání
Při konstrukci a vyhodnocení modelu budete postupovat následovně:
- Vyhodnoťte model s výchozím nastavením
- Najděte nejlepší počet mtry
- Najděte nejlepší počet maxnodů
- Najděte nejlepší počet nstromů
- Vyhodnoťte model na testovací datové sadě
Než začnete s průzkumem parametrů, musíte nainstalovat dvě knihovny.
- stříška: Knihovna strojového učení R. Pokud máte nainstalovat R s r-essential. Už je v knihovně
- Anaconda: conda install -cr r-caret
- e1071: Knihovna strojového učení R.
- Anaconda: conda install -cr r-e1071
Můžete je importovat spolu s RandomForest
library(randomForest) library(caret) library(e1071)
Výchozí nastavení
Křížová validace K-fold je řízena funkcí trainControl().
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.
Můžete zkusit spustit model s výchozími parametry a zobrazit skóre přesnosti.
Pozor: Během celého kurzu budete používat stejné ovládací prvky.
# Define the control trControl <- trainControl(method = "cv", number = 10, search = "grid")
K vyhodnocení modelu použijete knihovnu stříšek. Knihovna má jednu funkci nazvanou train() pro vyhodnocení téměř všech strojové učení algoritmus. Řekněme jinak, tuto funkci můžete použít k trénování jiných algoritmů.
Základní syntaxe je:
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
Zkusme sestavit model s výchozími hodnotami.
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)
Vysvětlení kódu
- trainControl(method=”cv”, number=10, search=”grid”): Vyhodnoťte model pomocí mřížkového vyhledávání 10 složek
- vlak(…): Trénujte náhodný model lesa. Nejlepší model je vybrán s mírou přesnosti.
Výstup:
## 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.
Algoritmus používá 500 stromů a testoval tři různé hodnoty mtry: 2, 6, 10.
Konečná hodnota použitá pro model byla mtry = 2 s přesností 0.78. Pokusme se získat vyšší skóre.
Krok 2) Vyhledejte nejlepší mtry
Model můžete testovat s hodnotami mtry od 1 do 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)
Vysvětlení kódu
- tuneGrid <- expand.grid(.mtry=c(3:10)): Vytvořte vektor s hodnotou od 3:10
Konečná hodnota použitá pro model byla mtry = 4.
Výstup:
## 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.
Nejlepší hodnota mtry je uložena v:
rf_mtry$bestTune$mtry
Můžete jej uložit a použít, když potřebujete doladit ostatní parametry.
max(rf_mtry$results$Accuracy)
Výstup:
## [1] 0.8110729
best_mtry <- rf_mtry$bestTune$mtry best_mtry
Výstup:
## [1] 4
Krok 3) Vyhledejte nejlepší maxnody
Musíte vytvořit smyčku pro vyhodnocení různých hodnot maxnodes. V následujícím kódu budete:
- Vytvořte seznam
- Vytvořte proměnnou s nejlepší hodnotou parametru mtry; Povinný
- Vytvořte smyčku
- Uložte aktuální hodnotu maxnode
- Shrňte výsledky
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)
Vysvětlení kódu:
- store_maxnode <- seznam(): Výsledky modelu budou uloženy v tomto seznamu
- expand.grid(.mtry=best_mtry): Použijte nejlepší hodnotu mtry
- for (maxnodes in c(15:25)) { … }: Vypočítejte model s hodnotami maxnodes od 15 do 25.
- maxnodes=maxnodes: Pro každou iteraci se maxnodes rovná aktuální hodnotě maxnodes. tedy 15, 16, 17…
- key <- toString(maxnodes): Uloží jako řetězcovou proměnnou hodnotu maxnode.
- store_maxnode[[klíč]] <- rf_maxnode: Uloží výsledek modelu do seznamu.
- resamples(store_maxnode): Uspořádání výsledků modelu
- Summary(results_mtry): Vytiskne souhrn všech kombinací.
Výstup:
## ## 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
Poslední hodnota maxnode má nejvyšší přesnost. Můžete zkusit s vyššími hodnotami, abyste zjistili, zda můžete získat vyšší skóre.
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)
Výstup:
## ## 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
Nejvyšší skóre přesnosti se získá s hodnotou maxnode rovnou 22.
Krok 4) Vyhledejte nejlepší nstromy
Nyní, když máte nejlepší hodnotu mtry a maxnode, můžete vyladit počet stromů. Metoda je úplně stejná jako u 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)
Výstup:
## ## 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
Máte svůj finální model. Náhodný les můžete trénovat s následujícími parametry:
- ntree =800: Bude vycvičeno 800 stromů
- mtry=4: Pro každou iteraci jsou vybrány 4 funkce
- maxnodes = 24: Maximálně 24 uzlů v koncových uzlech (listech)
fit_rf <- train(survived~., data_train, method = "rf", metric = "Accuracy", tuneGrid = tuneGrid, trControl = trControl, importance = TRUE, nodesize = 14, ntree = 800, maxnodes = 24)
Krok 5) Vyhodnoťte model
Stříška knihovny má funkci pro předpovídání.
predict(model, newdata= df) argument - `model`: Define the model evaluated before. - `newdata`: Define the dataset to make prediction
prediction <-predict(fit_rf, data_test)
Predikci můžete použít k výpočtu matice zmatků a zobrazit skóre přesnosti
confusionMatrix(prediction, data_test$survived)
Výstup:
## 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 ##
Máte přesnost 0.7943 procenta, což je vyšší než výchozí hodnota
Krok 6) Vizualizujte výsledek
Nakonec se můžete podívat na důležitost funkce pomocí funkce varImp(). Zdá se, že nejdůležitějšími rysy jsou pohlaví a věk. To není překvapivé, protože důležité rysy se pravděpodobně objeví blíže ke kořeni stromu, zatímco méně důležité prvky se často objeví blízko listů.
varImpPlot(fit_rf)
Výstup:
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
Shrnutí
Jak trénovat a vyhodnocovat náhodný les, můžeme shrnout pomocí tabulky níže:
Knihovna | Objektivní | funkce | Parametr |
---|---|---|---|
náhodnýLes | Vytvořte náhodný les | RandomForest() | vzorec, ntree=n, mtry=FALSE, maxnodes = NULL |
stříbro | Vytvořte křížové ověření složky K | trainControl() | metoda = „cv“, číslo = n, hledání = „mřížka“ |
stříbro | Trénujte náhodný les | vlak() | vzorec, df, metoda = “rf”, metric= “Přesnost”, trControl = trainControl(), tuneGrid = NULL |
stříbro | Předpověď mimo vzorek | předpovědět | model, newdata= df |
stříbro | Matice zmatení a statistika | confusionMatrix() | model, y test |
stříbro | proměnlivá důležitost | cvarImp() | model |
Příloha
Seznam modelu použitého v stříšku
names>(getModelInfo())
Výstup:
## [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"