匹配集合中的相似项目


10

我正在尝试搭配物品。给定一组项目,我可以按从0到100的等级对它们之间的相似程度进行排名。例如,如果项目n 1是牛奶,项目n 2也是牛奶,那么n 1n 2之间的相似度将是100%。如果n 3是苏打水,则n 1n 3之间的相似度可能是80%,依此类推。ññ1个ñ2ñ1个ñ2ñ3ñ1个ñ3

我试图弄清楚如何将项目分组为相似项目的组,但这是一个具有挑战性的问题。我遇到了以下问题:马类似于牛,类似于山羊,部分类似于山羊奶酪,后者类似于与薄脆饼干相关的奶酪。但是,我不希望一匹马与饼干一样。每个项目可能是成对相关的,但开始和结束可能不是。ñ

有任何想法吗?


在进化生物学中,这种成对聚类的结果称为系统发生树,因此您可以将其添加到一组有用的搜索词中。
hardmath 2012年

Answers:


7

您要在此处执行的操作是将N个观察结果划分为显示相似属性的K个群集。这称为群集,您可以在此处找到更多信息。

由于您已经具有数值相似性度量,因此让我考虑使用K-Means算法,在该算法中,您需要执行以下几个步骤:

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

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

这样可以确保每个聚类中的项目有所关联,并且可以通过增加算法中的聚类数量(“ K”)来获得更细粒度的聚类。查找群集的数量取决于每个问题,我建议您为您的问题尝试一堆值,看看将哪些结果分组在一起,然后看看有什么道理。

希望能有所帮助。


5

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

看看scikits.learn(Python代码)中的聚类算法以及其中提到的参考。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.