Как правильно `dput` подобрать случайную лесную регрессию (с помощью каретки) в файл ASCII и воссоздать ее позже? - PullRequest
0 голосов
/ 05 сентября 2018

Я хочу сохранить обученную каретами модель случайного леса в файл и загрузить ее в другую программу. Я знаю, что могу сделать это путем записи / чтения двоичного файла через saveRDS / readRDS, но я хотел бы иметь файл ASCII вместо двоичного файла. Я хотел бы, чтобы файл был минимальным, но все еще пригодным для прогнозов. Нечто похожее на это но для рф вместо лм. Спасибо

1 Ответ

0 голосов
/ 06 сентября 2018

Вот мой единственный снимок: если вы можете передавать только текстовые аргументы, а не двоичные структуры (например, найденные в моделях, сохраненных как файлы .rda или .rds), мне интересно, можете ли вы передать закодированное в base64 представление объекта :

mdl <- lm(mpg ~ disp + cyl, data=mtcars)
saveRDS(mdl, file="model.rds")

Это бинарный файл, который я упоминал ранее. Поскольку вы не можете прочитать это в Power BI, давайте закодируем его текстовым способом. Я использую base64enc здесь, но, вероятно, есть другие способы, которые могут быть более эффективными, более компактными и т. Д. Я не делаю этого утверждения здесь.

library(base64enc)
writeLines(base64encode("model.rds"), con="model.rds.b64")
tf <- tempfile()

Этот tf объект будет очищен обычным методом «очистки временного файла» для Power BI и / или вашей ОС. Следующая команда использует file=, но ей также легко можно передать вектор character (я полагаю, длины 1), если ваш код R получает этот объект другим методом:

base64decode(file="model.rds.b64", output=tf)
mdl2 <- readRDS(tf)
mdl
# Call:
# lm(formula = mpg ~ disp + cyl, data = mtcars)
# Coefficients:
# (Intercept)         disp          cyl  
#    34.66099     -0.02058     -1.58728  
identical(mdl, mdl2)
# [1] TRUE

И хотя это lm, а не rf, он довольно компактен:

file.info("model.rds")$size # same as "tf"
# [1] 2637
file.info("model.rds.b64")$size
# [1] 3518

(Не удивительно, что кодировка base64 вводит здесь увеличение на 33%, что ожидается .)

...