使用 H 2 O创建的机器学习模型可通过两种基本方式导出:
- 二进制格式,
- 模型对象,优化 (MOJO)。
H2O 模型可以以二进制格式保存,该格式与已创建的 H2O 的非常特定版本相关联。这种限制有多种原因。其中一个重要原因是模型构建算法可能随时间而变化。算法的超参数以及算法本身的”行为”可能会发生变化。要了解有关H2O型号的更多信息,请访问官方文件。
您可能还喜欢:
H2O 机器学习 – 数据科学家动手指南
第二个选项是 MOJO。与二进制模型不同,MOJO 旨在生产 H2O 模型。这些是独立的模型,可部署到生产环境中。通常,一旦模型性能良好,MOJO 就会导出并提供给工程师,以便部署到生产中,以缩小工程和数据科学之间的差距。H2 O MoJO 的深入描述在生产H2O 文档中提供了。
由于 H2O 3.26.0.8
版本,可以重新导入 MOJO 模型回 H2O 和:
- 检查用于训练模型的超参数
- 查看评分历史记录
- 预测
- 显示可变重要性
- 与本机 H2O 模型完全一样使用,检查点除外
使用新的 MOJO 导入功能,有关模型的所有信息可供 H2O 用户检查。此外,如果只有 MOJO 模型可用,则无需使用 GenModel 对数据集进行评分 – 通过将其导入到 H2O 中,使用此类导入模型进行预测。如果 MOJO 丢失且 H2O 群集仍加载,则可以再次重新导出。
此功能可通过所有 H2O 接口获得:流、Python 和 R。
注意:除了 MOJO 之外,一个名为 POJO 的类似功能也存在于 H2O 中。POJO 现已被弃用,本文中描述的功能不适用于 POJO。
流
有两种使用流导入 MOJO 的方法:
- 直接使用 MOJO 导入功能
- 将 MOJO 预先上载到 H2O 群集,然后使用 MOJO 导入功能
要访问 MOJO 导入,请在 Flow 的最上部菜单中选择”模型”选项,然后在菜单的底部单击”导入 MOJO 模型”。出现对话,要求:
- 型号 ID
- MOJO 文件密钥
- 通往 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 的方法:
- 直接使用 MOJO 导入功能
- 将 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 的方法:
- 直接使用 MOJO 导入功能,
- 将 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”=吉特和松弛。