Graph 聚类问题到图论语言的转换

Graph 聚类问题到图论语言的转换,graph,cluster-analysis,Graph,Cluster Analysis,我有一个矩形平面网格,每个单元格都分配了一些整数权重。我正在寻找一种算法,以确定集群的3至6个相邻的细胞高于平均重量。这些水滴应具有近似圆形的形状 在我的例子中,不包含簇的单元的平均重量约为6,包含簇的单元的平均重量约为6+4,即在6左右的某个位置有一个“背景重量”。权重随泊松统计量波动 对于小背景,贪婪算法或种子算法的性能相当好,但如果我的聚类单元的权重接近背景中的波动,则会出现故障,即,即使没有,它们也会倾向于找到一个聚类。此外,我不能通过所有可能的设置进行暴力搜索,因为我的网格很大(大约1

我有一个矩形平面网格,每个单元格都分配了一些整数权重。我正在寻找一种算法,以确定集群的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|

对于图论的解决方案,有几个句子,但你可能是在MathOverflow上发布的最好的。也可能有用

解决这些问题的传统计算方法(考虑到它的普遍性,可能最好的方法)是栅格分析,这在GIS和遥感领域是众所周知的,因此有许多工具提供了实现。用于查找最适合您的问题的关键字是光栅、最近邻、重采样和聚类。GDAL库通常是其他工具的基础

例如

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

要检查圆形,可以将重绘值转换为多边形并检查结果特征


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

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))


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

使用联合查找算法进行聚类?非常快


我猜这个图是考虑每一对相邻的高值单元连接后得出的。使用union find算法查找所有簇,并接受所有大于特定大小的簇,可能还有形状约束(例如,基于从簇中心到簇大小的平均平方距离)。这是union find算法的一个微小变化,用于收集统计数据,这些统计数据在运行过程中是需要的(计数、x之和、x^2之和、y之和、y^2之和)。

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

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


在此之后,你将拥有一片森林或一棵树(尽管我认为这不太可能)。这是将矩阵转换为图形的一种可能方式。我不确定这是否是最有用的翻译。

听起来像是很久以前计算机视觉中解决的问题。例如,试图探测黑暗背景上的暗星。虽然天文学家可能有很多资源,但他们也不介意这么快。我怀疑你的问题以前已经解决了。顺便说一下,我会坚持使用矩阵数据结构。它使用起来更快,而且很有意义。你想干什么?1000x1000没那么多。你可以:A)使用一个好的快速“矩阵”库。SciPy B)计算平均“亮度”。C) 从左到右,然后从上到下遍历每个单元格。现在假设为方形3x3。计算平均密度。看起来一般-继续。看起来比正常高?然后调查这个地区。如果你有很大的区域,这个问题很容易发生(想象一下天空中的云靠近暗淡的恒星)。这些云会把一切都搞得一团糟。我们必须对数据的外观做出假设。@Hamish:至于“已解决”,我正在寻找一种可靠的方法(很少出现误报)。好吧,这可能是一个NP难的问题。我计划做十亿次。@honk,这甚至不是一个定义明确的问题。你的天赋很弱。特别是:什么是“高于平均水平”?1个性病(不管这意味着什么)离开?理论上几乎所有的问题都是NP完全问题。像计算机视觉领域的从业人员一样,他们只是接受现实,并以最好的方式处理它。你打算做什么10亿次?你需要处理1B“图像”?给我们一些你正在尝试做的背景知识。处理实时数据?顺便说一句,小波可能有用,但我并不真正理解它们。谢谢你的链接。因为我的信号很弱,所以我不想丢弃背景(这会带来另一系列波动问题)。至于形状,我真的不在乎,我只想找到斑点。最后,这些想法仍然(需要)遵循贪婪或种子算法的路线,这些算法在这里存在问题。这就是为什么我在寻找不同的方法。再次感谢你的指点。但是