【问题标题】:classification tree implementation in mathematicaMathematica 中的分类树实现
【发布时间】:2011-07-03 14:14:31
【问题描述】:

我想用Mathematica 实现简单的分类树(二元分类)。

如何在 Mathematica 中实现二叉树?有这样做的标志吗?

【问题讨论】:

  • Leonid 是这里的 Mma 数据结构方面的专家。我记得他至少发布了两个很好的答案,但现在我只能找到一个stackoverflow.com/questions/6097071/…。尝试搜索他的答案

标签: data-structures wolfram-mathematica


【解决方案1】:

我会说这取决于你想对数据结构做什么。

您可以利用 Mathematica 表达式本身就是树这一事实。

如果只有叶节点是相关的,则使用嵌套列表,例如{{1, {2, 3}}, 4}。如果另一个节点也需要携带一些数据,那么你可以使用这样的东西:

tree[1][tree[2][a, b], tree[3][c, tree[4][d, e]]]

查看如下结构:

{{1, {2, 3}}, 4} // TreeForm
tree[1][tree[2][a, b], tree[3][c, tree[4][d, e]]] // TreeForm

下一个问题是如何在这样的数据结构上实现算法X。

【讨论】:

  • 谢谢你..但你真的打开了一个关键点..如何实现CARTs?!?! .. 它甚至可能不需要树 .. :D 我会理解与 CART 相关的优化问题,而且我的图片会更清晰 .. 谢谢伙计
  • 你能解释一下什么是CART吗?
  • @Szabolcs 见en.wikipedia.org/wiki/Decision_tree_learning 也见us.akinator.com 我怀疑是一个例子。
【解决方案2】:

MMA 8 中的新对象包括 TreeGraphCompleteKaryTreeKaryTree。后两个对象默认给出二叉树。我不知道它们对于密集计算的效率如何,但它们似乎非常适合显示分类。并且有许多谓词和选项可用于操作和显示它们。

这是来自 [Breiman, L. 分类和回归树:Chapman & Hall/CRC, 1984.] 的分类树示例。它涉及确定心脏病患者如果不接受治疗是否有可能在 30 天内死亡的 3 个问题。

KaryTree[9, 2, 
   VertexLabels -> {1 -> "Blood pressure > 91 ?", 2 -> "Age > 62.5?", 
                    4 -> "Sinus tachycardia ?", 8 -> "< 30 days"}, 
   EdgeLabels -> {1 \[UndirectedEdge] 2 -> "yes", 
                  1 \[UndirectedEdge] 3 -> "no", 2 \[UndirectedEdge] 4 -> "yes", 
                  2 \[UndirectedEdge] 5 -> "no", 4 \[UndirectedEdge] 8 -> "yes", 
                  4 \[UndirectedEdge] 9 -> "no"}, ImagePadding -> 20]

我想去掉右边的两个未使用的节点,但还没有找到一种优雅的方法来做到这一点。所以我想我会在 SO 上发布一个简单的问题。

【讨论】:

    【解决方案3】:

    我个人不太清楚,但在 Wolfram 网站上似乎有一篇关于这个主题的文章,找到 here。它可能无法回答您的问题,但希望能给您一些见解!

    【讨论】:

    • 谢谢 .. 但我认为这不是我需要的 .. 但我肯定会在以后使用它们 .. :)
    猜你喜欢
    • 2011-10-05
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 2022-07-19
    • 1970-01-01
    • 2011-08-31
    相关资源
    最近更新 更多