2017-01-25 5 views
0

Я хочу автоматически настраивать модель случайного леса, поскольку мои переменные продолжают меняться в режиме реального времени. Я использую набор данных iris.Автоматически настраивает случайный лес

Мой код

jk = iris 

library(randomForest) 
library(caret) 

fgl.res <- tuneRF(lm[,-5], lm[,5], stepFactor=1.5) 

o/p: 
mtry = 2 OOB error = 5.33% 
Searching left ... 
Searching right ... 
mtry = 3 OOB error = 4% 
0.25 0.05 
mtry = 4 OOB error = 5.33% 
-0.3333333 0.05 

Выше я хочу, чтобы в fgl.res коде автоматически выбирает индекс Species столбца т.е. 5 в iris наборе данных и вставить в fgl.res коде.

Затем использовать первую линию fgl.res вывода (о/р) и принимает значение от "mtry = 2 OOB error = 5.33% " и использовать его в случайном коде леса, т.е. присвоить значение mtry и oob.error, как показано ниже:

mod2<-randomForest(Species~., data=lm, ntree=50, mtry=2, oob.error=0.0533) 

I попробовали много способов, но ничего не вышло, как автоматически вставлять значение в код с вывода fgl.res.

ответ

0

Я не знаю, правильно ли я понял вашу проблему, но вы можете использовать этот подход.
Когда вы используете tuneRF, вам нужно выбрать mtry с самой низкой ошибкой OOB. Я использую функцию invisible(capture.output(...)), чтобы скрыть отображение любого выхода в консоли после ввода функции tuneRF.

Пример:

# load library 
library(randomForest) 
library(caret) 

# data 
data_iris = iris 

# repeat the analysis 
set.seed(4543) 

# tuneRF 
invisible(capture.output(fgl.res <- tuneRF(x = data_iris[,-5], y= 
data_iris[,5], stepFactor=1.5))) 

# choose the best mtry based on the lowest OOB error 
best_mtry <- fgl.res[fgl.res[, 2] == min(fgl.res[, 2]), 1] 

# choose the lowest OOB error 
best_oob <- fgl.res[fgl.res[, 2] == min(fgl.res[, 2]), 2] 

# caluclate RF 
mod2<-randomForest(Species~., data=data_iris, ntree=50, mtry=best_mtry, 
oob.error=best_oob) 

Если вы хотите просто извлечь первую строку вывода fgl.res и принять значение mtry и ошибок OOB, вы должны использовать:

# choose the best mtry based on the lowest OOB error 
best_mtry <- fgl.res[1, 1] 

# choose the lowest OOB error 
best_oob <- fgl.res[1, 2] 

Я знаю, что вы разместили этот вопрос 10 месяцев назад, но, возможно, этот подход был бы полезен для других пользователей.

Смежные вопросы