我建立了一个线性回归i R.现在我想存储模型并用它来每周评估一次新的数据集。
有人可以帮我解决这个问题吗?
如何保存模型以及如何导入模型并在新数据集上使用它。
答案 0 :(得分:5)
您可以将模型保存在文件中,并在需要时加载它。
例如,您可能有这样的一行来训练您的模型:
the_model <- glm(my_formula, family=binomial(link='logit'),data=training_set)
此模型可以保存:
save(file="modelfile",the_model) #the name of the file is of course arbitrary
稍后,假设该文件位于工作目录中,您可以通过首先使用
加载该模型来重用该模型load(file="modelfile")
然后可以将模型应用于(新)数据集test_set
,例如,
test_set$pred <- predict(the_model, newdata=test_set, type='response')
请注意,名称the_model
不应分配给变量(不要使用the_model <- load("modelfile")
之类的内容)。具有名称的模型随load()
函数一起提供。此外,该模型保持与以前相同。新观察结果并未改变模型中的系数或任何内容 - 应用“旧”模型来预测新数据。
但是,如果您有一个额外的标记集,并且您希望根据这些新观察结果训练/改进模型,则可以按照@David的答案中的建议进行操作。
希望这有帮助。
答案 1 :(得分:1)
您可以使用update
功能:
set.seed(1)
dat <- data.frame(x = rnorm(100),
y = rnorm(100, 0.01))
lmobj <- lm(y~x, dat)
coef(lmobj)
# (Intercept) x
# -0.027692614 -0.001060386
dat2 <- data.frame(x = rnorm(10),
y = rnorm(10, 0.01))
lmobj2 <- update(lmobj, dat2)
coef(lmobj2)
# (Intercept) y
# 0.1088614395 -0.0009323697
#--------------------------------
# to make things a bit more clear:
# lmobj2 is not the same as a new model such as the following
lmobj3 <- lm(y~x, dat2)
coef(lmobj3)
#(Intercept) x
#-0.02386837 0.06973995