python - 使用 hex.genmodel API 使用 H2O MOJO 模型进行预测
问题描述
我目前正在尝试弄清楚如何加载保存的 H2O MOJO 模型并在 Spark DataFrame 上使用它而不需要苏打水。我尝试使用的方法是h2o-genmodel.jar
在 Spark 启动时加载一个文件,然后使用 PySpark 的Py4J
接口来访问它。我的具体问题是关于如何访问py4j.java_gateway
对象生成的值。
下面是一个最小的例子:
训练模型
import h2o
from h2o.estimators.random_forest import H2ORandomForestEstimator
import pandas as pd
import numpy as np
h2o.init()
features = pd.DataFrame(np.random.randn(6,3),columns=list('ABC'))
target = pd.DataFrame(pd.Series(["cat","dog","cat","dog","cat","dog"]), columns=["target"])
df = pd.concat([features, target], axis=1)
df_h2o = h2o.H2OFrame(df)
rf = H2ORandomForestEstimator()
rf.train(["A","B","C"],"target",training_frame=df_h2o, validation_frame=df_h2o)
保存MOJO
model_path = rf.download_mojo(path="./mojo/", get_genmodel_jar=True)
print(model_path)
加载 MOJO
from pyspark.sql import SparkSession
spark = SparkSession.builder.config("spark.jars", "/home/ec2-user/Notebooks/mojo/h2o-genmodel.jar").getOrCreate()
MojoModel = spark._jvm.hex.genmodel.MojoModel
EasyPredictModelWrapper = spark._jvm.hex.genmodel.easy.EasyPredictModelWrapper
RowData = spark._jvm.hex.genmodel.easy.RowData
mojo = MojoModel.load(model_path)
easy_model = EasyPredictModelWrapper(mojo)
预测单行数据
r = RowData()
r.put("A", -0.631123)
r.put("B", 0.711463)
r.put("C", -1.332257)
score = easy_model.predictBinomial(r).classProbabilities
所以,我已经能够做到这一点。我遇到麻烦的地方是我发现很难检查score
回馈给我的东西。print(score)
产生以下结果:<py4j.java_gateway.JavaMember at 0x7fb2e09b4e80>
. 大概必须有一种方法可以从这个对象实际生成值,但我该怎么做呢?
解决方案
推荐阅读
- javascript - 使用一般更新模式时使用错误键的 D3.js 折线图
- sql - Excel 中的 SQL 查询引发“缺少右括号”错误
- r - 这个怎么解决??[<-.data.frame 中的错误:新列将在现有列之后留下孔
- python - 如何更改子图大小并减少子图之间的空间?
- django - post to django API 在经过身份验证时返回 403 (Forbidden),但在未经过身份验证时可以发布
- android - 当我使用 SMS User Consent API 时 FirebasePhoneAuth 崩溃
- javascript - React Navigation - 返回另一个导航器中的屏幕
- linux - ext4 目录条目如何存储在 i 节点中?
- regex - 在循环中选择第一个出现的数字的正则表达式
- javascript - 如何从 url 获取坐标值