Размер модели randomForest зависит от размера тренировочного набора: как этого избежать? - PullRequest
1 голос
/ 21 мая 2019

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

Я прочитал, что существует ряд опций и пакетов для уменьшения объема памяти модели.

Тем не менее, я не понимаю, почему размер тренировочного комплекта привязан к размеру модели? В конце концов, когда есть коэффициенты леса, зачем сохранять исходный набор данных?

df <- iris
model <- randomForest::randomForest(Species ~ ., data = df, 
                 localImp = FALSE,
                 importance = FALSE,
                 keep.forest = TRUE,
                 keep.inbag = FALSE,
                 proximity=FALSE,
                 ntree = 25)
object.size(model)/1000
#> 73.2 bytes

df <- df[sample(nrow(df), 50), ]
model <- randomForest::randomForest(Species ~ ., data = df, 
                 localImp = FALSE,
                 importance = FALSE,
                 keep.forest = TRUE,
                 keep.inbag = FALSE,
                 proximity=FALSE,
                 ntree = 25)
object.size(model)/1000
#> 43 bytes

Создано в 2019-05-21 с помощью представительного пакета (v0.2.1)

Я попробовал упомянутые выше приемы, чтобы уменьшить размер, но их эффект незначителен по сравнению с ролью размера тренировочного набора. Есть ли способ удалить эту информацию?

1 Ответ

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

Я думаю, что вы можете удалить некоторые части модели после того, как вы подходите:

object.size(model)/1000
# 70.4 bytes

model$predicted <- NULL # remove predicted
model$y <- NULL # remove y
#.. possibly other parts aren't needed
object.size(model)/1000
# 48.3 bytes

Я проверил с помощью predict(model, df), чтобы увидеть, будет ли оно работать, и оно работает.

Используйте names(model) для проверки элементов внутри model.

Похоже, что $votes большой, и он вам не нужен, вот больше элементов, которые я благополучно удалил:

model$predicted <- NULL
model$y <- NULL
model$err.rate <- NULL
model$test <- NULL
model$proximity <- NULL
model$confusion <- NULL
model$localImportance <- NULL
model$importanceSD <- NULL
model$inbag <- NULL
model$votes <- NULL
model$oob.times <- NULL


object.size(model)/1000
# 32.3 bytes

Пример:

df <- iris
model <- randomForest::randomForest(Species ~ ., data = df, 
                 localImp = FALSE,
                 importance = FALSE,
                 keep.forest = TRUE,
                 keep.inbag = FALSE,
                 proximity=FALSE,
                 ntree = 25)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...