h2o GBM:叶子预测
h2o GBM: leaf predictions
我正在 h2o 中对 GBM 执行网格搜索,以获得具有连续预测变量的连续结果。我正在使用交叉验证进行训练,然后在测试集上进行预测。
我正在使用函数 .predict_leaf_node_assignment:
best_gbm.predict_leaf_node_assignment(test_frame_h2o)
(其中 best_gbm 是我从 gridsearch 得到的最好的 gbm 模型)
并得到以下 table,其中我们可以看到每棵树 T1、T2、T3 等的叶节点分配
问题 1:
如何获取下方每个叶子的 T1、T2、T3 等值 table 而不是叶子的位置?
问题 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 notebook 中复制命令“import java.io.*”,但它会引发错误(ModuleNotFoundError:没有名为 'java' 的模块)。
T1、T2、...TN 对应于您构建的第一棵树、第二棵树、....最后一棵树。 (所以如果你说 ntrees =50
你应该看到 T1 - T50)。如果你正在做一个多 class class 化问题,你会看到每棵树都附加了 class 例如 T1.C1 T1.C2(其中 C1 是 class 一个).
在您发布的图片中,您似乎传入了一个包含 10 行或更多行的 H2OFrame。尝试查看单行,您会看到返回单行框架 - 因为 predict_leaf_node_assignment
为您提供了一行到达每棵树的最终叶节点(又名终端节点)所采用的路径。
以您的T1(第一棵树)为例,您通过的帧中的第一行。我们看到路径是 RRR,这意味着该行在每次拆分时都被漏斗。
问题 1:如果您要求数据中给定行在 T1 的实际预测值,则需要下载 mojo 并使用 mojo 对该行评分(这必须用 Java 来完成)。请注意,该树的预测值实际上在 link space 中,您需要使用相应的反 link 函数来取回原始响应值。使用的link函数将在mojo中指定。
(回应您的 EDIT:不,您不能将示例代码(Java)粘贴到 jupyter notebook 中,因为代码是 java 而不是 python - 演练假设您的机器上有 java(1.7 或更高版本)并期望您从终端或命令提示符 运行 代码。
我正在 h2o 中对 GBM 执行网格搜索,以获得具有连续预测变量的连续结果。我正在使用交叉验证进行训练,然后在测试集上进行预测。
我正在使用函数 .predict_leaf_node_assignment:
best_gbm.predict_leaf_node_assignment(test_frame_h2o) (其中 best_gbm 是我从 gridsearch 得到的最好的 gbm 模型)
并得到以下 table,其中我们可以看到每棵树 T1、T2、T3 等的叶节点分配
问题 1:
如何获取下方每个叶子的 T1、T2、T3 等值 table 而不是叶子的位置?
问题 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 notebook 中复制命令“import java.io.*”,但它会引发错误(ModuleNotFoundError:没有名为 'java' 的模块)。
T1、T2、...TN 对应于您构建的第一棵树、第二棵树、....最后一棵树。 (所以如果你说 ntrees =50
你应该看到 T1 - T50)。如果你正在做一个多 class class 化问题,你会看到每棵树都附加了 class 例如 T1.C1 T1.C2(其中 C1 是 class 一个).
在您发布的图片中,您似乎传入了一个包含 10 行或更多行的 H2OFrame。尝试查看单行,您会看到返回单行框架 - 因为 predict_leaf_node_assignment
为您提供了一行到达每棵树的最终叶节点(又名终端节点)所采用的路径。
以您的T1(第一棵树)为例,您通过的帧中的第一行。我们看到路径是 RRR,这意味着该行在每次拆分时都被漏斗。
问题 1:如果您要求数据中给定行在 T1 的实际预测值,则需要下载 mojo 并使用 mojo 对该行评分(这必须用 Java 来完成)。请注意,该树的预测值实际上在 link space 中,您需要使用相应的反 link 函数来取回原始响应值。使用的link函数将在mojo中指定。
(回应您的 EDIT:不,您不能将示例代码(Java)粘贴到 jupyter notebook 中,因为代码是 java 而不是 python - 演练假设您的机器上有 java(1.7 或更高版本)并期望您从终端或命令提示符 运行 代码。