首页 > 解决方案 > 预测 H2O 模型(管道工)-> 错误:java.lang.IllegalArgumentException:测试/验证数据集没有与训练集相同的列

问题描述

我有一个关于如何使用 Plumber 将训练有素的 H2O 模型投入生产的疑问。

我使用以下代码训练了模型,并将其导出到我的 PC 以与 Plumber 一起使用。

h2o.saveModel (model11_gbm_es2, path = "model11_gbm_es2")

我使用以下代码创建管道工文件并运行它。

# script name:
# plumber.R  

library(plumber)
library(h2o)

h2o.init()
mywinmodel <- h2o.loadModel("GBM_model_R_1632666878843_1")
   
#' predict the success or failure with 'the 'GBM' model 
#' @param iyear:numeric
#' @param country:numeric
#' @param region:numeric
#' @param natlty1:numeric
#' @param fe_distancia:numeric
#' @param fe_fe_vicinity:numeric
#' @param fe_INT_LOG:numeric
#' @param fe_INT_IDEO:numeric
#' @param fe_INT_ANY:numeric
#' @param fe_fe_attacktype1:numeric
#' @param fe_fe_nperps_tram:numeric
#' @param fe_fe_nperpcap_tram:numeric
#' @param fe_fe_nkill_tram:numeric
#' @param fe_fe_nkillter_tram:numeric
#' @param fe_fe_nwound_tram:numeric
#' @param fe_fe_nwoundte_tram:numeric
#' @param fe_fe_targtype1_retram:numeric
#' @param fe_fe_weaptype1_retram:numeric
#' @param fe_fe_trimestre:numeric
#' @param fe_fe_quincena:numeric
#' @get /predict
#' @serializer html
#' @response 200 Returns the class ('Yes' or 'No')

function (iyear,country,region,natlty1,fe_distancia,
          fe_fe_vicinity,fe_INT_LOG,fe_INT_IDEO,fe_INT_ANY,
          fe_fe_attacktype1,fe_fe_nperps_tram,
          fe_fe_nperpcap_tram,fe_fe_nkill_tram,
          fe_fe_nkillter_tram,fe_fe_nwound_tram,
          fe_fe_nwoundte_tram,fe_fe_targtype1_retram,
          fe_fe_weaptype1_retram,fe_fe_trimestre,
          fe_fe_quincena) {
                  input_data_final <<- as.h2o(data.frame(iyear,country,region,natlty1,fe_distancia,
                                                fe_fe_vicinity,fe_INT_LOG,fe_INT_IDEO,fe_INT_ANY,
                                                fe_fe_attacktype1,fe_fe_nperps_tram,
                                                fe_fe_nperpcap_tram,fe_fe_nkill_tram,
                                                fe_fe_nkillter_tram,fe_fe_nwound_tram,
                                                fe_fe_nwoundte_tram,fe_fe_targtype1_retram,
                                                fe_fe_weaptype1_retram,fe_fe_trimestre,
                                                fe_fe_quincena,stringsAsFactors = FALSE))
                  # and make sure they really are numeric
                  input_data_final <<- as.h2o(data.frame(t(sapply(input_data_final, as.numeric))))
                  # predict and return result
                  prediceme <<- h2o.predict(mywinmodel, newdata=input_data_final)
                  prediceme
                }

在此之后,我提出了一个管道工的实例

library(plumber)
r <- plumb("plumber.R")
r$run(port = 8000)

但是当输入数据时,无论是通过网络环境还是通过控制台中的“curl”调用,我都会收到这个错误......

{"error":"500 - Internal server error","message":"Error: java.lang.IllegalArgumentException: Test/Validation dataset has no columns in common with the training set\r\n"}

我已经尝试修复它很长时间了,但我做不到。有人可以帮助我吗?我做错了什么?

太感谢了 !!!

标签: predictionh2oplumber

解决方案


推荐阅读