2012-04-12 64 views
1

我有一组向量。载体有三种不同的类别, A,B和C.现在,我需要按照以下标准对它们进行聚类:自定义聚类算法

  1. 每个群集中应该有最少1个和最多3个向量。
  2. 每个群集中的所有向量应该是不同的类型。 .ie,一个簇不应该包含2个或更多相同类型A,B或C的向量。
  3. 如果这里是一个包含一组向量的簇,那么任意两个向量之间的距离(比如说Eucledian距离)是小于预定义的阈值T.
  4. 如果含有2个或更多个载体(当然为3的最大)的群集,则它是强制性的,这些矢量中的一个是式A的

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

+2

我认为你必须有一个没有规定的标准,因为你可以通过把每个向量放在一个单独的集群中来满足那些给定的标准。你只是想尽量减少集群的数量?另外,总共有多少个矢量? – 2012-04-12 12:03:02

+0

将每个矢量放在不同的群集中?你能为我澄清一下吗?我总共有大约5000,10000和12000个A,B和C型载体。 – 2012-04-12 12:04:49

+0

使用给定的数字,通过拥有27000个群集满足您的标准。 5000具有单个A,10000具有单个B,12000具有单个C. – 2012-04-12 12:09:02

回答

1

你可以使用约束引擎来解决这种事情。类似choco包括支持您列出的所有约束(以及优化,因为我猜如果你有歧义,你想要最小数量的集群?)。

我不是巧克力的专家,但如果它有任何帮助我有notes我在学习的时候做出来的(这些都是在约束条件下解决的,但我昨晚做了优化工作,并且会很快添加)。有一个确定的学习曲线,但对于这样复杂的事情,我认为它不会再花时间学习,而不是自己写一个解决方案(然后将来你会有一个新的一般工具,而不是一堆非常具体的代码)

和巧克力不是独一无二的 - 还有一堆 - google recently packaged some

+0

谢谢安德鲁。只是另一个类似的简单问题:如果我有一组矢量,我如何将它们聚类,使得在每个聚类中,任意两个矢量之间的欧氏距离小于阈值?因此,最后,可能有矢量不属于任何群集。你知道现有的算法吗? – 2012-04-13 06:39:08