Что такое случайный лес в R?
Случайные леса основаны на простой идее: «мудрость толпы». Совокупность результатов нескольких предикторов дает лучший прогноз, чем лучший индивидуальный предиктор. Группа предикторов называется ансамблем . Таким образом, эта методика называется ансамблевым обучением .
В предыдущем уроке вы узнали, как использовать деревья решений для бинарного предсказания. Чтобы улучшить нашу технику, мы можем обучить группу классификаторов Дерева решений , каждый из которых находится в отдельном случайном подмножестве набора поездов. Чтобы сделать прогноз, мы просто получаем прогнозы всех деревьев индивидов, а затем прогнозируем класс, который получит большинство голосов. Эта техника называется случайным лесом .
Мы продолжим обучать Случайный Лес следующим образом:
- Шаг 1) Импортируйте данные
- Шаг 2) Обучаем модель
- Шаг 3) Построить функцию точности
- Шаг 4) Визуализация модели
- Шаг 5) Оценить модель
- Шаг 6) Визуализация результата
Шаг 1) Импортируйте данные
Чтобы убедиться, что у вас тот же набор данных, что и в учебном пособии для деревьев решений, тесты поездов и набор тестов хранятся в Интернете. Вы можете импортировать их без каких-либо изменений.
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)
Шаг 2) Обучаем модель
Один из способов оценки производительности модели состоит в том, чтобы обучить ее нескольким различным меньшим наборам данных и оценить их по сравнению с другим меньшим набором тестирования. Это называется функцией перекрестной проверки F-Fold . R имеет функцию случайного разделения количества наборов данных практически одинакового размера. Например, если k = 9, модель оценивается по девяти папкам и тестируется на оставшемся тестовом наборе. Этот процесс повторяется до тех пор, пока все подмножества не будут оценены. Этот метод широко используется для выбора модели, особенно когда модель имеет параметры для настройки.
Теперь, когда у нас есть способ оценить нашу модель, нам нужно выяснить, как выбрать параметры, которые лучше всего обобщают данные.
Случайный лес выбирает случайный набор функций и строит множество деревьев решений. Модель усредняет все предсказания деревьев Решений.
Случайный лес имеет некоторые параметры, которые можно изменить, чтобы улучшить обобщение прогноза. Вы будете использовать функцию RandomForest () для обучения модели.
Синтаксис для Рэндон Форест
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
Примечание : Случайный лес можно обучить по большему количеству параметров. Вы можете обратиться к виньетке, чтобы увидеть различные параметры.
Тюнинг модели — очень утомительная работа. Существует много возможных комбинаций между параметрами. У вас не обязательно есть время, чтобы попробовать все из них. Хорошая альтернатива — позволить машине найти лучшую комбинацию для вас. Доступны два метода:
- Случайный поиск
- Grid Search
Мы определим оба метода, но во время урока мы будем обучать модель с использованием сетки поиска
Определение сетки поиска
Метод поиска по сетке прост, модель будет оцениваться по всей комбинации, которую вы передаете в функцию, используя перекрестную проверку.
Например, вы хотите попробовать модель с количеством деревьев 10, 20, 30, и каждое дерево будет протестировано на количестве mtry, равном 1, 2, 3, 4, 5. Затем машина протестирует 15 различных моделей:
.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
Алгоритм оценит:
RandomForest(formula, ntree=10, mtry=1) RandomForest(formula, ntree=10, mtry=2) RandomForest(formula, ntree=10, mtry=3) RandomForest(formula, ntree=20, mtry=2) ...
Каждый раз случайный лес экспериментирует с перекрестной проверкой. Одним из недостатков поиска по сетке является количество экспериментов. Это может стать очень легко взрывоопасным, когда число комбинаций велико. Чтобы преодолеть эту проблему, вы можете использовать случайный поиск
Определение случайного поиска
Большая разница между случайным поиском и сеточным поиском заключается в том, что случайный поиск не оценивает всю комбинацию гиперпараметра в пространстве поиска. Вместо этого он будет случайным образом выбирать комбинацию на каждой итерации. Преимущество состоит в том, что это снижает вычислительные затраты.
Установите параметр управления
Вы будете действовать следующим образом, чтобы построить и оценить модель:
- Оцените модель с настройкой по умолчанию
- Найти лучшее количество МТР
- Найдите лучшее количество maxnodes
- Найти лучшее количество деревьев
- Оценить модель по тестовому набору данных
Прежде чем начать исследование параметров, вам необходимо установить две библиотеки.
- Caret: R библиотека машинного обучения. Если у вас установлена R с r-essential. Это уже в библиотеке
- Анаконда : Конда установить -cr р-карет
- e1071: R библиотека машинного обучения.
- Анаконда : конда установить -cr r-e1071
Вы можете импортировать их вместе с RandomForest
library(randomForest) library(caret) library(e1071)
Настройки по умолчанию
K-кратная перекрестная проверка контролируется функцией 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.
Вы можете попробовать запустить модель с параметрами по умолчанию и посмотреть оценку точности.
Примечание : вы будете использовать одни и те же элементы управления в течение всего урока.
# Define the control trControl <- trainControl(method = "cv", number = 10, search = "grid")
Вы будете использовать библиотеку карет для оценки вашей модели. Библиотека имеет одну функцию под названием train () для оценки почти всех алгоритмов машинного обучения. Другими словами, вы можете использовать эту функцию для обучения других алгоритмов.
Основной синтаксис:
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
Давайте попробуем построить модель со значениями по умолчанию.
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)
Код Объяснение
- trainControl (method = «cv», number = 10, search = «grid»): оцените модель с помощью поиска по сетке из 10 папок
- train (…): обучить случайную модель леса. Лучшая модель выбрана с мерой точности.
Вывод:
## 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.
Алгоритм использует 500 деревьев и протестировал три разных значения mtry: 2, 6, 10.
Конечное значение, используемое для модели, было mtry = 2 с точностью 0,78. Давайте попробуем получить более высокий балл.
Шаг 2) Поиск лучших mtry
Вы можете протестировать модель со значениями mtry от 1 до 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)
Код Объяснение
- tuneGrid <- expand.grid (.mtry = c (3:10)): создать вектор со значением 3:10
Конечное значение, используемое для модели, было mtry = 4.
Вывод:
## 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.
Наилучшее значение mtry хранится в:
rf_mtry$bestTune$mtry
Вы можете сохранить его и использовать, когда вам нужно настроить другие параметры.
max(rf_mtry$results$Accuracy)
Вывод:
## [1] 0.8110729
best_mtry <- rf_mtry$bestTune$mtry best_mtry
Вывод:
## [1] 4
Шаг 3) Поиск лучших maxnodes
Вам нужно создать цикл для оценки различных значений maxnodes. В следующем коде вы будете:
- Создать список
- Создайте переменную с наилучшим значением параметра mtry; обязательное
- Создать цикл
- Сохранить текущее значение maxnode
- Подвести итоги
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)
Объяснение кода:
- store_maxnode <- list (): результаты модели будут сохранены в этом списке
- expand.grid (.mtry = best_mtry): используйте лучшее значение mtry
- for (maxnodes in c (15:25)) {…}: вычислить модель со значениями maxnodes, начиная с 15 до 25.
- maxnodes = maxnodes: для каждой итерации maxnodes равно текущему значению maxnodes. то есть 15, 16, 17, …
- key <- toString (maxnodes): сохранить в качестве строковой переменной значение maxnode.
- store_maxnode [[key]] <- rf_maxnode: сохранить результат модели в списке.
- resamples (store_maxnode): упорядочить результаты модели
- summary (results_mtry): вывести сводку по всей комбинации.
Вывод:
## ## 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
Последнее значение maxnode имеет самую высокую точность. Вы можете попробовать с более высокими значениями, чтобы увидеть, если вы можете получить более высокий балл.
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)
Вывод:
## ## 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
Наивысшая оценка точности достигается при значении maxnode, равном 22.
Шаг 4) Поиск лучших деревьев
Теперь, когда у вас есть лучшие значения mtry и maxnode, вы можете настроить количество деревьев. Метод точно такой же, как 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)
Вывод:
## ## 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
У тебя есть твоя последняя модель. Вы можете обучить случайный лес по следующим параметрам:
- ntree = 800: 800 деревьев будут обучены
- mtry = 4: 4 функции выбираются для каждой итерации
- maxnodes = 24: максимум 24 узла в конечных узлах (листья)
fit_rf <- train(survived~., data_train, method = "rf", metric = "Accuracy", tuneGrid = tuneGrid, trControl = trControl, importance = TRUE, nodesize = 14, ntree = 800, maxnodes = 24)
Шаг 5) Оценить модель
Библиотека карета имеет функцию прогнозирования.
predict(model, newdata= df) argument - `model`: Define the model evaluated before. - `newdata`: Define the dataset to make prediction
prediction <-predict(fit_rf, data_test)
Вы можете использовать прогноз для расчета матрицы путаницы и увидеть оценку точности
confusionMatrix(prediction, data_test$survived)
Вывод:
## 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 ##
У вас есть точность 0,7943 процента, что выше значения по умолчанию
Шаг 6) Визуализация результата
Наконец, вы можете посмотреть на важность функции с помощью функции varImp (). Кажется, что наиболее важными чертами являются пол и возраст. Это неудивительно, потому что важные элементы могут появляться ближе к корню дерева, в то время как менее важные элементы часто оказываются закрытыми для листьев.
varImpPlot(fit_rf)
Вывод:
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
Резюме
Мы можем суммировать, как обучать и оценивать случайный лес, используя следующую таблицу:
Библиотека | Задача | функция | параметр |
---|---|---|---|
RandomForest | Создать случайный лес | RandomForest () | формула, ntree = n, mtry = FALSE, maxnodes = NULL |
знак вставки | Перекрестная проверка папки K | trainControl () | method = «cv», number = n, search = «grid» |
знак вставки | Обучить случайный лес | поезд() | формула, df, method = «rf», metric = «Accuracy», trControl = trainControl (), tuneGrid = NULL |
знак вставки | Прогноз из образца | прогнозировать | модель, newdata = df |
знак вставки | Матрица путаницы и статистика | confusionMatrix () | модель, у тест |
знак вставки | переменная важность | cvarImp () | модель |
аппендикс
Список моделей, используемых в карете
names>(getModelInfo())
Вывод:
## [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"