【问题标题】:PMML // tree based embedding by modifying a random forest model filePMML // 通过修改随机森林模型文件进行基于树的嵌入
【发布时间】:2021-10-03 10:05:36
【问题描述】:

在这篇论文之后:https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7712003/ 我有一个关于如何申请的问题,例如XSLT,使用随机森林修改 PMML 文件以执行以下操作:-

  • 基于树的嵌入
    • 用 id 标记每个树叶
    • 返回用于预测的叶子 id
  • “个性化”森林中的树:例如使用 multipleModelMethod="modelChain" 从每棵树创建单独的输出

所以如果我有一个随机森林,其中有 2 棵树,每棵树有 5 个终端叶子,我希望得到输出

一个热编码“t.l”,其中 t=tree id 和 l=leaf id 0.0 0.1 0.2 0.3 0.4 1.0 1.1 1.2 1.3 1.4 1 0 0 0 0 0 1 0 0 0

谢谢

【问题讨论】:

    标签: machine-learning random-forest decision-tree embedding pmml


    【解决方案1】:

    如何申请,例如XSLT,修改 PMML 文件

    考虑为此使用适当的 PMML 库,例如 JPMML-Model。它提供了一个专用的访问者 API,用于遍历和修改 PMML 数据结构。

    返回用于预测的叶子 id

    将以下OutputField 元素附加到所有TreeModel/Output 元素:

    <OutputField name="id(node)" feature="entityId" dataType="string" optype="categorical"/>
    

    这使用“实体标识符”机制来提取获胜Node元素的标识符。

    无需手动标记节点。如果缺少 Node@id 属性,则返回基于 1 的隐式索引。

    “个性化”森林中的树木

    随机森林模型中的树可以通过Segment@id属性来识别。

    例如下面的OutputField元素会返回第七个决策树的获胜节点的id:

    <OutputField name="id(node, 7)" segmentId="7" feature="entityId" dataType="string" optype="categorical"/>
    

    【讨论】:

    • 谢谢 - 这是有价值的信息!现在缺少最后一点:如何确定终端叶子的所有 id 将它们全部放在输出中。我知道它给了我大量的空列 - 但我需要对所有终端叶子进行一次热编码。
    • 您不需要在 PMML 级别对节点标识符进行一次热编码。只需将您的网络模型配置为接受分类整数特征 - 每棵树一个特征,并且预先知道所述特征的有效值范围。例如,当使用 scikit-learn 随机森林时,你会得到平衡的二叉树,它具有非常严格的树结构。仔细想想,网络实际上应该能够在训练过程中自行弄清楚特征的“内部结构”。
    • 这个 SO 问题应该重新调整为“如何将决策树集成模型的输出连接到神经网络模型的输入(使用 PMML 语言结构)”。 One-hot-encoding 是一种太底层的解决方案。使用 PMML,您可以在更高级别上运行(例如,可以按原样使用分类特征),并且解决方案在概念上有所不同/更好。
    • 再次感谢 - 我认为找到了解决方案:O)
    猜你喜欢
    • 2015-02-10
    • 2017-10-23
    • 2018-09-26
    • 2020-08-16
    • 2014-03-01
    • 2018-03-12
    • 2015-10-15
    • 2016-03-02
    • 2020-01-16
    相关资源
    最近更新 更多