使用机器学习比较树木变化的最佳技术/算法是啥?

Posted

技术标签:

【中文标题】使用机器学习比较树木变化的最佳技术/算法是啥?【英文标题】:What is the best technique/algorithm to compare trees changes using machine learning?使用机器学习比较树木变化的最佳技术/算法是什么? 【发布时间】:2015-07-31 08:18:15 【问题描述】:

我有一个想使用机器学习解决的问题。我想使用某种分类来了解树数据结构中刚刚添加的更改是“好”还是“坏”。 假设我有这棵树:

        (A) 
        / \
       /   \
     (B)   (C)

我对其进行了更改(“好”的更改,因此算法应该将此更改与“好”的更改相关联)。更新后的树是这样的:

       (A)
       / \
      /   \
    (D)   (C)
    /
   /
 (B)

在另一个节点 (B) 上方添加某个节点 (D) 将被归类为“良好”更改。 所以当我让学习者拥有正确的数据时,算法应该能够知道,如果我在 B 类型的节点之上添加一个 D 类型的节点,这是一个“好”的变化。

我想使用保持树结构的 XML 文件,像朴素贝叶斯这样的简单分类器不起作用,因为它无法识别一个节点是否添加到另一个节点之上,它只会是能够知道已经添加了一个节点。

我不知道应该如何使用哪种算法/技术,也不知道应该如何将数据传递给学习者,因为这种情况下的上下文很重要。

我是机器学习的新手,如果这是一个愚蠢的问题,我很抱歉。

谢谢

【问题讨论】:

我对这个话题了解不多,但似乎很适合reinforcement learning。 Here 是另一个更易读的强化学习介绍。 我不确定这个问题是否适合机器学习,或者它是否与简单规则有关。您要对树的其余部分不相关的树(更改结果)或局部更改(父节点到子节点的关系)进行分类吗?有比插入子节点更复杂的变化吗?您如何确定树/更改是好还是坏? 我只想从具体的变化中学习,例如:添加/删除/更新一个孩子,但要记住本地树上下文(例如,更近的 N 个孩子)。更改可以是更改子内容、删除子项、添加子项,但了解更改的本地上下文很重要。我不需要担心更改是好是坏,因为我已经知道了,我有好的更改和坏的更改列表,这不是问题。我想使用 ML,因为我想处理许多树的变化,我不需要知道它们。感谢您的回复。 如果您想通知评论者,请使用语法@stefan 参见comment reply。 【参考方案1】:

所有类型的分类器在不同场景中的表现都不同:SVM、AdaBoost、RandomForest,甚至是(朴素的)贝叶斯分类器。只需了解一些用于您最喜欢的编程语言的库,其中包含许多此类算法并尝试它们。

更重要的是您用来训练分类器的功能。在你的情况下,...

树的深度 树的平衡 订购 按这些节点的顺序加权的节点的某些属性

【讨论】:

但是例如使用贝叶斯分类器,我无法通过您告诉我的任何这些功能。我只能给算法一组属于“好”类别的文本和另一组属于“坏”类别的文本。如果刚刚添加的节点高于 A、B、C 等类型的节点,我无法传递树深度、平衡... @FernandoGarcia 为什么你不能通过树深度什么的?您似乎将 XML 文件直接传递给分类器。我觉得不合适。您需要将原始数据转换为更可分类的特征,这是机器学习中常见且重要的部分。技术上可以通过解析 XML 文件来获得树的深度。 是的,这正是我想要避免的,因为如果我将 XML 传递给分类器,我不会得到任何好的结果。我需要处理所做更改的上下文,但我不知道应该使用哪种算法。我正在使用 apache spark 并使用朴素贝叶斯分类器,但是......这对于我想要实现的目标来说还不够。感谢您的回复。

以上是关于使用机器学习比较树木变化的最佳技术/算法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

机器学习 - 算法特征排序

机器学习算法的五种基本算子是

深度学习和机器学习的区别是啥

历史上第一个机器学习算法是啥?

朴素贝叶斯算法理论推导及其变种算法

强化学习是啥 意思