【问题标题】:h2o GBM: leaf predictionsh2o GBM:叶子预测
【发布时间】:2018-07-16 15:33:28
【问题描述】:

我正在 h2o 中对 GBM 执行网格搜索,以获得具有连续预测变量的连续结果。我正在使用交叉验证进行训练,然后在测试集上进行预测。

我正在使用函数 .predict_leaf_node_assignment:

best_gbm.predict_leaf_node_assignment(test_frame_h2o) (其中 best_gbm 是我从 gridsearch 得到的最好的 gbm 模型)

并得到下表,我们可以在其中看到每棵树 T1、T2、T3 等的叶节点分配。

问题一:

如何获取下表中每个叶子的 T1、T2、T3 等值,而不是叶子的位置?

问题 2:

如果有办法获取 T1、T2、T3 等的值,它们实际上反映了什么? T1 是第一个预测,然后 T2、T3、T4 是更正吗?还是 T1 是预测,然后 T2 是 T1 校正等?

谢谢。

编辑:我尝试按照此页面中的说明在 python 中下载 mojo,以便我可以查看不同的树。 http://docs.h2o.ai/h2o/latest-stable/h2o-docs/productionizing.html?highlight=mojo

在“步骤 2:编译并运行 MOJO”中,此步骤的第二部分仅在 R 中给出: “通过创建一个名为 main.java 的新文件(例如,使用“vim main.java”)在实验文件夹中创建你的主程序。包括以下内容。请注意,此文件引用了上面使用 R 创建的 GBM 模型。

我可以在 python 中做到这一点吗? 例如,我试图在 jupyter 笔记本中复制命令“import java.io.*”,但它会引发错误(ModuleNotFoundError: No module named 'java')。

【问题讨论】:

    标签: python-3.x h2o gbm


    【解决方案1】:

    T1, T2,...TN 对应于构建的第一棵树,构建的第二棵树,....您构建的最终树。 (所以如果你说ntrees =50 你应该看到 T1 - T50)。如果您正在处理多类分类问题,您会看到每棵树都附加了类,例如 T1.C1 T1.C2(其中 C1 是第一类)。

    在您发布的图片中,您似乎传入了一个包含 10 行或更多行的 H2OFrame。尝试查看单行,您会看到返回单行帧 - 因为predict_leaf_node_assignment 为您提供了一行到达每棵树的最终叶节点(也称为终端节点)的路径。

    以您的 T1(第一棵树)和您通过的帧中的第一行为例。我们看到路径是 RRR,这意味着该行在每次拆分时都集中在一起。

    问题 1:如果您要求数据中给定行在 T1 处的实际预测值,则需要下载 mojo 并使用 mojo 对该行进行评分(必须这样做与Java)。请注意,该树的预测值实际上将在链接空间中,您需要使用相应的反向链接函数来获取原始响应值。使用的链接函数将在 mojo 中指定。

    (响应您的 EDIT:不,您不能将示例代码(它是 Java)粘贴到 jupyter 笔记本中,因为代码是 java 而不是 python - 演练假设您有 java在您的机器上(1.7 或更高版本)并希望您从终端或命令提示符运行代码。

    【讨论】:

    • 非常感谢您的回答。在我的一些模型中,第一棵树的所有行都会导致 RRR - 就像模型并没有真正尝试在第一棵树中做太多事情。你能解释一下为什么会发生这种情况吗?
    • 您是将该方法应用于您的训练数据还是测试数据?如果它是一个新的测试数据集,它可能(因为你的树只有三个级别)你的所有测试数据都落在多数路径(即最常见的路径或多数节点)上。
    • 确实!在这种情况下,我将其应用于测试数据。谢谢!
    猜你喜欢
    • 2018-12-18
    • 2020-04-04
    • 2019-05-26
    • 2021-05-26
    • 2020-03-18
    • 2021-06-22
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多