将“h2o_model.accuracy”打印输出保存到文件

Saving `h2o_model.accuracy` printed output to a file

h2o_model.accuracy 在 Jupyter Notebook 单元格中执行时打印模型验证数据(这是可取的,尽管有函数名称)。如何将整个验证输出(整个笔记本单元格内容)保存到文件中?请在建议重定向之前进行测试。

您应该调用 h2o_model.accuracy()(注意括号)。打印整个模型的原因是 __repl__ 在 h2o 模型中的非惯用实现,它打印而不是返回一个字符串(有一个 JIRA 可以解决这个问题)。

如果您遇到其他情况需要保存某些命令的打印输出,您可以使用 redirect_stdout[1] 来捕获它(假设您有 python 3.4+)。

[1] https://docs.python.org/3.9/library/contextlib.html#contextlib.redirect_stdout

好的,所以只有 h2o_model.accuracy 输出无法被捕获,而 xgb_model.cross_validation_metrics_summary 甚至 h2o_model 可以单独捕获 - 例如像那样:

%%capture captured_output

# print model validation 
# data to `captured_output`
xgb_model

在另一个笔记本单元格中:

# print(captured_output.stdout.replace("\n\n","\n"))

with open(filename, 'w') as f:
    f.write((captured_output.stdout.replace("\n\n","\n")))

我会小心使用 %%capture,它不会捕获 stdout.

中的 html 内容(表格)

redirect_stdout 在 python CLI/script 中使用时完美无缺。 IPython/Jupyter 可能会导致表格出现问题,因为它们是 displayed 而不是 printed。请注意,您不应使用 .readlines()StringIO 获取结果 - 使用 .getvalue().

您可以使用 h2o_model.save_model_details(path) 将有关模型的信息保存到 json 文件中(这可能会在较长的 运行 中为您提供更好的服务,但它不是真正的人类可读的)。

如果您真的希望输出看起来像从 Jupyter notebook 中获得的输出,您可以使用以下 hack:

  • 创建一个包含以下内容的模板 jupyter 笔记本:
import os
import h2o
h2o.connect(verbose=False)
h2o.get_model(os.environ["H2O_MODEL"])
  • 并在您原来的笔记本中添加
!H2O_MODEL={h2o_model.key} jupyter nbconvert --to html --execute template.ipynb --output={h2o_model.key}_results.html

您还可以为 nbconvert 创建一个模板来隐藏代码单元格。