匹配集合中的相似项目

计算科学 回归 数据分析
2021-12-17 05:44:24

我正在尝试匹配项目。给定一组项目,我可以在 0 到 100 的范围内对它们彼此的相似程度进行排名。例如,如果项目是牛奶,项目也是牛奶,那么之间的相似度将是 100%。如果是苏打水,那么之间的相似度可能是 80%,以此类推。nn1n2n1n2n3n1n3

我试图弄清楚如何将项目分组为类似项目的组,但这是一个具有挑战性的问题。我遇到以下问题:马类似于牛,山羊类似于山羊,山羊奶酪与山羊奶酪类似,与饼干相关。但是,我不希望一匹马与饼干在同一组中。每个项目可能是成对相关的,但开头和结尾可能不是。n

有任何想法吗?

2个回答

您在这里要做的是将 N 个观察结果划分为具有相似属性的 K 个集群。这称为集群,您可以在此处找到更多信息

由于您已经有了数值相似性度量,这让我考虑使用K-Means算法,您可以在其中分几个步骤进行操作:

  • 随机初始化簇质心
  • 将每个观测值分配给与最近的质心对应的集群。
  • 将质心更新为集群中元素的新均值。

当质心停止移动或在某个阈值内时,您可以检查收敛。

这将确保每个集群中的项目具有一定的相关性,并且您可以通过增加算法中的集群数量(“K”)来拥有更细粒度的集群。找到集群的数量取决于每个问题,我建议你为你的问题尝试一堆值,看看组合在一起的结果,看看什么是有意义的。

希望有帮助。

我认为您正在寻找的是所谓的“聚类分析”或“聚类”。存在许多不同的算法。在您的情况下,您需要一些“连接性集群”,即基于链接每两个的属性将元素组合在一起。

查看scikits.learn(Python 代码)中的聚类算法和那里提到的参考资料。