【问题标题】:Get model details from H2O model object从 H2O 模型对象获取模型详细信息
【发布时间】:2018-01-19 22:29:09
【问题描述】:

我有一个相当简单的问题,但无法在任何地方找到记录在案的解决方案。

我目前正在使用 H2O 模型构建管道,作为该过程的一部分,我需要将有关每个训练模型的一些基本信息写入表中。

假设我有类似的东西:

model = H2ODeepLearningEstimator(...)
model.train(...)

完成此操作后,我想从model 对象中提取模型的类型。即,我正在寻找类似的东西:

model.getType()

然后返回一个字符串"H2ODeepLearningEstimator" 或等效的"deeplearning",H2O 似乎在内部将其用作模型类型标识符。我还想了解其他详细信息,例如它是回归模型还是分类模型。我没有看到暴露此信息的参数。

例如,如果我运行model.save_model_details,我会得到:

H2ODeepLearningEstimator :  Deep Learning
Model Key:  Grid_DeepLearning_py_4_sid_a02a_model_python_1502450758585_2_model_0


ModelMetricsRegression: deeplearning
** Reported on train data. **

MSE: 19.5334650304
RMSE: 4.4196679774
MAE: 1.44489752843
RMSLE: NaN
Mean Residual Deviance: 19.5334650304

ModelMetricsRegression: deeplearning
** Reported on validation data. **
...
...

大概model.save_model_details 从各个参数构建了这个摘要。我想通过model 对象直接访问这些(和类似的)参数(对于性能指标,这可以通过model.mse()model.mae() 等实现)

【问题讨论】:

  • 我猜你现在已经明白了。您可以使用模型中的分布参数指定分类或回归。上面你有默认值,即 distribution='gaussian',所以是回归任务。

标签: python h2o


【解决方案1】:

模型类型存储在model.type()

您可以通过在 IPython 终端中键入 model. 然后按 Tab 键来查看模型的所有方法。它们按字母顺序打印,这是查找所需内容的好方法(即使您不知道确切的方法名称)。您也可以在Python Module documentation 中搜索“类型”,您也会这样找到。

例子:

import h2o
from h2o.estimators.gbm import H2OGradientBoostingEstimator
h2o.init()

# Import a sample binary outcome train/test set into H2O
train = h2o.import_file("https://s3.amazonaws.com/erin-data/higgs/higgs_train_10k.csv")
test = h2o.import_file("https://s3.amazonaws.com/erin-data/higgs/higgs_test_5k.csv")

# Identify predictors and response
x = train.columns
y = "response"
x.remove(y)

# For binary classification, response should be a factor
train[y] = train[y].asfactor()
test[y] = test[y].asfactor() 

# Train a GBM
model = H2OGradientBoostingEstimator(distribution="bernoulli", seed=1)
model.train(x=x, y=y, training_frame=train)

检查模型类型:

In [3]: model.type
Out[3]: u'classifier'

【讨论】:

    【解决方案2】:

    (这是问题的标题主题,所以我认为值得注意的是。但它是实际问题的一点话题,它指的是H2O二进制模型,而不是POJO和MOJO模型。) P>

    对于 H2O POJO 和 MOJO 模型,使用的方法是 getModelCategory()。

    http://docs.h2o.ai/h2o/latest-stable/h2o-genmodel/javadoc/hex/genmodel/easy/EasyPredictModelWrapper.html#getModelCategory()

    【讨论】:

      【解决方案3】:

      您可以根据训练和/或验证数据为您的模型获取一些单独的模型指标。这是代码sn-p:

      import h2o
      h2o.init(strict_version_check= False , port = 54345)
      from h2o.estimators.deeplearning import H2ODeepLearningEstimator
      model = H2ODeepLearningEstimator()
      rows = [[1,2,3,4,0], [2,1,2,4,1], [2,1,4,2,1], [0,1,2,34,1], [2,3,4,1,0]] * 50
      fr = h2o.H2OFrame(rows)
      X = fr.col_names[0:4]
      
      ## Classification Model
      fr[4] = fr[4].asfactor()
      model.train(x=X, y="C5", training_frame=fr)
      print('Model Type:', model.type)
      print('logloss', model.logloss(valid = False))
      print('Accuracy', model.accuracy(valid = False))
      print('AUC', model.auc(valid = False))
      print('R2', model.r2(valid = False))
      print('RMSE', model.rmse(valid = False))
      print('Error', model.error(valid = False))
      print('MCC', model.mcc(valid = False))
      
      ## Regression Model
      fr = h2o.H2OFrame(rows)
      model.train(x=X, y="C5", training_frame=fr)
      print('Model Type:', model.type)
      print('R2', model.r2(valid = False))
      print('RMSE', model.rmse(valid = False))
      

      注意:因为我没有通过验证框架,所以我设置 valid = False 来获取训练指标。如果您已经通过了验证指标,那么您也可以设置 valid = True 来获取验证指标。

      如果您想查看模型对象内部的内容,可以查看 json 对象,如下所示:

      model.get_params()
      

      【讨论】:

        【解决方案4】:

        h2o.algo 为您提供模型类型。至于回归或分类,我不知道,但这是他们的某个地方。查看流程,因为它更容易看到参数名称或模型。并滚动浏览,直到您看到看起来可能有它的东西。

        【讨论】:

        • 我认为你的意思是 model.algo,但是是的,这正是我要找的
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多