自定义聚类算法

Posted

技术标签:

【中文标题】自定义聚类算法【英文标题】:A custom clustering algorithm 【发布时间】:2012-04-24 18:29:22 【问题描述】:

我有一组向量。向量分为三个不同的类别,即。 A、B 和 C。现在,我需要根据以下标准对它们进行聚类:

    每个集群中应该有最少 1 个和最多 3 个向量。 每个簇中的所有向量都应该是不同的类型。 .即,一个簇不应包含 2 个或多个相同类型 A、B 或 C 的向量。 如果这里是一个包含一组向量的集群,那么任何两个向量之间的距离(比如说欧几里德距离)都小于预定义的阈值 T。 如果一个簇包含 2 个或更多向量(当然最多 3 个),那么这些向量中的一个必须是 A 类型。

是否有任何现有的算法来执行这种类型的聚类?假设我需要从头开始,那么根据上述条件对向量进行聚类需要遵循哪些步骤?

【问题讨论】:

我认为您必须有一个未说明的标准,因为您可以通过将每个向量放在单独的集群中来满足简单给出的标准。你只是想尽量减少集群的数量吗?还有,总共有多少个向量? 将每个向量放在不同的集群中?你能帮我澄清一下吗?我总共有大约 5000、10000 和 12000 个 A、B 和 C 类型的向量。 使用给定的数字,拥有 27000 个集群即可满足您的条件。 5000个有一个A,10000个有一个B,12000个有一个C。 如果 A 类向量和 B 类向量之间的欧式距离小于“T”,则这两个向量属于一个簇。因此它将是 26999 个集群。这就是我的意思:)(抱歉,如果没有表达清楚)。向量需要根据它们的欧几里德距离进行分组——条件是如果一个簇中有 2 个或多个向量,那么簇中应该有一个类型为 A 的主向量。在我的用例中,这个主向量实际上是某种参考/父向量,B 和 C 类型的其他向量与之配对。希望现在很清楚。 【参考方案1】:

您可以使用约束引擎来解决此类问题。 choco 之类的东西包括对您列出的所有约束的支持(以及优化,因为我猜如果您有歧义,您想要最少数量的集群?)。

我不是 choco 方面的专家,但如果我在学习它时得到了 notes 的任何帮助(这些都是关于约束解决的,但我昨晚进行了优化,很快就会添加更多)。有一个明确的学习曲线,但是对于如此复杂的事情,我认为你不需要花更多的时间来学习而不是自己编写一个解决方案(然后在未来你有一个新的通用工具,而不是一堆非常具体的代码)

而且 choco 并不是独一无二的 - 还有很多这样的 - google recently packaged some。

【讨论】:

谢谢安德鲁。另一个类似的简单问题:如果我有一组向量,我如何对它们进行聚类,以便在每个聚类中,任何两个向量之间的欧几里德距离小于阈值?因此,最后,可能存在不属于任何集群的向量。你知道这方面的现有算法吗?

以上是关于自定义聚类算法的主要内容,如果未能解决你的问题,请参考以下文章

聚类算法---引言

算法聚类算法

聚类算法

聚类算法——DBSCAN算法原理及公式

聚类算法之K-means算法

独家一文读懂聚类算法