使用多个距离度量进行聚类

数据挖掘 Python scikit-学习 聚类
2022-02-12 04:13:41

我正在尝试使用聚类来自动化组查找过程,目的是能够自动检测看不见数据中的组。数据是任何给定网页中的 html 元素,这包括许多功能,包括从 Web 浏览器呈现的空间和视觉信息。检测到的组通常在语义上是有意义的,例如一组导航链接或主要内容区域中的项目列表。

我已经实现了一个微妙的距离测量来捕捉这些元素的相似或不同,我将这些值传递给 DBSCAN 进行聚类。到目前为止它工作得很好,但我正在努力想办法改进它。

距离函数实际上是 10 个不同距离度量的加权和,这些度量捕获不同类型的相似性和差异。我对更可靠和果断的措施的权重高于其他措施。从理论上讲,权重较低的指标只有在它们一致时才会产生效果,否则会被权重较高的指标压倒。此外,每个测量函数本身都可以放大或减弱其对给定项目对的权重,例如,如果不确定并想要弃权,则将其权重设置为零,或者如果发现特别相似/不同,则将其设置为更高显着或可靠。

尽管它广泛运行得很好,但我注意到通常应该进一步拆分一两个最大的集群。为此,我考虑了两种方法:(a)减弱在集群内主要给出低距离值的度量的权重(从而放大具有更高方差的其他度量),然后重新运行 DBSCAN 或(b)在集群中搜索子集大量同时出现的特征(例如,父元素中的某些 css 类和特定的字体大小),或者基于这些拆分集群,或者调整距离度量以反映这种明显的分组,然后使用调整值。

目前这一切都在无人监督的情况下工作,但我愿意手动创建一组真实数据来改进它。也许然后这可以用来优化权重,以最小化集群内距离并最大化集群间距离?我也喜欢多次运行集群的想法,根据集群内每个度量的方差重复调整权重。

我正在寻找有关如何优化它的更多想法,我将不胜感激。我在其他地方看到了一些评论,即无监督聚类仅适用于探索数据而不是自动化决策,但我无法找到更好的方法来找到这些组,因为我有限的 ML/数据科学经验。考虑到我花了这么多时间来构建它,理想的做法是找出一种聪明的方法,以更智能的方式自适应地调整这些权重。

2个回答

这只是一个疯狂的猜测,但我想知道您的自定义距离函数是否确实是一个距离函数特别是,您的问题可能会发生,因为您的距离函数d(x,y)分离观察:如果存在两个观察,则为这种情况x1x2是不同的,x1x2,但距离为零,d(x1,d2)=0. 然后x1x2您的算法必然会将其放入同一个集群中。如果您的测试集中的许多观察都发生这种情况,那么您将观察到大型集群。

您也许可以在纸上检查您的函数是否满足距离函数的四个公理(请参阅上面的 Wikipedia 文章);如果那不可能,您至少可以通过循环测试集来检查它。

我建议尝试学习 HTML 代码的分布式表示,为标签构建嵌入矩阵,使用类似这样的 RNN 自动编码器来学习元素。因此,您最终会得到一些低级维度,在该潜在空间中进行聚类将更加高效和有效。