H2O随机森林模型中predValue字段含义及规则筛选问询
H2O随机森林MOJO解析相关问题
问题背景
基于含0/1目标列的Spark DataFrame,用train()构建H2ORandomForestEstimator模型后,通过model.download_mojo(MOJO_ZIP_PATH)和h2o.print_mojo(MOJO_ZIP_PATH, tree_index=tree_ind)获取的MOJO文件中,部分树结构如下:
'trees': [{ 'root': { 'nodeNumber': 0, 'weight': 18319.0, 'colId': 169, 'colName': 'pkg_items_gl_product_group_desc_1.gl_electronics', 'leftward': True, 'isCategorical': False, 'inclusiveNa': True, 'splitValue': 0.5, 'rightChild': { 'nodeNumber': 25, 'weight': 462.0, 'predValue': 0.9935065 }, 'leftChild': { 'nodeNumber': 1, 'weight': 17857.0, 'colId': 0, 'colName': 'pkg_attr_total_pkg_price', 'leftward': True, 'isCategorical': False, 'inclusiveNa': True, 'splitValue': 186.52805, 'rightChild': { 'nodeNumber': 26, 'weight': 201.0, 'predValue': 0.9900498 }, 'leftChild': { 'nodeNumber': 3, 'weight': 13184.0, 'colId': 149, 'colName': 'pkg_items_gl_product_group_desc_1.gl_automotive', 'leftward': True, 'isCategorical': False, 'inclusiveNa': True, 'splitValue': 0.5, 'rightChild': { 'nodeNumber': 27, 'weight': 312.0, 'predValue': 0.99038464 },
针对以上场景,提出两个问题:
- 叶子节点的
predValue字段含义是什么?是否表示输入满足该根到叶路径时,调用predict()返回的目标变量为1的概率? - 能否不调用
predict(),仅通过解析MOJO文件筛选出模型预测为1的根到叶路径规则?能否利用predValue找出Top-N这类规则?
回答
1. predValue字段的含义
对于二分类任务的H2O随机森林:
predValue是该叶子节点对应的训练样本中目标变量为1的占比,直接对应模型对落入该叶子的样本预测为1的概率。- 这个值和调用
predict()方法返回的正类(目标=1)概率完全一致,是模型基于训练数据统计得出的结果。
2. 解析MOJO筛选预测为1的规则及Top-N筛选
完全可以不依赖predict(),直接解析MOJO文件实现需求:
筛选预测为1的规则
H2O随机森林默认以0.5作为二分类阈值(可通过模型参数自定义),因此:
- 当叶子节点的
predValue > 0.5时,该根到叶路径对应的样本会被模型预测为1。 - 解析步骤:
- 遍历MOJO文件中的每一棵树的节点结构
- 从根节点递归遍历到所有叶子节点,记录每条路径的条件(如
pkg_items_gl_product_group_desc_1.gl_electronics > 0.5) - 筛选出所有
predValue > 0.5的叶子节点对应的路径,即为模型预测为1的规则
提取Top-N规则
可以结合两个核心字段排序选出Top-N规则:
predValue:值越高,代表该路径下预测为1的置信度越高weight:代表落入该叶子节点的训练样本数量,权重越大,规则覆盖的样本量越多,泛化性通常更好- 排序策略:可根据业务需求选择,比如优先按
predValue降序排序,再按weight降序排序,取前N条路径作为Top-N规则
内容的提问来源于stack exchange,提问作者Vijay Kansal
相关产品推荐
相关产品推荐

