如何剥离glm模型?
How to strip down the glm model?
由 glm
编辑的对象 return 包含 residuals
、fitted values
、effects
、qr$qr
、linear.predictors
、 weights
&c &c 加起来是一个巨大的对象(如果输入足够大)。
我如何剥离它以便predict
之类的东西仍然有效?
理想情况下,我想要一个 return 相当于 function(x) predict(my_model,data.frame(x=x))
的 small 函数对象的函数;像 as.stepfun
for isoreg
.
大多数模型组件都是描述性的,并不是 predict
工作所必需的。一个辅助函数(HT: R-Bloggers)可以用来去除脂肪:
stripGlmLR = function(cm) {
cm$y = c()
cm$model = c()
cm$residuals = c()
cm$fitted.values = c()
cm$effects = c()
cm$qr$qr = c()
cm$linear.predictors = c()
cm$weights = c()
cm$prior.weights = c()
cm$data = c()
cm$family$variance = c()
cm$family$dev.resids = c()
cm$family$aic = c()
cm$family$validmu = c()
cm$family$simulate = c()
attr(cm$terms,".Environment") = c()
attr(cm$formula,".Environment") = c()
cm
}
现在您可以将它应用到您的模型中,将尺寸缩小 5 个以上的数量级(在此示例中):
traindata <- data.frame(x = rnorm(1e6), y = rnorm(1e6))
testdata <- data.frame(x = rnorm(10))
mod1 <- glm(y~x, data= traindata)
mod2 <- stripGlmLR(mod1)
format(object.size(mod1), units = "Kb")
# [1] "492234.5 Kb"
format(object.size(mod2), units = "Kb")
# [1] "18.5 Kb"
all(predict(object = mod1, newdata = testdata) ==
predict(object = mod2, newdata = testdata))
# [1] TRUE
请注意,如果您希望能够使用全套 glm
方法,则需要保留模型的其他组件。
由 glm
编辑的对象 return 包含 residuals
、fitted values
、effects
、qr$qr
、linear.predictors
、 weights
&c &c 加起来是一个巨大的对象(如果输入足够大)。
我如何剥离它以便predict
之类的东西仍然有效?
理想情况下,我想要一个 return 相当于 function(x) predict(my_model,data.frame(x=x))
的 small 函数对象的函数;像 as.stepfun
for isoreg
.
大多数模型组件都是描述性的,并不是 predict
工作所必需的。一个辅助函数(HT: R-Bloggers)可以用来去除脂肪:
stripGlmLR = function(cm) {
cm$y = c()
cm$model = c()
cm$residuals = c()
cm$fitted.values = c()
cm$effects = c()
cm$qr$qr = c()
cm$linear.predictors = c()
cm$weights = c()
cm$prior.weights = c()
cm$data = c()
cm$family$variance = c()
cm$family$dev.resids = c()
cm$family$aic = c()
cm$family$validmu = c()
cm$family$simulate = c()
attr(cm$terms,".Environment") = c()
attr(cm$formula,".Environment") = c()
cm
}
现在您可以将它应用到您的模型中,将尺寸缩小 5 个以上的数量级(在此示例中):
traindata <- data.frame(x = rnorm(1e6), y = rnorm(1e6))
testdata <- data.frame(x = rnorm(10))
mod1 <- glm(y~x, data= traindata)
mod2 <- stripGlmLR(mod1)
format(object.size(mod1), units = "Kb")
# [1] "492234.5 Kb"
format(object.size(mod2), units = "Kb")
# [1] "18.5 Kb"
all(predict(object = mod1, newdata = testdata) ==
predict(object = mod2, newdata = testdata))
# [1] TRUE
请注意,如果您希望能够使用全套 glm
方法,则需要保留模型的其他组件。