Image title

H2O 是如此令人耳目一新。

使用 H 2 O创建的机器学习模型可通过两种基本方式导出:

  1. 二进制格式,
  2. 模型对象,优化 (MOJO)。

H2O 模型可以以二进制格式保存,该格式与已创建的 H2O 的非常特定版本相关联。这种限制有多种原因。其中一个重要原因是模型构建算法可能随时间而变化。算法的超参数以及算法本身的”行为”可能会发生变化。要了解有关H2O型号的更多信息,请访问官方文件。

您可能还喜欢:
H2O 机器学习 – 数据科学家动手指南

第二个选项是 MOJO。与二进制模型不同,MOJO 旨在生产 H2O 模型。这些是独立的模型,可部署到生产环境中。通常,一旦模型性能良好,MOJO 就会导出并提供给工程师,以便部署到生产中,以缩小工程和数据科学之间的差距。H2 O MoJO 的深入描述在生产H2O 文档中提供了。

由于 H2O 3.26.0.8 版本,可以重新导入 MOJO 模型回 H2O 和:

  1. 检查用于训练模型的超参数
  2. 查看评分历史记录
  3. 预测
  4. 显示可变重要性
  5. 与本机 H2O 模型完全一样使用,检查点除外

使用新的 MOJO 导入功能,有关模型的所有信息可供 H2O 用户检查。此外,如果只有 MOJO 模型可用,则无需使用 GenModel 对数据集进行评分 – 通过将其导入到 H2O 中,使用此类导入模型进行预测。如果 MOJO 丢失且 H2O 群集仍加载,则可以再次重新导出。

此功能可通过所有 H2O 接口获得:流、Python 和 R。

注意:除了 MOJO 之外,一个名为 POJO 的类似功能也存在于 H2O 中。POJO 现已被弃用,本文中描述的功能不适用于 POJO。

有两种使用流导入 MOJO 的方法:

  1. 直接使用 MOJO 导入功能
  2. 将 MOJO 预先上载到 H2O 群集,然后使用 MOJO 导入功能

要访问 MOJO 导入,请在 Flow 的最上部菜单中选择”模型”选项,然后在菜单的底部单击”导入 MOJO 模型”。出现对话,要求:

  1. 型号 ID
  2. MOJO 文件密钥
  3. 通往 MOJO 的路径

模型 ID 已由 H2O 预先生成,编辑它是可选的。MOJO 文件密钥是可选参数,在 MOJO 从 H2O 用户的本地文件系统预上载到群集然后导入时可用。如果 MOJO zip 文件保存在 H2O 群集的覆盖范围外,单击 Flow 最上部菜单中的”数据”选项,然后使用”上传文件”对话框上传 MOJO,首先可以导入 MOJO

它表示 H2O 群集文件系统上到导入 MOJO zip 文件的路径。

通过单击 import 该按钮,MOJO 模型实际上是在 H2O 中导入和注册的。从现在开始,它可以像普通的H2O模型一样使用,上面有一些限制。通过单击 View 该按钮,可以显示导入 MOJO 模型的详细信息。

请注意, predict 该按钮处于活动状态 – 用户可以使用导入的 MOJO 模型进行预测。

Python

与”流”和”R”中一样,有两种使用流导入 MOJO 的方法:

  1. 直接使用 MOJO 导入功能
  2. 将 MOJO 预先上载到 H2O 群集,然后使用 MOJO 导入功能

当 MOJO 模型无法直接导入时,预上传功能非常有用,因为 MOJO 模型位于 H2O 群集的文件系统(例如驻留在用户的本地文件系统上)所覆盖。只需使用上载 h2o.upload_file('/some/path/to/mojo.zip') MOJO,然后使用导入功能即可解决此问题。但是,手动上载文件,然后调用 H2OGenericEstimator 的构造函数会带来大量开销。因此,我们引入了 h2o.upload_mojo('/path/to/some/mojo.zip') 便利功能。但是,对于最简单的用例,有一个名为 h2o.import_mojo('/some/path/to/mojo.zip') 的函数。此函数采用 H2O 群集可访问的路径,导入 MOJO 并创建 H2OGenericEstimator 。这样 H2OGenericEstimator 可以容纳任何模型,包括各种进口的MOJO模型,因此 Generic 名称。

