使用机器学习比较树木变化的最佳技术/算法是啥?
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 并使用朴素贝叶斯分类器,但是......这对于我想要实现的目标来说还不够。感谢您的回复。以上是关于使用机器学习比较树木变化的最佳技术/算法是啥?的主要内容,如果未能解决你的问题,请参考以下文章