如何正确地将经过拟合的随机森林回归(带有脱字符号)“放”到ASCII文件并在以后重新创建?

时间:2018-09-05 18:01:47

标签: r powerbi random-forest

我想将经过脱字符号训练的随机森林模型保留到一个文件中,然后将其重新加载到另一个程序中。我知道我可以通过通过saveRDS / readRDS写入/读取二进制文件来做到这一点,但我想使用ASCII文件而不是二进制文件。 我希望文件尽可能小,但仍可用于预测。 与this类似,但用于rf而不是lm。 谢谢

1 个答案:

答案 0 :(得分:1)

这是我的一招:如果您只能传递文本参数而不能传递二进制结构(例如在保存为.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()

对于Power BI和/或您的操作系统,将使用常规的“临时文件清除”方法清除此tf对象。下一个命令使用file=,但是在通过另一种方法为您的R代码提供此对象的情况下,也可以很容易地将其传递给character向量(长度为1)。 / p>

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%,即expected。)