【问题标题】:Clustering tree structured data聚类树结构数据
【发布时间】:2010-12-13 20:28:34
【问题描述】:

假设我们以半结构化格式的树形式给出数据。例如,树可以形成为有效的 XML 文档或有效的 JSON 文档。你可以想象它是一个类似 lisp 的 S 表达式或 Haskell 或 Ocaml 中的 (G) 代数数据类型。

我们在树状结构中得到了大量的“文档”。我们的目标是对相似的文档进行聚类。通过聚类,我们的意思是一种将文档分成 j 组的方法,这样每个组中的元素看起来彼此相似。

我确信那里有描述方法的论文,但由于我在 AI/集群/机器学习领域不是很了解,我想问一下要寻找什么以及在哪里挖掘的人。

我目前的做法是这样的:

  • 我想将每个文档转换为为 K 均值聚类设置的 N 维向量。
  • 为此,我递归地遍历文档树,并为每个级别计算一个向量。如果我在树顶点,我会在所有子顶点上递归,然后对它们的向量求和。此外,每当我再次出现时,都会应用一个功率因数,因此我越往下走,它就越不重要。文档的最终向量是树的根。
  • 根据树叶上的数据,我应用了一个函数,将数据放入向量中。

但肯定有更好的方法。我的方法的一个缺点是它只会对具有彼此非常相似的顶部结构的树进行相似性聚类。如果相似性存在,但出现在树的更远位置,那么我的方法可能不会很好。

我想全文搜索也有解决方案,但我确实想利用数据中存在的半结构。

距离函数

正如建议的那样,需要定义文档之间的距离函数。没有这个函数,我们就不能应用聚类算法。

事实上,问题可能在于距离函数及其示例。我希望根附近的元素相同的文档彼此靠近。我们走得越远,它就越不重要。

后退一步的观点:

我想对来自程序的堆栈跟踪进行集群。这些是格式良好的树结构,其中靠近根的函数是失败的内部函数。我需要一个适当的堆栈跟踪之间的距离函数,因为代码中发生了相同的事件。

【问题讨论】:

  • 要执行聚类,您首先需要根据您期望的“看起来像彼此”的含义定义一个距离函数...
  • 啊,谢谢。这绝对是利剑。

标签: algorithm language-agnostic artificial-intelligence cluster-analysis


【解决方案1】:

鉴于您的问题的性质(堆栈跟踪),我会将其简化为字符串匹配问题。将堆栈跟踪表示为树有点开销:对于堆栈跟踪中的每个元素,您只有一个父元素。

如果字符串匹配确实更适合您的问题,您可以遍历数据,将每个节点映射到哈希上,并为每个“文档”创建其 n-gram。

例子:

映射:

  • 异常 A -> 0
  • 异常 B -> 1
  • 异常 C -> 2
  • 异常 D -> 3

文件 A:0-1-2 文件 B:1-2-3

文档 A 的 2-grams: X0, 01, 12, 2X

文档 B 的 2 克: X1、12、23、3X

使用 n-gram,无论根节点如何,您都可以对相似的事件序列进行聚类(在本例中为事件 12)

但是,如果您仍然确信需要树而不是字符串,则必须考虑以下事项:查找树的相似性要复杂得多。您将希望找到相似的子树,在更大的深度上相似的子树会产生更好的相似度分数。为此,您将需要发现封闭子树(作为扩展它的树的基础子树的子树)。您不想要的是包含非常罕见的子树的数据集合,或者存在于您正在处理的每个文档中的子树(如果您不寻找频繁的模式,您会得到这些子树)。

这里有一些提示:

一旦有了频繁子树,就可以像使用 n-gram 进行聚类一样使用它们。

【讨论】:

    【解决方案2】:

    Here 你可能会发现一篇似乎与你的问题密切相关的论文。

    摘自:

    This thesis presents Ixor, a system which collects, stores, and analyzes stack traces in distributed Java systems. When combined with third-party clustering software and adaptive cluster filtering, unusual executions can be identified.

    【讨论】:

      猜你喜欢
      • 2014-04-19
      • 2012-02-06
      • 2010-10-30
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 2013-07-30
      • 1970-01-01
      相关资源
      最近更新 更多