然后,这样的模型可用于进行预测,就像任何具有 的H2O 模型一 mojo_model.predict(airlines) 样。事实上,所有的参数,得分历史,一切都在那里!下面的列表显示了一个基本用例,其中创建 GBM 模型,保存到临时 MOJO zip 文件中,然后加载回 H2O。导入模型后,使用函数演示使用导入的 MOJO 模型进行 h2o.predict 预测。

    airlines_data = h2o.import_file("https://s3.amazonaws.com/h2o-airlines-unpacked/allyears2k.csv")

    ## Create a GBM model, only to later export it as a MOJO
    from h2o.estimators import H2OGradientBoostingEstimator
    original_model = H2OGradientBoostingEstimator(ntrees = 1)
    original_model.train(x = ["Origin", "Dest"], y = "IsDepDelayed", training_frame=airlines_data)

    #Save the previously created model into a temporary file
    import tempfile
    original_model_filename = tempfile.mkdtemp()
    original_model_filename = original_model.download_mojo(original_model_filename)

    # Load the model from the temporary file
    mojo_model = h2o.import_mojo(original_model_filename)
    predictions = mojo_model.predict(airlines_data)

作为 h2o.import_mojo('/some/path/to/mojo.zip') 函数的替代方法,直接创建泛型模型与函数一样 H2OGenericEstimator.from_file('/some/path/to/mojo.zip') 是可能的。结果与 函数的结果完全 h2o.import_mojo 相同。请参阅下面的可运行示例进行比较。

    airlines_data = h2o

amazonaws.com/h2o-airlines-unpacked/allyears2k.csv”)

• 创建 GBM 模型,但稍后将其导出为 MOJO
从 h2o.估计器导入 H2OGradient 进兴估计器
原始模型 = H2OGradient 进兴估计器(树 = 1)
原始_model.train(x = “原点”,”Dest”,y = “IsDep 延迟”,培训_frame_航空公司_数据)

将以前创建的模型#Save到临时文件中
导入临时文件
原始_模型_文件名 = tempfile.mkdtemp()
原始_模型_文件名= 原始_模型.下载_mojo(原始_模型_文件名)

• 使用 H2O 通用估计器从临时文件加载模型
从 h2o.估计器导入 H2O 通用估计器
mojo_model = H2OGeneric估计器.from_file(原始_模型_文件名)

预测 = mojo_模型.预测(航空公司_数据)

在 Python 中上传 MOJO

如果 H2O 群集无法访问 MOJO zip 文件,则需要先上载该文件, h2o.upload_file('path/to/some/mojo.zip') 然后需要将上载文件的密钥提供给 H2OGenericEstimator 的构造函数。但是,对于上传H2O 群集无法直接访问的 MOJO,有一个方便 h2o.upload_mojo('/path/to/some/mojo.zip') 功能。在内部,MOJO zip 文件上载到 H2O,并表示为 Frame 字节。然后,此类字节帧的键提供给 H2OGenericEstimator ,通过使用提供的帧创建通用模型,而不是尝试从群集的文件系统导入文件。

在下面的示例中可以找到完全可重现的示例。

    airlines_data = h2o.import_file("https://s3.amazonaws.com/h2o-airlines-unpacked/allyears2k.csv")

    ## Create a GBM model, only to later export it as a MOJO
    from h2o.estimators import H2OGradientBoostingEstimator
    original_model = H2OGradientBoostingEstimator(ntrees = 1)
    original_model.train(x = ["Origin", "Dest"], y = "IsDepDelayed", training_frame=airlines_data)

    #Save the previously created model into a temporary file
    import tempfile
    original_model_filename = tempfile.mkdtemp()
    original_model_filename = original_model.download_mojo(original_model_filename)

    # Upload a MOJO model and create a Generic model out of it
    mojo_model = h2o.upload_mojo(original_model_filename)

    predictions = mojo_model.predict(airlines_data)

R

与”流”和”Python”一样,有两种使用流导入 MOJO 的方法:

  1. 直接使用 MOJO 导入功能,
  2. 将 MOJO 预先上载到 H2O 群集,然后使用 MOJO 导入功能。

