对于我的集合中的对象的给定度量,我需要形成具有两个条件的集群:
目前,我使用带有覆盖度量函数的凝聚聚类(远距离对象为0),但它感觉不太合适。
答案 0 :(得分:2)
对于n个对象,所有可能的聚类都可以用对称二进制矩阵{0,1} ^ {n \ times n}来描述。位置(i,j)处的元素描述对象i是否与对象j在同一聚类中。这意味着你有
(n^2 + n)/2 - n = n^2 - n
二进制变量。在你的情况下,它将是224 985 000变量。那是很多。但是,正如您可以将其减少为SAT解决问题,它可能仍然可行。我想这取决于有多少聚类满足约束但仍然很糟糕。
现在你可以将它设为布尔可满足性问题:
群集中任何对象与最远邻居之间的距离必须小于t1。
通过此约束将矩阵的某些元素设置为0,因为它们相距太远。
群集中的任何对象与最近邻居之间的距离必须小于t2。
我猜你的意思是群集中最近的邻居。这意味着o不在集群中(例如,如果o具有索引i,则所有j的(i,j)= 0)或者预先计算的j集合之一必须为1.因此对于具有索引的每个对象我在这里得到限制,如
((i, 0) = 0 and (i, 1) = 0 and ... and (i,i)=1 and ... and (i,n)=0)
or
((i, k1)=1 or (i, k2)=1 or (i, k3)=1)
其中dist(i,k_j)< T2。
现在,您可以尝试简单地迭代许多解决方案并找到最佳解决方案(例如silhouette coefficient),或者您可以尝试更精细的方法。有关更多信息,请参阅constrained optimization。
您可以使用epsilon = t2的DBSCAN(或此系列的算法之一)。然后 - 如果必要的话 - 如果它们不满足第一个条件则拆分簇。