我尝试保存并稍后加载lightGBM模型,但无法执行此操作。我已经尝试了saveRDS()和readRDS函数,但是当我预测时,我得到了这个错误:
预测器$predict(data = data,start_iteration = start_iteration,:尝试使用已不存在的Booster。如果您调用了Booster$finalize()或使用saveRDS()保存了此Booster,则可能会发生这种情况。要避免将来出现此错误,请使用saveRDS.lgb.Booster()或Booster$save_model()保存lightgbm Booster。
如果我在训练完模型后立即使用它,或者在将它加载到工作区的会话中使用它,它会工作得很好。问题是当我尝试在另一个应用程序上使用该模型时。下面是我如何编码的:
library(tidymodels)
library(lightgbm)
library(bonsai)
TMA_model <- data.frame(
age = c(50, 45, 60, 55, 70, 34, 55, 48, 58, 42,
52, 47, 62, 57, 72, 36, 53, 49, 59, 44,
51, 46, 61, 56, 71, 35, 54, 50, 60, 43),
delta_creat = c(1.2, 1.0, 1.5, 1.3, 1.8, 1.2, 1.3, 1.4, 1.1, 1.6,
1.2, 1.0, 1.5, 1.3, 1.8, 1.2, 1.3, 1.4, 1.1, 1.6,
1.2, 1.0, 1.5, 1.3, 1.8, 1.2, 1.3, 1.4, 1.1, 1.6),
max_LDH = c(300, 280, 320, 310, 330, 295, 325, 290, 315, 305,
305, 315, 290, 320, 300, 325, 280, 330, 310, 295,
310, 295, 330, 280, 320, 305, 310, 325, 315, 290),
min_plat = c(150, 140, 160, 155, 170, 145, 165, 150, 135, 160,
160, 155, 170, 145, 150, 160, 140, 170, 155, 145,
155, 145, 170, 140, 160, 150, 155, 160, 165, 135),
min_hb = c(12, 11.5, 13, 12.5, 14, 11.8, 13.2, 12.2, 12.6, 11.9,
12.4, 11.7, 13.1, 12.3, 13.5, 11.6, 12.8, 12.1, 13.4, 12.0,
12.9, 11.6, 13.2, 12.8, 13.0, 11.5, 12.7, 12.3, 12.5, 11.8),
max_ast = c(40, 38, 42, 41, 45, 37, 43, 39, 44, 40,
42, 38, 44, 41, 40, 39, 43, 38, 45, 37,
44, 37, 42, 38, 41, 40, 43, 39, 44, 38),
max_bt = c(37, 37.2, 37.5, 37.3, 37.8, 37.1, 37.4, 37.6, 37.0, 37.7,
37.2, 37.1, 37.5, 37.4, 37.3, 37.0, 37.6, 37.8, 37.2, 37.4,
37.7, 37.1, 37.3, 37.8, 37.0, 37.4, 37.2, 37.6, 37.5, 37.1),
max_ttap = c(100, 95, 105, 102, 110, 97, 108, 93, 103, 98,
105, 100, 95, 110, 102, 108, 97, 93, 103, 95,
100, 97, 105, 93, 108, 102, 110, 98, 103, 100),
max_tp = c(12, 12.2, 12.5, 12.3, 12.8, 12.1, 12.4, 12.6, 12.0, 12.7,
12.3, 12.2, 12.1, 12.8, 12.4, 12.0, 12.6, 12.7, 12.5, 12.3,
12.1, 12.4, 12.7, 12.8, 12.0, 12.2, 12.3, 12.6, 12.5, 12.4),
hypertension = c(1, 0, 1, 1, 0, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 0, 1, 1, 0,
0, 1, 0, 1, 0, 0, 1, 1, 0, 1),
MAP = c(90, 92, 88, 91, 89, 93, 87, 94, 86, 90,
92, 94, 88, 90, 91, 89, 87, 93, 86, 92,
91, 90, 93, 94, 86, 88, 89, 87, 92, 91),
TMA_class = factor(c(1, 2, 3, 4, 5, 1, 2, 3, 4, 5,
1, 2, 3, 4, 5, 1, 2, 3, 4, 5,
1, 2, 3, 4, 5, 1, 2, 3, 4, 5))
)
new_data <- data.frame(
age = c(48, 55, 62, 54, 67),
delta_creat = c(1.2, 1.3, 1.1, 1.4, 1.6),
max_LDH = c(305, 290, 320, 310, 295),
min_plat = c(150, 160, 135, 155, 145),
min_hb = c(12.2, 12.6, 11.9, 12.4, 11.7),
max_ast = c(38, 43, 39, 44, 40),
max_bt = c(37.2, 37.4, 37.0, 37.6, 37.1),
max_ttap = c(95, 108, 93, 103, 98),
max_tp = c(12.2, 12.4, 12.0, 12.6, 12.7),
hypertension = c(1, 0, 1, 0, 1),
MAP = c(92, 87, 94, 86, 90)
)
model_spec <-
boost_tree(mode = 'classification',
mtry = 6,
trees = 50,
min_n = 50,
tree_depth = 5) %>%
set_engine('lightgbm')
recipe <- recipe(TMA_class ~ ., data = TMA_model)
model_fit <- workflow() %>%
add_recipe(recipe) %>%
add_model(model_spec) %>%
fit(data = TMA_model)
saveRDS(model_fit, "model_fit.rds")
model_b <- readRDS("model_fit.rds")
new_data_predictions <- predict(model_b, new_data)
print(new_data_predictions)
我在保存或加载它时没有错误,但我不能用加载的模型进行预测。还有,我对其他模型没有问题,像Lasso或XGBoost,它们工作得很好,但LightGBM没有。
1条答案
按热度按时间wz3gfoph1#
您必须使用
lightgbm
的开发版本来保存和加载模型,并使用saveRDS()
/readRDS()
作为正常的here报告。但是安装lightgbm
的开发版本并不是那么简单。您必须在Windows中按照以下步骤安装lightgbm
的开发版本使用CMake从源代码安装
您需要首先从https://git-scm.com/downloads和https://cmake.org/download/安装
git
和CMake
注意:此方法仅在64位系统上受支持。如果您需要在32位Windows(i386)上运行LightGBM,请按照“安装CRAN包”中的说明进行操作。
Windows准备
注意:Windows用户可能需要以管理员权限运行(R或命令提示符,具体取决于您安装此软件包的方式)。
必须安装64位版本的
Rtools
。安装Rtools
和CMake
后,请确保将以下路径添加到环境变量PATH中。· Rtools:如果你有Rtools 4.3,例如:
· CMake示例:
· R示例:
安装MSYS 2(R 4.x)
从https://www.msys2.org/安装MSYS 2
安装Pandoc
从https://pandoc.org/installing.html下载Pandoc并安装
在Windows上,您可以使用经典的命令提示符或更现代的PowerShell终端。如果您在桌面模式下使用Windows,请在使用pandoc之前从“开始”菜单运行cmd或powershell命令并键入
chcp 65001
,以将编码设置为UTF-8。让我们检查一下是否安装了pandoc。类型然后按回车键您应该会看到一条消息,告诉您安装了哪个版本的pandoc,并提供一些其他信息。
使用CMake安装
在您的操作系统上完成上述“准备”步骤后,在命令提示符下使用以下命令以管理员权限运行,构建并安装R包:
在此之后,您的代码运行没有任何错误。我花了一整天的时间才弄清楚如何安装
lightgbm
的开发版本。