在使用 R 中的文本包训练回归模型时,模型的大小随着训练数据点的数量而增加,导致模型对象变得不必要的大。这些模型是使用 parsnip 包和 glmnet 引擎创建的。 R 的内存处理系统可以防止数据重复,因此很难区分模型的哪些组件/属性占用了空间;例如:object_size(model) 显示 700 MB,但 object_size(model$final_recipe) 和 object_size(model$final_model) 几乎相同,分别为 698 MB,因此不显示组件的实际大小。
示例: object_size(模型) # 700Mb object_size(模型$final_recipe) # 698Mb object_size(模型$final_model) # 698Mb
删除 Final_recipe 属性时(仅作为示例,实际上我不会做任何事情): 模型$final_recipe <- NULL
模型的大小仍然是700Mb: object_size(模型) # 700Mb
如果您只关心预测,您可以将系数提取为矩阵并通过矩阵乘法进行预测。此示例显示结果与
predict(model, data)
相同。
library(glmnet)
#> Loading required package: Matrix
#> Loaded glmnet 4.1-7
x <- mtcars[, c("cyl", "wt", "gear")] |> as.matrix()
y <- mtcars$mpg
fit1 <- cv.glmnet(x, y)
# extract coefficients
b <- coef(fit1, "lambda.min")
# compare predictions
data.frame(
y,
x,
pred1 = as.vector(cbind(1, x) %*% b), # predict with matrix multiplication
pred2 = as.vector(predict(fit1, x, "lambda.min"))
) |>
head()
#> y cyl wt gear pred1 pred2
#> Mazda RX4 21.0 6 2.620 4 22.16138 22.16138
#> Mazda RX4 Wag 21.0 6 2.875 4 21.39066 21.39066
#> Datsun 710 22.8 4 2.320 4 25.90130 25.90130
#> Hornet 4 Drive 21.4 6 3.215 3 20.36304 20.36304
#> Hornet Sportabout 18.7 8 3.440 3 16.84980 16.84980
#> Valiant 18.1 6 3.460 3 19.62254 19.62254
# compare sizes
object.size(fit1)
#> 26496 bytes
object.size(b)
#> 1976 bytes
创建于 2024-01-19,使用 reprex v2.0.2