我在h2o中为GBM执行网格搜索,以获得具有连续预测因子的连续结果。我使用交叉验证进行训练,然后在测试集上预测。
best_gbm.predict_leaf_node_assignment(test_frame_h2o) (best_gbm是我从gridsearch获得的最好的gbm模型)
并获取下表,我们可以看到每个树T1,T2,T3等的叶节点分配。
如何获得下表中每片叶子的T1,T2,T3等值,而不是叶子的位置?
如果有办法获得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中执行此操作吗? 我试图复制命令" import java.io。*"在jupyter笔记本中,但它会抛出一个错误(ModuleNotFoundError:没有名为' java'的模块)。
答案 0 :(得分:0)
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或更高版本),并希望您从终端或命令提示符运行代码。