代码之家  ›  专栏  ›  技术社区  ›  Karl

使用hex.genmodel API使用H2O MOJO模型进行预测

  •  0
  • Karl  · 技术社区  · 7 年前

    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)
    

    拯救魔咒

    model_path = rf.download_mojo(path="./mojo/", get_genmodel_jar=True)
    print(model_path)
    

    装载魔咒

    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> . 想必一定有办法从这个对象获得实际生成的值,但我该怎么做呢?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Lauren    7 年前

    您可以找到返回的对象 here . classProbabilities Java array Java数组没有 toString 方法,这就是print语句返回非人类可读内容的原因。

    访问此值的一种方法是使用 py4j

    例如,这应该起作用:

    for i in easy_model.predictBinomial(r).classProbabilities:
    ...     print(i)
    

    或者你可以把它隐藏到一个列表中。

    推荐文章