给定一堆项目,通过比较将它们分成有意义的组

Given a pile of items, split them into meaningful groups by comparing them

考虑到我有 'pile' 项需要分组,并且我可以表达这些项相对于彼此的差异有多少,如果你愿意的话,可以打分,我如何将此输入分成有意义的组?

我认识到这是一个有点抽象的问题,所以为了让这里更清楚,我已经尝试过:

我尝试将输入表示为加权图,其中每个顶点都连接到其他每个顶点,边的 'strength' 是它们的相对分数。然后我将采用图形的最长边,并将每个其他顶点分隔 'closeness' 到该最长边末端的顶点。这工作得相当好,但缺点是总是为结果产生两组,这可能不一定合乎逻辑。

例如:说我可以用数字来表达水果的不同。然后给定一堆苹果,不同品牌的苹果会形成不同的类别,比如 Elstar、Jonagold,你有什么……但是当我有一堆由苹果、梨和橙子组成时,那么苹果将是比较相似,应该属于同一类。

我猜我必须删除图形中大于均值加标准差或类似值的每条边,然后查看出现了多少个脱节的子图,但我想听听数学知识比我多的人的方法。

评论有点长

你说的是聚类。您似乎在两个项目之间有一个 "distance" 矩阵,尽管这可能是 "strength" 度量的一些倒数。距离度量是非负的,当两个事物相等时为 0。值越大,项目越远。

当你有一个通用的 "distance" 矩阵时,典型的聚类方法是 hierarchical/agglomerative 聚类("distance" 在引号中是因为它可能不满足距离的所有形式质量) . Wikipedia page 是理解这项技术的一个很好的起点。层次聚类背后的思想可以应用于非完全连接的图。

我希望几乎每个统计包都包含某种形式的层次集群。