从H2O模型对象中获取模型细节

6

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

我目前正在使用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',因此是回归任务。 - TinaW
4个回答

4

您可以基于训练和/或验证数据获取模型的某些个体模型指标。以下是代码片段:

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()

3
模型类型存储在 model.type() 中。
您可以通过在 IPython 终端中键入 model. 然后按下 tab 键来查看模型的所有方法。它们按字母顺序打印,这是找到您要查找的内容(即使您不知道确切的方法名称)的好方法。您还可以在 Python 模块文档 中搜索“type”,也可以找到它。
例如:
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'

1
可以给你模型类型。至于回归或分类,我不是很确定,但应该有相关信息。在Flow中查看参数名称更容易,或者浏览模型并滚动直到找到可能包含此信息的内容。

我想你是指model.algo,但是没错,这正是我要找的。 - Karl

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接