如何将 h2o 模型性能指标转换为 json in python

How to convert h2o model performance metrics to json in python

例如我有这个代码:

import h2o
h2o.init()
from h2o.estimators.naive_bayes import H2ONaiveBayesEstimator
data = h2o.import_file("myfile.csv")
train,valid = data.split_frame([0.8])
predictors = ['col1','col2','col3','col4']
result = 'col_result'
model = H2ONaiveBayesEstimator()
model.train(predictors,result,training_frame=train,validation_frame=valid)
model.model_performance()

model.model_performance() 之后,我将能够看到我们的模型性能,但现在我想发送 API 作为 JSON 数据,有什么方法可以简单地进行转换吗?谢谢。

H2O python 包实际上使用 REST API 和 JSON 与 H2O 后端对话。了解它是什么样子的最好方法是打开日志记录并观察 Python 客户端前端和 H2O Java 后端之间的 "conversation"。

使用此方法调用打开日志记录:

h2o.start_logging()

并查看输出。

这是指向 REST API 参考的指针:

好的,经过一些研究和试错,我试着看看结果中包含的数据是什么。来自:

model.model_performance()

它会立即在控制台中向您显示模型性能,但如果您尝试 运行 它是

type(model.model_performance())

您将获得返回的对象类型:

<class 'h2o.model.metrics_base.H2OMultinomialModelMetrics'>

这意味着对象本身是一个class metcis 并且根据http://docs.h2o.ai/h2o/latest-stable/h2o-py/docs/metrics.html, H2OMultinomialModelMetrics is an instance of MetricBase and if we see in http://docs.h2o.ai/h2o/latest-stable/h2o-py/docs/metrics.html#h2o.model.metrics_base.MetricsBase,我们发现了一些可用的常用指标测量。

更进一步,如果我们尝试使用

dir(model.model_performance())

我们将得到预期的属性列表,包括aucaicrmse,等等。

如果我们尝试调用:

model.model_performance().rmse()

在我的例子中,我得到 0.4824827476199047。

我得到的最有趣的发现是当我尝试执行 auc 方法时

model.model_performance().auc()

我收到一条错误消息,提示 "AUC" 键在字典中不存在

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\Development\python\lib\site-packages\h2o\model\model_base.py", line 634, in auc
    for k, v in viewitems(tm): m[k] = None if v is None else v.auc()
  File "D:\Development\python\lib\site-packages\h2o\model\metrics_base.py", line 156, in auc
    return self._metric_json['AUC']
KeyError: 'AUC'

正如我们所见,它有 _metric_json 字典。我尝试打印 model.model_performance()._metric_json 字典,我得到了列出所有指标的字典,你可以尝试使用 _metric_json.keys() 获取所有密钥并自己将其解析为 JSON。

编辑 1

为了让生活更轻松,这段代码展示了如何轻松地将 class 转换为 json 字符串:

json_string = str(model.model_performance()._get_metrics)

编辑 2

编辑 1 中的字符串不是 json 格式,最好这样做以在剥离 classes 时转换为 json 和字典:

import json

json_string = json.dumps(str(model.model_performance()._get_metrics),ensure_ascii=False)
python_dictionary = json.loads(json_string)