【问题标题】:How to interpret the prediction in this plot of classification tree?如何解释这个分类树图中的预测?
【发布时间】:2020-03-03 07:05:55
【问题描述】:

我已按照本教程进行操作,并且能够重现结果。然而,最后一张图让我感到困惑。我知道大部分时间是概率,但为什么会有负数?由于响应是 Survived,如何解释预测中的数字?如何将这些数字转换为是和否?

https://www.h2o.ai/blog/finally-you-can-plot-h2o-decision-trees-in-r/

EIDT 11/19/2019:顺便说一句,我确实在 Cross Validated 上找到了类似的帖子。答案不确定,因为它以问号结尾。 https://stats.stackexchange.com/questions/374569/may-somebody-help-with-interpretation-of-trees-from-h2o-gbm-see-as-photo-attach

我使用树中的逻辑过滤数据并查看子集的唯一预测。我能够找到“是”和“否”预测的阈值。我还更改了原始代码(从第 34 行开始),以便叶子显示数字的最终结果。然而,这只是破解剧情的一种方式。如果有人能告诉我这些数字是如何得出的,那就太好了。

    if(class(left_node)[[1]] == 'H2OLeafNode')
      leftLabel = ifelse(left_node@prediction >= threshold, 'Yes', 'No')
  else
    leftLabel = left_node@split_feature

  if(class(right_node)[[1]] == 'H2OLeafNode')
    rightLabel = ifelse(right_node@prediction >= threshold, 'Yes', 'No')
  else
    rightLabel = right_node@split_feature

【问题讨论】:

  • 如果高于 0.5,简单的方法会说“是”,否则说“否”。更好的方法是阅读有关如何在 ROC 曲线或精确召回曲线上选择 操作点 的信息。无论哪种情况,这是一个统计建模问题,而不是编程问题,因此它更适合 stats.stackexchange(尽管我鼓励您在询问之前先阅读一些关于操作点的背景知识)。
  • @Gregor 谢谢!让我感到困惑的是情节中的负数。
  • 这些值似乎大致以 0.0 为中心,所以我猜测 -1 和 +1 被用作两个因子水平,而 0.0 应该意味着如果你到达那片叶子,那么那个人就有50-50 的生存机会? (我不确定,我没有发布答案的原因是,这种 -1 到 +1 的行为是否来自 H2O、R 或 data.tree 库。)
  • 顺便说一句,我认为这个问题很好,属于这里。如果您将其发布在 stats.stackechange 它很可能会被关闭为“特定于库或语言,与统计信息无关,请尝试将其发布在 StackOverflow 上”;-)
  • 谢谢@DarrenCook!预测(我相信)来自效用函数addChildren()。当我做titanicH2oTree@root_node@left_child@left_child@left_child@left_child@prediction 时,数字在情节中排成一行。这意味着什么?

标签: r machine-learning decision-tree h2o


【解决方案1】:

由于图片是 GBM 图,它并不像您想的那么简单,因为推理计算会对从树的叶子中提取的值进行一些数学运算。

实际代码在这里:

https://github.com/h2oai/h2o-3/blob/master/h2o-genmodel/src/main/java/hex/genmodel/algos/gbm/GbmMojoModel.java

看看 score0 函数。

我的建议是构建一个 1-tree DRF,然后编写一个简短的 java 程序并尝试在 java 调试器中单步执行它。

本文开头的java sn -p是如何编译和运行一个MOJO:

http://docs.h2o.ai/h2o/latest-stable/h2o-genmodel/javadoc/index.html

如果您这样做,您将能够逐步完成产生答案的确切步骤(如果您愿意,也适用于 GBM),届时将没有什么是未知的。

【讨论】:

  • 从第一个链接,我猜值是 logit,因为分布是伯努利,所以我尝试使用 1 / (1 + exp(-f)) 恢复 logit。这些值看起来正确,但是当我尝试将它们与 h2o.predict() 中的值匹配时,我发现我无法重现它们中的任何一个......
  • 我使用树逻辑过滤了数据,看看该子集的独特预测是什么。我能够得到一些简单的阈值,例如预测是否大于 -0.002,那么是的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 2020-05-09
  • 2016-07-12
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
相关资源
最近更新 更多