【发布时间】:2010-12-13 20:28:34
【问题描述】:
假设我们以半结构化格式的树形式给出数据。例如,树可以形成为有效的 XML 文档或有效的 JSON 文档。你可以想象它是一个类似 lisp 的 S 表达式或 Haskell 或 Ocaml 中的 (G) 代数数据类型。
我们在树状结构中得到了大量的“文档”。我们的目标是对相似的文档进行聚类。通过聚类,我们的意思是一种将文档分成 j 组的方法,这样每个组中的元素看起来彼此相似。
我确信那里有描述方法的论文,但由于我在 AI/集群/机器学习领域不是很了解,我想问一下要寻找什么以及在哪里挖掘的人。
我目前的做法是这样的:
- 我想将每个文档转换为为 K 均值聚类设置的 N 维向量。
- 为此,我递归地遍历文档树,并为每个级别计算一个向量。如果我在树顶点,我会在所有子顶点上递归,然后对它们的向量求和。此外,每当我再次出现时,都会应用一个功率因数,因此我越往下走,它就越不重要。文档的最终向量是树的根。
- 根据树叶上的数据,我应用了一个函数,将数据放入向量中。
但肯定有更好的方法。我的方法的一个缺点是它只会对具有彼此非常相似的顶部结构的树进行相似性聚类。如果相似性存在,但出现在树的更远位置,那么我的方法可能不会很好。
我想全文搜索也有解决方案,但我确实想利用数据中存在的半结构。
距离函数
正如建议的那样,需要定义文档之间的距离函数。没有这个函数,我们就不能应用聚类算法。
事实上,问题可能在于距离函数及其示例。我希望根附近的元素相同的文档彼此靠近。我们走得越远,它就越不重要。
后退一步的观点:
我想对来自程序的堆栈跟踪进行集群。这些是格式良好的树结构,其中靠近根的函数是失败的内部函数。我需要一个适当的堆栈跟踪之间的距离函数,因为代码中发生了相同的事件。
【问题讨论】:
-
要执行聚类,您首先需要根据您期望的“看起来像彼此”的含义定义一个距离函数...
-
啊,谢谢。这绝对是利剑。
标签: algorithm language-agnostic artificial-intelligence cluster-analysis