Как я могу усреднить несколько объектов GBM?

Есть ли способ усреднить несколько объектов gbm, чтобы вывод можно было визуализировать с помощью gbm.plot?

Например, используя данные радужной оболочки (неуместно, но код выполняется), я создал функцию f, которая случайным образом выбирает равное количество "обратных" наблюдений для "pres" наблюдений, а затем подгоняет модель с помощью gbm.step().

library('dismo')
library('gbm')
library('readr')

pres <- subset(iris, iris$Species == "setosa")
pres <- pres[1:20,]
pres$Species <- 1
back <- subset(iris, iris$Species == "versicolor")
back$Species <- 0

f <- function(pres, back){

# randomly sample an equal number of background to present points
row_idx = sample(1:nrow(back), 1*nrow(pres)) #index of rows to be used
Back_formatted <- back[row_idx, ] #subset the data

# presence and absence also have different variables so select those 
that overlap
shared_cols = intersect(colnames(Back_formatted), 
                    colnames(pres))
# join presences and absences by common column names
pres_df <- pres[, shared_cols]
back_df <- Back_formatted[, shared_cols]
data_df <-as.data.frame(rbind(pres_df, back_df))


output <- gbm.step(data=data_df, 
               gbm.x = 
c("Sepal.Length","Sepal.Width","Petal.Length","Petal.Width"),
               gbm.y = "Species",
               family = "bernoulli", 
               tree.complexity = 5,
               learning.rate = 0.01,
               bag.fraction = 1)
return(output)
}

Затем я повторяю эту функцию 10 раз, чтобы получить список выходных данных gbm.model.

v <- replicate(10, f(pres, back), simplify = FALSE) 

Я могу построить каждый из этих выходов отдельно в цикле for:

for (i in 1:10){
  gbm.plot(v[[i]])
}

Однако есть ли способ усреднить каждый выход в одну модель, которая затем может быть построена?

Любая помощь будет очень высоко ценится!

0 ответов

Другие вопросы по тегам