Подтвердить что ты не робот

Значения для ntree и mtry для случайной модели регрессии леса

Я использую R-пакет случайного леса для регрессии по некоторым биологическим данным, и мой размер данных для обучения составляет 38772 X 201, и мне просто интересно, что будет хорошим значением для количества деревьев "ntree" и количества переменная на уровне "mtry" и если имеется приблизительная формула для нахождения таких значений параметров. каждая строка в моих входных данных представляет собой 200 символов, представляющих аминокислотную последовательность, и я хочу построить модель регрессии для использования такой последовательности, чтобы предсказать расстояния между белками.

4b9b3361

Ответ 1

По умолчанию для mtry вполне разумно, поэтому на самом деле не нужно гадать с ним. Для оптимизации этого параметра существует функция tuneRF. Однако имейте в виду, что это может привести к смещению.

Нет оптимизаций для количества реплик bootstrap. Я часто начинаю с ntree=501, а затем рисует случайный объект леса. Это покажет вам конвергенцию ошибок на основе ошибки OOB. Вы хотите, чтобы достаточно деревьев, чтобы стабилизировать ошибку, но не так много, что вы перевязываете ансамбль, что приводит к обману.

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

Для размеров вашей проблемы я бы начал ntree=1501. Я также рекомендовал бы взглянуть на один из опубликованных подходов выбора переменных, чтобы уменьшить количество ваших независимых переменных.

Ответ 2

Короткий ответ - нет.

Функция randomForest, конечно, имеет значения по умолчанию для ntree и mtry. Значение по умолчанию для mtry часто (но не всегда) разумно, в то время как в целом люди захотят увеличить ntree от него по умолчанию 500 бит.

"Правильное" значение для ntree, как правило, не вызывает большого беспокойства, так как это будет совершенно очевидно с небольшим изменением того, что предсказания из модели не будут сильно меняться после определенного количества деревьев.

Вы можете потратить (читай: отходы) много времени на такие вещи, как mtrysampsize и maxnodes и nodesize и т.д.), возможно, в некоторой степени, но по моему опыту не много. Однако каждый набор данных будет отличаться. Иногда вы можете увидеть большую разницу, а иногда и вовсе.

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

Кроме того, как-то я забыл, что сам пакет ranfomForest имеет функцию tuneRF, которая специально предназначена для поиска "оптимального" значения для mtry.

Ответ 3

Может ли этот документ помочь? Ограничение количества деревьев в произвольных лесах

Абстрактный. Цель этой статьи - предложить простую процедуру, которая априори определяет минимальное количество классификаторов для объединения в порядке для получения уровня точности предсказания, аналогичного тому, который был получен с помощью сочетание более крупных ансамблей. Процедура основана на McNemar непараметрический тест значимости. Знание априори минимум размер ансамбля классификатора, обеспечивающий наилучшую точность прогнозирования, составляет выигрыш для затрат времени и памяти, особенно для огромных баз данных и приложения реального времени. Здесь мы применили эту процедуру к четырем кратным классификационные системы с деревом решений C4.5 (Breimans Bagging, Hos Случайные подпространства, их комбинация мы обозначили как "Bagfs" и "Breimans" Случайные леса) и пять крупных баз данных. Стоит отметить что предлагаемая процедура может быть легко распространена на другую базу а также алгоритм обучения, чем дерево решений. Результаты эксперимента показали, что можно значительно сократить количество деревьев. Мы также показало, что минимальное количество деревьев, необходимых для получения лучшая точность прогнозирования может отличаться от одной комбинации классификаторов метод к другому

Они никогда не используют более 200 деревьев.

введите описание изображения здесь

Ответ 4

Я использую код ниже, чтобы проверить точность, когда я играю с ntree и mtry (изменение параметров):

results_df <- data.frame(matrix(ncol = 8))
colnames(results_df)[1]="No. of trees"
colnames(results_df)[2]="No. of variables"
colnames(results_df)[3]="Dev_AUC"
colnames(results_df)[4]="Dev_Hit_rate"
colnames(results_df)[5]="Dev_Coverage_rate"
colnames(results_df)[6]="Val_AUC"
colnames(results_df)[7]="Val_Hit_rate"
colnames(results_df)[8]="Val_Coverage_rate"


trees = c(50,100,150,250)
variables = c(8,10,15,20)

for(i in 1:length(trees))
{
  ntree = trees[i]
  for(j in 1:length(variables))
  {
    mtry = variables[j]
    rf<-randomForest(x,y,ntree=ntree,mtry=mtry)
    pred<-as.data.frame(predict(rf,type="class"))
    class_rf<-cbind(dev$Target,pred)

    colnames(class_rf)[1]<-"actual_values"
    colnames(class_rf)[2]<-"predicted_values"
    dev_hit_rate = nrow(subset(class_rf, actual_values ==1&predicted_values==1))/nrow(subset(class_rf, predicted_values ==1))
    dev_coverage_rate = nrow(subset(class_rf, actual_values ==1&predicted_values==1))/nrow(subset(class_rf, actual_values ==1))

    pred_prob<-as.data.frame(predict(rf,type="prob"))
    prob_rf<-cbind(dev$Target,pred_prob)
    colnames(prob_rf)[1]<-"target"
    colnames(prob_rf)[2]<-"prob_0"
    colnames(prob_rf)[3]<-"prob_1"
    pred<-prediction(prob_rf$prob_1,prob_rf$target)
    auc <- performance(pred,"auc")
    dev_auc<-as.numeric([email protected])

    pred<-as.data.frame(predict(rf,val,type="class"))
    class_rf<-cbind(val$Target,pred)

    colnames(class_rf)[1]<-"actual_values"
    colnames(class_rf)[2]<-"predicted_values"
    val_hit_rate = nrow(subset(class_rf, actual_values ==1&predicted_values==1))/nrow(subset(class_rf, predicted_values ==1))
    val_coverage_rate = nrow(subset(class_rf, actual_values ==1&predicted_values==1))/nrow(subset(class_rf, actual_values ==1))

    pred_prob<-as.data.frame(predict(rf,val,type="prob"))
    prob_rf<-cbind(val$Target,pred_prob)
    colnames(prob_rf)[1]<-"target"
    colnames(prob_rf)[2]<-"prob_0"
    colnames(prob_rf)[3]<-"prob_1"
    pred<-prediction(prob_rf$prob_1,prob_rf$target)
    auc <- performance(pred,"auc")
    val_auc<-as.numeric([email protected])
    results_df = rbind(results_df,c(ntree,mtry,dev_auc,dev_hit_rate,dev_coverage_rate,val_auc,val_hit_rate,val_coverage_rate))
  }
}   

Ответ 5

Один хороший трюк, который я использую, состоит в том, чтобы сначала начать с первого квадратного корня из числа предикторов и подключить это значение для "mtry". Обычно это примерно такое же значение, что и тюнерff funtion в случайном лесу.