【问题标题】:h2o MOJO prediction vs h2o.predict both different for GBMh2o MOJO 预测与 h2o.predict 对于 GBM 都不同
【发布时间】:2020-04-04 11:01:29
【问题描述】:

我从h2o.predicth2o.mojo_predict_df 获得了对同一测试数据集的不同预测。比较时 - 大约 50% 的记录具有相同的概率,但 50% 的记录不同,其中一些概率急剧变化 = 例如同一类为 0.88 至 0.55。

使用的建模算法是h2o.gbmh2o.download_mojo(gbm_model,get_genmodel_jar = T)

我正在尝试研究,发现更多帖子有类似问题但没有解决方案:

Reproduce predictions with MOJO file of a H2O GBM model

GLM model: h2o.predict gives very different results depending on number of rows used in the validation data

Why do I get different predictions with MOJO?

目前使用的代码如下:

# h2o start the cluster


h2o.init(nthreads=10,min_mem_size = '80g')

# variables 

predictors=c(1:76,78:681)
response=77

# getting datasets ready 

model_ready_df = model_ready_df %>% mutate_if(is.character,as.factor)
train.h2o = as.h2o(model_ready_df)
poc_test = poc_test %>% mutate_if(is.character,as.factor)
test.h2o <- as.h2o(poc_test)


# build model 

gbm_model <- h2o.gbm(x = predictors, y =response, training_frame = train.h2o , seed = 0xDECAF,ntrees = 1000, max_depth = 4,
                     learn_rate = 0.1,stopping_rounds=50,min_rows = 50,distribution = "bernoulli",ignore_const_col=F,
                     histogram_type='QuantilesGlobal',sample_rate=0.7,col_sample_rate=0.7,keep_cross_validation_models = T)


# save model object

h2o.download_mojo(gbm_model,get_genmodel_jar = T)

# predict 

preds=as.data.frame(h2o.predict(gbm_model,test.h2o))
preds2=h2o.mojo_predict_df(poc_test, 'GBM_model_R_1576045840818_1.zip',genmodel_jar_path = 'h2o-genmodel.jar',verbose = F)

# save 

fwrite(preds,"pred_usual.csv")
fwrite(preds2,"pred_mojo.csv")

示例

【问题讨论】:

  • 鉴于这里的信息很少,我可以说这是出乎意料的。您能否提供足够的信息进行复制?
  • 我可以尝试提供一个示例,但它不具有代表性,因为我的数据集有 700 多列,而且它是一个复杂的 gbm 模型。我刚刚使用上面的代码得到了两组预测,很奇怪有些完全相同而有些不同。我不确定 mojo 对象的工作方式是否与 h20.predict 不同
  • @Pb89 如果您可以提供您的 GBM 模型 + 数据集的几行(很少有相同的预测,很少有不同的预测),我们将能够弄清楚发生了什么。如何创建进入mojo_predict_df 的 Pandas 数据框。可以分享一下你的代码吗?
  • @MichalKurka - 我正在使用 R 来运行 h2o。我的模型构建和保存 mojo 对象 + 预测的代码已添加到上述问题中。希望这有助于澄清。
  • @Pb89,感谢您提供详细信息。我没有发现任何可疑之处,请您尝试将 MOJO 上传到 H2O 并尝试在 h2o 中进行 mojo 评分? mojo_model docs.h2o.ai/h2o/latest-stable/h2o-docs/… 上找到

标签: java r prediction h2o gbm


【解决方案1】:

h2o.mojo_predict_df 将数据帧转换为 csv,然后实质上运行 h2o.mojo_predict_csv。因此,在写入和解析变量的过程中 - 某些变量可能具有在 csv 中错误写入的格式,从而导致结果不同。一个例子是 R 中的科学记数法,如果您的数字显示为 e+10。当这些被写入 csv 时,格式会混淆。使用options(scipen=999) 对此进行更正,然后运行 ​​mojo 函数。结果应该是一样的。

【讨论】:

    猜你喜欢
    • 2020-03-18
    • 2018-07-16
    • 2019-07-20
    • 2018-08-30
    • 2018-10-31
    • 2018-12-18
    • 2021-05-26
    • 2021-06-08
    • 2021-06-22
    相关资源
    最近更新 更多