如何无需保留冗余学习器,独立存储重载H2O AutoML的"best of family"模型?
如何独立存储、重载H2O AutoML的"Best of Family"模型
没问题,完全可以做到!你不需要保留那上千个价值较低的冗余模型,也不用额外保存堆叠集成的组件或聚合器,就能把"best of family"模型当作独立黑盒来使用。下面是具体的操作步骤:
一、先拿到"Best of Family"模型集合
当你的AutoML任务跑完后,有两种简单的方式获取每个算法家族里的最优模型:
- 快捷方法:用内置函数直接提取
H2O的AutoML对象自带get_best_models()方法,能直接帮你筛选出每个家族的最优模型,还能跳过堆叠模型(如果不需要的话):
这里# 假设aml是你训练好的AutoML对象 best_of_family = aml.get_best_models(n_per_family=1, skip_stack_models=True)n_per_family=1指定每个算法家族只拿最优的那个,skip_stack_models=True会排除堆叠集成类的模型,刚好符合你的需求。 - 手动筛选:从排行榜里挑
如果需要更灵活的筛选逻辑,也可以从AutoML的leaderboard里手动提取:leaderboard = aml.leaderboard model_ids = leaderboard['model_id'].as_data_frame()['model_id'] best_models_dict = {} for model_id in model_ids: model = h2o.get_model(model_id) algo_family = model.algo # 只保留每个家族的第一个(也就是最优的那个,因为leaderboard是排序好的) if algo_family not in best_models_dict: best_models_dict[algo_family] = model best_of_family = list(best_models_dict.values())
二、独立保存这些模型
拿到目标模型后,直接逐个保存到磁盘就行——每个模型都是完整的独立黑盒,不需要依赖任何其他冗余模型:
# 遍历模型,保存到你指定的路径 for model in best_of_family: # 每个模型会被存成一个单独的目录,包含所有运行所需的文件 model.save_model(f"/your/save/path/{model.model_id}")
三、重载并使用保存的模型
之后需要用的时候,直接用h2o.load_model()加载单个模型,就能像用普通H2O模型一样做预测,完全不需要AutoML的上下文:
# 加载单个模型 loaded_model = h2o.load_model("/your/save/path/your_model_directory") # 用加载后的模型做预测 predictions = loaded_model.predict(your_test_data)
如果要同时用多个"best of family"模型,挨个加载就行,彼此之间没有任何依赖。
额外提醒
这些"best of family"模型本质上和你手动训练的单个H2O模型完全一样,所有必要的参数、元数据都存在自己的保存目录里,完全不需要保留AutoML运行时生成的其他冗余模型,节省大量磁盘空间。
内容的提问来源于stack exchange,提问作者EngrStudent
相关产品推荐
相关产品推荐

