使用已创建的模型对R中的新数据集进行评分

时间:2015-11-12 17:23:02

标签: r model predict

我建立了一个线性回归i R.现在我想存储模型并用它来每周评估一次新的数据集。

有人可以帮我解决这个问题吗?

如何保存模型以及如何导入模型并在新数据集上使用它。

2 个答案:

答案 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