当 MOJO 模型无法直接导入时,预上传功能非常有用,因为 MOJO 模型位于 H2O 群集的文件系统(例如驻留在用户的本地文件系统上)所覆盖。只需使用上传 h2o.upload_file('/some/path/to/mojo.zip') MOJO,然后使用 h2o.generic(model_key = 'some_model_key') 该功能即可解决此问题,但需要做很多工作。因此,有一个名为 的便利 h2o.upload_mojo('/path/to/some/mojo.zip) 函数,它执行单个调用中的所有内容。MOJO上传在R有其专用部分下面,名为”上传一个MOJO在R”。但是,对于最简单的用例,有一个名为 h2o.import_mojo('/some/path/to/mojo.zip') 的函数。此函数采用 H2O 群集可访问的路径,导入 MOJO 并创建 H2OGenericEstimator 。这样 H2OGenericEstimator 可以容纳任何模型,包括各种进口的MOJO模型,因此 Generic 名称。

然后,这样的模型可用于进行预测,就像任何具有 的H2O 模型一 mojo_model.predict(airlines) 样。事实上,所有的参数,得分历史,一切都在那里!下面的列表显示了一个基本用例,其中创建 GBM 模型,保存到临时 MOJO zip 文件中,然后加载回 H2O预测函数。

airlines_data <- h2o.importFile("https://s3.amazonaws.com/h2o-airlines-unpacked/allyears2k.csv")

## Create a GBM model, only to later export it as a MOJO
original_model <- h2o.gbm(x = c("Origin", "Dest"), y = "IsDepDelayed", training_frame=airlines_data, ntrees = 1)

#Save the previously created model into a temporary file
original_mojo_path <- h2o.download_mojo(model = original_model, path = tempdir())
original_mojo_path <- paste0(tempdir(),"/",original_mojo_path)

# Load the model from the temporary file
mojo_model <- h2o.import_mojo(original_mojo_path)
predictions  <- h2o.predict(mojo_model, airlines_data)

作为 h2o.import_mojo('/some/path/to/mojo.zip') 函数的替代方法,也可以通过调用函数创建泛型 h2o.genericModel('/some/path/to/mojo.zip') 模型。结果与 函数的结果完全 h2o.import_mojo 相同。请参阅下面的可运行示例进行比较。

airlines_data <- h2o.importFile("https://s3.amazonaws.com/h2o-airlines-unpacked/allyears2k.csv")

## Create a GBM model, only to later export it as a MOJO
original_model <- h2o.gbm(x = c("Origin", "Dest"), y = "IsDepDelayed", training_frame=airlines_data, ntrees = 1)

#Save the previously created model into a temporary file
original_mojo_path <- h2o.download_mojo(model = original_model, path = tempdir())
original_mojo_path <- paste0(tempdir(),"/",original_mojo_path)

# Load the model from the temporary file
mojo_model <- h2o.genericModel(original_mojo_path)
predictions  <- h2o.predict(mojo_model, airlines_data)

在 R 中上传 MOJO

如果 H2O 群集无法访问 MOJO zip 文件,则需要先上载它, h2o.upload_file('path/to/some/mojo.zip') 然后需要向函数提供上载文件的 h2o.generic 密钥。但是,对于上传H2O 群集无法直接访问的 MOJO,有一个方便 h2o.upload_mojo('/path/to/some/mojo.zip') 功能。在内部,MOJO zip 文件上载到 H2O,并表示为 Frame 字节。然后,此类字节帧的键提供给 h2o.generic(model_key = 'some_h2o_key') ,通过使用提供的帧创建通用模型,而不是尝试从群集的文件系统导入文件。

在下面的示例中可以找到完全可重现的示例。

airlines_data <- h2o.importFile("https://s3.amazonaws.com/h2o-airlines-unpacked/allyears2k.csv")

## Create a GBM model, only to later export it as a MOJO
original_model <- h2o.gbm(x = c("Origin", "Dest"), y = "IsDepDelayed", training_frame=airlines_data, ntrees = 1)

#Save the previously created model into a temporary file
original_mojo_path <- h2o.download_mojo(model = original_model, path = tempdir())
original_mojo_path <- paste0(tempdir(),"/",original_mojo_path)

# Load the model from the temporary file
mojo_model <- h2o.upload_mojo(original_mojo_path)
predictions  <- h2o.predict(mojo_model, airlines_data)

文档和最终想法

H2O MOJO 导入功能会随着时间的推移而发展。要了解所有功能和可能的限制,请访问H2O MOJO 导入官方文档

请记住,H2O.ai是开源的,可以在GitHub上找到。发现错误?前往 H2O JIRA并提交问题im/h2oai/h2o-3″ rel=”不跟随”目标\”\blank”=吉特和松弛。

进一步阅读

使用 AutoML H2O 模型预测自然减员,使用 LIME 解释预测类

使用 H2O 使用隔离林进行异常检测

Comments are closed.