我有一组向量。这些向量属于三个不同的类别,即。 A、B 和 C。现在,我需要根据以下标准对它们进行聚类:
- 每个簇中应至少有 1 个向量,最多有 3 个向量。
- 每个簇中的所有向量都应该属于不同的类型。 .即,一个簇不应包含 2 个或更多相同类型 A、B 或 C 的向量。
- 如果这是一个包含一组向量的聚类,那么任意两个向量之间的距离(假设为欧几里得距离)小于预定义的阈值 T。
- 如果有一个簇包含 2 个或更多向量(当然最多 3 个),则这些向量之一必须是 A 类型。
是否有任何现有算法可以执行此类聚类?假设我需要从头做起,那么根据上述条件对向量进行聚类需要遵循哪些步骤?
最佳答案
您可以使用约束引擎解决此类问题。类似 choco 的东西包括对您列出的所有约束的支持(以及优化,因为我想如果您有歧义,您想要最小数量的集群?)。
我不是巧克力方面的专家,但如果有任何帮助,我有 notes我在学习它的同时做了(这些都是关于约束解决的,但我昨晚进行了优化,很快就会添加更多)。有一个明确的学习曲线,但对于这种复杂的东西,我认为你不会花比自己编写解决方案更长的时间来学习(然后在未来你有一个新的通用工具,而不是一堆非常具体的代码)
choco 并不是独一无二的 - 还有很多 - google recently packaged some .
关于algorithm - 自定义聚类算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10123089/