假设我们在飞机的有界区域有n
个点。问题是将其划分为4个区域(水平线和垂直线),以使每个区域中 a metric 的总和最小化。
度量可以是例如每个区域中各点之间距离的总和;或关于积分的传播的任何其他措施。见下图。
我不知道任何聚类算法是否可以帮助我解决这个问题,或者例如它是否可以表述为一个简单的优化问题。决策变量是" 轴"。
答案 0 :(得分:2)
注意 - 可能不正确。我会尝试添加另一个答案
最小化差异平方和的一维版本是凸的。如果从最左边的线开始并向右移动,则线的每个点都会停止与右边的点累积差异,并开始累积到左边的点的差异。当你跟着这个时,左边的差异增加,右边的差异减小,所以你得到一个单调的减少,可能是一个点,可以在线的两边,然后单调增加。
我认为一条线上聚类点的一维问题是凸的,但我不再相信在最佳位置绘制单条垂直线的问题是凸的。我担心在y坐标上变化的点数集合使得左手点大多数是高位,右手点大多是低位,而中间点在高位和低位之间交替。如果这不是凸的,则尝试扩展到两个维度的答案部分将失败。
因此,对于问题的一维版本,您可以选择任何一点并及时计算出O(n)该点是否应位于最佳分界线的左侧或右侧。因此,通过二进制斩波,您可以找到最佳时间线O(n log n)。
我不知道二维版本是否为凸面,但您可以尝试水平线的所有可能位置,并且对于每个位置,使用类似的方法求解垂直线的位置。一维问题(现在你要担心两个凸函数的总和,但这仍然是凸的,所以可以)。因此,您解决了最多O(n)个一维问题,给出成本O(n ^ 2 log n)。
如果这些点的分布非常奇怪,我希望你可以通过在前一次迭代中使用一维问题的解决方案来节省大量时间,作为对该解决方案位置的初步估计。下一次迭代。给定一个起点x,您会发现它是在解决方案的左侧还是右侧。如果它位于解决方案的左侧,请走1,2,4,8 ...步距离以找到解决方案右侧的点,然后运行二进制切换。希望这个两阶段的印章比从头开始整个阵列的二进制印章更快。
答案 1 :(得分:2)
我相信这可以表述为MIP(混合整数规划)问题。
让我们介绍4个象限A,B,C,D。 A是右,上,B是右,下等。然后定义二进制变量
delta(i,k) = 1 if point i is in quadrant k
0 otherwise
和连续变量
Lx, Ly : coordinates of the lines
显然我们有:
sum(k, delta(i,k)) = 1
xlo <= Lx <= xup
ylo <= Ly <= yup
其中xlo,xup
是最小和最大x坐标。接下来,我们需要实现以下含义:
delta(i,'A') = 1 ==> x(i)>=Lx and y(i)>=Ly
delta(i,'B') = 1 ==> x(i)>=Lx and y(i)<=Ly
delta(i,'C') = 1 ==> x(i)<=Lx and y(i)<=Ly
delta(i,'D') = 1 ==> x(i)<=Lx and y(i)>=Ly
这些可以通过所谓的指标约束来处理,也可以写成线性不等式,例如
x(i) <= Lx + (delta(i,'A')+delta(i,'B'))*(xup-xlo)
与其他人相似。最后目标是
min sum((i,j,k), delta(i,k)*delta(j,k)*d(i,j))
其中d(i,j)
是点i和j之间的距离。该目标也可以线性化。
在应用了一些技巧之后,我可以使用Cplex在大约40秒内证明100个随机点的全局最优性。这种方法并不适用于大型数据集(当点数变大时,计算时间会迅速增加)。
我怀疑这不能成为一个凸出的问题。此外,我不确定这个目标是否真的是你想要的。它将尝试使所有集群具有相同的大小(向大型集群添加一个点会为目标添加许多距离;向一个小集群添加一个点很便宜)。可能是每个群集的平均距离是更好的衡量标准(但这会使线性化变得更加困难)。
答案 2 :(得分:0)
这是另一次尝试。布置网格,以便除了关系之外,每个点是其列中的唯一点,并且是其行中的唯一点。假设在任何方向上没有关系,则该网格具有N行,N列和N ^ 2个单元。如果有联系,网格较小,这使生活更轻松。
用水平和垂直线分隔单元格几乎是挑选出网格的单元格,并且说单元格正好位于线条交叉处的上方和右侧,因此大致为O(N ^ 2)可能的这种划分,我们可以计算每个这样的划分的度量。我声称,当度量是群集中点之间距离的平方和时,其成本几乎是O(N ^ 2)问题中的常数因子,因此检查每种可能性的总成本是O( N ^ 2)。
由分割线形成的矩形内的度量是SUM_i,j [(X_i-X_j)^ 2 +(Y_i-Y_j)^ 2]。我们可以分别计算X贡献和Y贡献。如果你做了一些代数(如果你先减去一个常数使得一切总和为零会更容易),你会发现坐标的度量贡献在该坐标的方差中是线性的。因此,我们想要计算每个分区形成的矩形内的X和Y坐标的方差。 https://en.wikipedia.org/wiki/Algebraic_formula_for_the_variance为我们提供了一个标识,告诉我们我们可以计算每个矩形的SUM_i Xi和SUM_i Xi ^ 2的方差(以及y坐标的相应信息)。由于浮点舍入错误,此计算可能不准确,但我将忽略此处。
给定与网格的每个单元格相关联的值,我们希望能够轻松计算出矩形内的这些值的总和。我们可以沿每一行创建部分和,将0 1 2 3 4 5转换为0 1 3 6 10 15,以便一行中的每个单元格包含其左侧和自身的所有单元格的总和。如果我们采用这些值并对每列进行部分求和,我们就为每个单元格计算出右上角位于该单元格中并延伸到网格底部和左侧的矩形的总和。在最右边的列中的这些计算值给出了与该单元格在其下方相同级别的所有单元格的总和。如果我们减去矩形,我们知道如何计算,我们可以找到位于网格右侧和网格底部的矩形的值。类似的减法允许我们首先计算出我们选择的任何垂直线左右两侧的矩形值,然后完成由两条线穿过网格中任何单元格形成的四个矩形的集合。其中昂贵的部分是计算出部分金额,但我们只需要做一次,而且只需要O(N ^ 2)。用于计算任何特定度量的减法和查找仅具有恒定成本。我们必须为每个O(N ^ 2)个单元做一个,但那仍然只有O(N ^ 2)。
(因此我们可以通过在O(N ^ 2)时间内计算与所有可能聚类相关联的指标并选择最佳聚类来找到O(N ^ 2)时间内的最佳聚类。