R Випадковий ліс Підручник із прикладом
Що таке випадковий ліс у R?
Випадкові ліси засновані на простій ідеї: «мудрість натовпу». Сукупність результатів кількох предикторів дає кращий прогноз, ніж найкращий окремий предиктор. Група предикторів називається an разом. Таким чином, ця методика називається Навчання в ансамблі.
У попередньому посібнику ви навчилися використовувати Рішення дерев щоб зробити двійковий прогноз. Щоб покращити нашу техніку, ми можемо тренувати групу Класифікатори дерева рішень, кожен у різній випадковій підмножині набору поїздів. Щоб зробити прогноз, ми просто отримуємо прогнози всіх окремих дерев, а потім прогнозуємо клас, який отримує найбільше голосів. Ця методика називається Випадковий ліс.
Крок 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-кратна перехресна перевірка функцію. R має функцію для випадкового розділення кількості наборів даних майже однакового розміру. Наприклад, якщо k=9, модель оцінюється для дев’яти папок і перевіряється на тестовому наборі, що залишився. Цей процес повторюється, доки не будуть оцінені всі підмножини. Цей прийом широко використовується для вибору моделі, особливо коли модель має параметри для налаштування.
Тепер, коли ми маємо спосіб оцінити нашу модель, нам потрібно з’ясувати, як вибрати параметри, які найкраще узагальнюють дані.
Випадковий ліс вибирає випадкову підмножину функцій і створює багато дерев рішень. Модель усереднює всі передбачення дерев рішень.
Випадковий ліс має деякі параметри, які можна змінити, щоб покращити узагальнення прогнозу. Ви будете використовувати функцію RandomForest() для навчання моделі.
Синтаксис для Randon Forest є
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
Примітка:: Випадковий ліс можна навчити за більшою кількістю параметрів. Ви можете звернутися до віньєтка щоб побачити різні параметри.
Тюнінг моделі - дуже кропітка робота. Існує багато можливих комбінацій між параметрами. Не обов’язково мати час, щоб спробувати їх усі. Гарна альтернатива — дозволити машині знайти найкращу комбінацію для вас. Є два доступних способи:
- Випадковий пошук
- Пошук у сітці
Ми визначимо обидва методи, але під час уроку ми навчимо модель за допомогою пошуку по сітці
Визначення пошуку в сітці
Метод пошуку в сітці простий, модель буде оцінено за всіма комбінаціями, які ви передаєте у функції, за допомогою перехресної перевірки.
Наприклад, ви хочете спробувати модель з 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) ...
Щоразу випадковий ліс експериментує з перехресною перевіркою. Одним із недоліків пошуку по сітці є кількість експериментів. Він може стати дуже вибуховим, коли кількість комбінацій велика. Щоб подолати цю проблему, ви можете скористатися довільним пошуком
Визначення випадкового пошуку
Велика різниця між випадковим пошуком і пошуком у сітці полягає в тому, що випадковий пошук не оцінюватиме всю комбінацію гіперпараметрів у просторі пошуку. Замість цього він буде випадковим чином вибирати комбінацію на кожній ітерації. Перевагою є менша вартість обчислень.
Встановіть контрольний параметр
Щоб побудувати та оцінити модель, ви будете діяти так:
- Оцініть модель із налаштуванням за замовчуванням
- Знайдіть найкраще число mtry
- Знайдіть найкращу кількість максимальних вузлів
- Знайдіть найкращу кількість nдерев
- Оцініть модель на тестовому наборі даних
Перш ніж розпочати дослідження параметрів, вам потрібно встановити дві бібліотеки.
- caret: бібліотека машинного навчання R. Якщо у вас є встановити R з r-істотним. Він уже є в бібліотеці
- Анаконда: conda install -cr r-caret
- e1071: бібліотека машинного навчання R.
- Анаконда: conda install -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 від 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) Пошук найкращих максимальних вузлів
Вам потрібно створити цикл для оцінки різних значень максимальних вузлів. У наступному коді ви:
- Створіть список
- Створити змінну з найкращим значенням параметра 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[[ключ]] <- 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
Підсумки
Ми можемо підсумувати, як навчити та оцінити випадковий ліс за допомогою таблиці нижче:
Library | мета | функція | Параметр |
---|---|---|---|
randomForest | Створіть випадковий ліс | RandomForest() | формула, ntree=n, mtry=FALSE, maxnodes = NULL |
каре | Створіть перехресну перевірку папки K | trainControl() | метод = "cv", число = n, пошук = "сітка" |
каре | Тренувати випадковий ліс | поїзд () | formula, df, method = “rf”, metric= “Accuracy”, trControl = trainControl(), tuneGrid = NULL |
каре | Передбачити поза вибіркою | передбачати | модель, нові дані= df |
каре | Матриця плутанини та статистика | confusionMatrix() | модель, y тест |
каре | змінна важливість | 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"