将聚类问题转化为图论语言

时间:2010-04-17 14:27:45

标签: graph cluster-analysis

我有一个矩形平面网格,每个单元格分配了一些整数权重。我正在寻找一种算法来识别具有高于平均重量的3到6个相邻细胞的簇。这些斑点应该具有近似圆形的形状。

对于我的情况,不包含聚类的细胞的平均重量约为6,而含有聚类的细胞的平均重量约为6 + 4,即在6附近有一个“背景重量”。权重随波动而变化。泊松统计。

对于小背景贪婪或种子算法表现相当不错,但如果我的聚类单元的权重接近背景中的波动,即使没有任何东西,它们将倾向于找到聚类。此外,我无法通过所有可能的设置进行暴力搜索循环,因为我的网格很大(类似于1000x1000),我打算经常这样做(10 ^ 9次)。我的印象是,在图论中可能存在解决这个问题的方法。我听说过顶点封面和派系,但是不知道如何最好地将我的问题翻译成他们的语言。我知道图论可能会对输入的统计性质产生问题,但我很有兴趣看到哪些算法可以找到,即使它们无法识别每个簇。

这里是一个示例剪辑:框架区域每个单元平均有10个条目,所有其他单元格平均有6个。当然,网格进一步扩展。

| 8|  8|  2|  8|  2|  3| 
| 6|  4|  3|  6|  4|  4| 
        ===========
| 8|  3||13|  7| 11|| 7|
|10|  4||10| 12|  3|| 2|
| 5|  6||11|  6|  8||12|
        ===========
| 9|  4|  0|  2|  8|  7|

4 个答案:

答案 0 :(得分:1)

对于图论解决方案,有几句in wikipedia,但您可能最好在MathOverflow上发布。 This question也可能有用。

用于解决这些问题的计算中的传统方法(可能最好考虑其无处不在)是栅格分析 - 在GIS和遥感世界中众所周知,因此有许多工具可以提供实现。用于查找最适合您的问题的关键字将是栅格,最近邻,重采样和聚类。 GDAL库通常是其他工具的基础。

E.g。 http://clusterville.org/spatialtools/index.html

您可以尝试检查GDAL库和源代码,看看您是否可以在您的情况下使用它,或者查看它是如何实现的。

要检查圆形形状,您可以将剩余值转换为多边形并检查结果特征

http://www.gdal.org/gdal_polygonize.html

答案 1 :(得分:0)

我不确定我是否看到了图论的类比,但你可以通过预先计算一个区域积分来加快速度。这感觉就像一个多尺度的东西。

  

A [i,j] = Sum [Sum [p [u,v],{u,0,i},   {v,0,j}]];

然后矩形(a,b),(c,d)区域的平均亮度为

  

(A [c,d] - (A [c,b] + A [a,d])+ A [a,b])/((c-a)(d-b))

如果您的单元格中有大数字,溢出可能不是您的朋友。

答案 2 :(得分:0)

使用union-find算法进行聚类?它非常快。

我猜这个图是由于考虑了每对相邻的高值单元而产生的。使用union-find算法查找所有聚类,并接受所有超过一定大小的聚类,也许还有形状约束(例如,基于聚类中心与聚类大小的平均平方距离)。联合查找算法的一个微不足道的变化是收集你需要的统计数据(计数,x的和,x的总和,y的总和,y ^ 2的总和)。

答案 3 :(得分:0)

如果您只是想找到一种方法将问题转化为图形问题,那么您可以做些什么。

从每个点看你所有的邻居(这可能是8个相邻的正方形或4个相邻的正方形取决于你想要的东西)。查找具有最大值的邻居,如果它大于您,则将自己连接到此正方形。如果它小,那么什么都不做。

在此之后你会有一个森林或可能是一棵树(虽然我想这不太可能)。这是将矩阵转换为图形的一种可能方式。我不确定它是否是最有用的翻译。