построение значений mtry и n_tree вместе с точностью - PullRequest
0 голосов
/ 13 мая 2019

Мне нужно нанести на график значения всех значений гиперпараметров ntree и mtry вместе с точностью на графике со всеми тремя значениями и выяснить значение пересечения этих трех значений, чтобы получить оптимальные значения в пределах диапазона, который проходит

for(i in seq(1,100))
{    
    ntried[i]<-i
    for (j in seq(1,10)) 
    {
    mtried[j]<-j    
    rf_mod1 <- randomForest(target~., data = heartdb, ntree = 
    ntried[i] , mtry= mtried[j] , importance= TRUE )

    t<-predict(rf_mod1,data = heartdb)
    p<-table(actual =heartdb$target, prediction = t )
    accuracy[i]<-sum(diag(p))/sum(p)

   }
}

1 Ответ

1 голос
/ 13 мая 2019

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

accuracy <- matrix(rep( 0, times = 1000), ncol = 10)
for(i in seq(1,100))
{    
    ntried <- i
    for (j in seq(1,10)) 
    {
    mtried <- j    
    rf_mod1[j] <- randomForest(target~., data = heartdb, ntree = 
    ntried , mtry= mtried , importance= TRUE )

    t<-predict(rf_mod1,data = heartdb)
    p<-table(actual =heartdb$target, prediction = t )
    accuracy[i,j]<-sum(diag(p))/sum(p)
   }

}

Теперь каждый ряд точности содержит 10 погрешностей. По строке ищите максимум:

apply(accuracy, 1, max) 

Вы можете даже построить максимум на уровне ntried:

plot(seq(1,100), apply(accuracy, 1, max))

Наконец, вы можете вызвать следующее, чтобы получить строку (уровень ntried), которая содержит максимальную точность для всех 1000 лесов:

which(apply(accuracy, 1, max) == max(apply(accuracy, 1, max)))
...