如何从H2OAutoMLClassifier sklearn wrapper提取H2OAutoML对象并调用explain()
解决方案
要从H2OAutoMLClassifier wrapper中提取底层的H2OAutoML对象并调用explain()方法,只需通过wrapper的automl_属性获取即可,具体步骤如下:
1. 提取H2OAutoML对象
在pipeline完成拟合后,先从pipeline中获取H2OAutoMLClassifier实例,再通过其automl_属性拿到底层的H2OAutoML对象:
# 从pipeline中获取H2OAutoMLClassifier组件 h2o_automl_classifier = pipeline.named_steps['classifier'] # 提取底层的H2OAutoML核心对象 automl_instance = h2o_automl_classifier.automl_
2. 调用explain()获取洞察
拿到automl_instance后,直接调用explain()方法即可生成模型和特征的全局洞察;如果需要针对测试集生成针对性分析,需先将预处理后的测试数据转换为H2OFrame格式:
全局模型洞察
# 生成全局模型解释(包含特征重要性、模型性能等) automl_instance.explain()
针对测试集的洞察
import h2o # 确保H2O集群处于运行状态(若未初始化会自动启动) h2o.init() # 对测试数据执行与训练集一致的预处理步骤 X_test_processed = pipeline.named_steps['featselect'].transform( pipeline.named_steps['polyfeat'].transform(X_classes_test) ) # 将预处理后的测试数据转为H2OFrame,并匹配训练时的特征列名 X_test_h2o = h2o.H2OFrame(X_test_processed, column_names=h2o_automl_classifier.feature_names_in_) y_test_h2o = h2o.H2OFrame(y_classes_test, column_names=['target']) test_data_h2o = X_test_h2o.cbind(y_test_h2o) # 生成测试集的模型解释 automl_instance.explain(test_data_h2o)
关键说明
H2OAutoMLClassifier作为sklearn兼容的wrapper,遵循sklearn命名惯例:拟合后生成的内部对象会以_结尾命名,因此automl_就是底层的H2OAutoML核心实例。- 调用
explain()时,若传入测试集,必须保证测试数据经过与训练集完全一致的预处理(即pipeline中classifier之前的所有步骤),否则特征不匹配会导致解释失败。
内容的提问来源于stack exchange,提问作者Boris Burkov
相关产品推荐
相关产品推荐

