在R中保存和加载lightGBM模型

nxagd54h  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(143)

我尝试保存并稍后加载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没有。

wz3gfoph

wz3gfoph1#

您必须使用lightgbm的开发版本来保存和加载模型,并使用saveRDS()/readRDS()作为正常的here报告。但是安装lightgbm的开发版本并不是那么简单。您必须在Windows中按照以下步骤安装lightgbm的开发版本

使用CMake从源代码安装

您需要首先从https://git-scm.com/downloadshttps://cmake.org/download/安装gitCMake
注意:此方法仅在64位系统上受支持。如果您需要在32位Windows(i386)上运行LightGBM,请按照“安装CRAN包”中的说明进行操作。

Windows准备

注意:Windows用户可能需要以管理员权限运行(R或命令提示符,具体取决于您安装此软件包的方式)。
必须安装64位版本的Rtools。安装RtoolsCMake后,请确保将以下路径添加到环境变量PATH中。
· Rtools:如果你有Rtools 4.3,例如:

C:\rtools43\mingw64\bin

C:\rtools43\usr\bin

· CMake示例:

C:\Program Files\CMake\bin

· R示例:

C:\Program Files\R\R-4.3.1\bin

安装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 --version

然后按回车键您应该会看到一条消息,告诉您安装了哪个版本的pandoc,并提供一些其他信息。

使用CMake安装

在您的操作系统上完成上述“准备”步骤后,在命令提示符下使用以下命令以管理员权限运行,构建并安装R包:

git clone --recursive https://github.com/microsoft/LightGBM
cd LightGBM
Rscript build_r.R --use-msys2

在此之后,您的代码运行没有任何错误。我花了一整天的时间才弄清楚如何安装lightgbm的开发版本。

相关问题