Algorithm 布尔型的多维聚类
以下是我的问题场景: 我有几千件物品。每个对象有256个布尔维度(true或false)。我想找到这样的集群Algorithm 布尔型的多维聚类,algorithm,cluster-analysis,multidimensional-array,Algorithm,Cluster Analysis,Multidimensional Array,以下是我的问题场景: 我有几千件物品。每个对象有256个布尔维度(true或false)。我想找到这样的集群 每个集群都有最小数量的真维度(如果集群中的任何对象将此维度视为真,则集群的维度为真) 所有簇上所有真实维度的总和最小 每个簇都不大于某个预定义值 解的最优性不是必需的,但是算法应该是快速的 我应该如何最好地解决这个问题?你会推荐一种算法吗 注意:我已经用蛮力方法解决了这个问题,但是速度很慢。您可以将其写成: 您有固定数量的簇和对象。 每个群集最多可以有256个真实维度。 如果对象k中的
注意:我已经用蛮力方法解决了这个问题,但是速度很慢。您可以将其写成: 您有固定数量的簇和对象。
每个群集最多可以有256个真实维度。
如果对象k中的尺寸i为真,则参数等于1 您有以下变量:
提醒一下:解决MILP是一个NP完全问题,所以我决定写下我提出的(理论)解决方案。一方面是因为它可能会帮助我(请参阅下文了解更多信息),另一方面是为感兴趣的人提供一个体面的解决方案。这是一个线性方程组,我们可以用 我提出的限制条件是:
1) 每个对象都恰好位于一个簇中 2) 每个簇最多有M个(常量)对象 3) 如果集群中至少有一个对象的维度设置为true,则集群的维度为true
我现在将解释这些约束是如何实施的: 设有n个对象和k个簇。我们考虑和(以下是一行)< /P> x11+x21+x31+…+xn1+d11+d21+d31+…+dn1+ x12+x22+x32+…+xn2+d12+d22+d32+…+dn2+ x1k+x2k+x3k+…+xnk+d1k+d2k+d3k+…+dnk 在哪里 xac为真iff对象a为int集群c 如果集群c中的维度b为真,则dbc为真 因为集群对象总是更好(或者至少从来不会有害),所以我们知道集群的数量是ceil(对象除以M)。为了简单起见,我现在将省略变量,只写系数 1)每个对象恰好位于一个簇中 10…0 0…0 10…0 0…0 10…0 0…0。。。10…0…0=1 010…0 0…0 010…0 0…0 010…0 0…0 0。。。010…0…0=1 0..01 0…0 0…01 0…0 0…01 0…0。。。0…01 0…0=1
这将强制每个对象恰好位于一个集群中。这可以允许对象与零件一起使用(第1点是否意味着每个集群必须至少有一些固定数量的真实维度,或者每个集群必须有尽可能少的真实维度?如果您有一个功能性的但缓慢的实现,也许您应该提供一个小示例,其中维度要少得多。这意味着每个集群应该有尽可能少的真实维度。)尽可能。我只是注意到它可能有点多余。只有2和3应该足以定义问题。蛮力基本上是这样的:1)找到真实维度最少的非群集对象并添加到新群集(当前群集)2)找到最相似的非群集对象(到当前群集)并添加。重复此操作,直到当前簇已满3)转到1)如果有更多非簇对象我的直觉是,您应该从具有最真实维度的对象开始。一旦将其中一个对象放入集群中,就可以免费添加许多其他对象,因为它们的真实维度是第一个对象的子集。真实维度很少的对象几乎可以放在任何有空间的地方。这似乎是对“集群iif中的维度是真实的,如果集群iif中的所有对象都是真实的”的误解。这应该是“一个维度在集群中为false,如果它在集群中的所有对象中为false”。但总的来说,这是一个非常好的主意。非常感谢。一旦我有时间验证,我会将其标记为已接受!在这种情况下,第二个约束应该是d_i,j