2015-09-11 2 views
0

Мне нужно использовать партию моделей RandomForest. Я решил использовать список list.of.models, чтобы сохранить их. Теперь я не знаю, как их применять. Прилагаю список, используяR. Как применить sapply() к случайному лесу

list.of.models <- append(list.of.models, randomForest(data, as.factor(label)) 

, а затем пытались использовать

sapply(list.of.models[length(list.of.models)], predict, data, type = "prob") 

назвать последний, но проблема в том, что RandomForest возвращает список многих значений, а не ученика.

Что делать, чтобы добавить в список RF-модель, а затем позвонить? Например позволяет взять исходный код

data(iris) 
set.seed(111) 
ind <- sample(2, nrow(iris), replace = TRUE, prob=c(0.8, 0.2)) 
iris.rf <- randomForest(Species ~ ., data=iris[ind == 1,]) 
iris.pred <- predict(iris.rf, iris[ind == 2,]) 
+0

Пробовал do.call (предсказать, с (РЧ $ вызовов, данных, тип = "проб")), но получил erroe «Ошибка в predict.randomForest (RandomForest (х = data, y = as.factor (label),: Неверное ограничение отсечки указано « – Powerfool

+0

head (sapply (rf $ call, pred, neuverd, type =" prob ")) тоже не работает Ошибка в UseMethod ("): не применимый метод для «предсказывать», применяемый к объекту класса «имя» – Powerfool

ответ

0

С Append вы как раз продлив model.list с элементами внутри RF.model, таким образом, не признается predict.randomForest и т.д., так как внешний список контейнера и его атрибут class = "randomForest" теряются. Также ввод данных называется newdata в pred.randomForest.

Это должно работать:

set.seed(1234) 
library(randomForest) 
data(iris) 

test = sample(150,25) 

#create 3 models 
RF.models = lapply(1:3,function(mtry) { 
    randomForest(formula=Species~.,data=iris[-test,],mtry=mtry) 
}) 
#append extra model 
RF.models[[length(RF.models)+1]] = randomForest(formula=Species~.,data=iris[-test,],mtry=4) 
summary(RF.models) 

#predict all models 
sapply(RF.models,predict,newdata=iris[test,]) 

#predict one model 
predict(RF.models[[length(RF.models)]],newdata=iris[test,])