Перевод задачи кластеризации на язык теории графов

У меня есть прямоугольная плоская сетка, в которой каждой ячейке присвоен некоторый целочисленный вес. Я ищу алгоритм для идентификации кластеров от 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|

person Benjamin Bannier    schedule 17.04.2010    source источник
comment
Звучит как давно решенная проблема компьютерного зрения. Например, пытаясь обнаружить тусклые звезды на темном фоне. Хотя у астрономов может быть много ресурсов, они также не против сделать это быстро. Я подозреваю, что ваша проблема была решена раньше. Кстати, я бы придерживался матричной структуры данных. С ним быстрее работать, и это имеет смысл. Что ты пытаешься сделать?   -  person Hamish Grubijan    schedule 17.04.2010
comment
1000х1000 не так уж и много. Вы можете: A) Использовать хорошую библиотеку быстрых матриц. SciPy B) вычислить среднюю яркость. C) Перебрать каждую ячейку слева направо, затем сверху вниз. Теперь примите форму квадрата 3x3. Вычислите среднюю плотность. Выглядит примерно так - продолжайте. Выглядит выше, чем обычно? Тогда исследуйте местность. Проблема может легко возникнуть, если у вас есть большие области (например, облака на небе рядом с тусклыми звездами). Эти облака могут все испортить. Нужно делать предположения о том, как выглядят данные.   -  person Hamish Grubijan    schedule 17.04.2010
comment
@Hamish: И для решения я ищу надежный способ (несколько ложных срабатываний). AFAIK это может быть NP-сложная проблема   -  person Benjamin Bannier    schedule 17.04.2010
comment
Я планирую сделать это миллиард раз.   -  person Benjamin Bannier    schedule 17.04.2010
comment
@honk, это даже не четко определенная проблема. Твоя спецификация слаба. В частности: что выше среднего? 1 std (что бы это ни значило) далеко? Почти все в теории является NP-полной задачей. Практики, такие как специалисты в области компьютерного зрения, просто принимают реальность и справляются с ней наилучшим образом. Вы планируете сделать то, что 1 миллиард раз? Вам нужно обработать 1B изображений? Дайте нам немного информации о том, что вы пытаетесь сделать. Обрабатывать данные в реальном времени? Кстати, вейвлеты могут быть полезны, но я в них не особо разбираюсь.   -  person Hamish Grubijan    schedule 17.04.2010
comment
Я ищу другой способ группировки башен в калориметре, см., например. scholar.google.com/   -  person Benjamin Bannier    schedule 17.04.2010
comment
Что ж, я считаю, что теория графов — это неправильное направление. Преобразование этой матрицы в график вряд ли вам что-то даст. Вершины будут иметь тот же вес, что и ячейки, но вес ребер не имеет смысла. Кроме того, найти соседа достаточно просто с помощью простой матрицы - просто смотрите прямо на Юг (Ю), Ю, Север (С), В, З, ЮВ, ЮЗ, СВ, СЗ. Я считаю, что эта проблема носит статистический характер (нравится вам это или нет), например, потому что инструменты, которые регистрируют данные, несовершенны; всегда есть шум. Детерминированные алгоритмы здесь не применимы. Установить обложку и клику слишком теоретически для этого.   -  person Hamish Grubijan    schedule 17.04.2010
comment
Это определенно кандидат на награду (через 2 дня).   -  person Hamish Grubijan    schedule 17.04.2010
comment
@Hamish Вы слишком много читаете в моем вопросе: я не жду решения ни от кого, я прошу перевод из сетки с весами, переведенными в узлы, ребра и веса   -  person Benjamin Bannier    schedule 18.04.2010


Ответы (4)


Для решений теории графов есть пара предложений в Википедии, но вы вероятно, лучшая публикация на MathOverflow. Этот вопрос также может быть полезен.

Традиционный метод (и, вероятно, лучший, учитывая его повсеместное распространение) в вычислительной технике для решения этих проблем — растровый анализ — хорошо известный в мире ГИС и дистанционного зондирования, поэтому существует ряд инструментов, обеспечивающих реализацию. Ключевые слова, которые можно использовать для поиска наиболее подходящего для вашей задачи, — это растр, ближайший сосед, передискретизация и кластеризация. Библиотека GDAL часто является основой для других инструментов.

Например. http://clusterville.org/spatialtools/index.html

Вы можете попробовать проверить библиотеку GDAL и исходный код, чтобы увидеть, можете ли вы использовать ее в своей ситуации, или посмотреть, как она реализована.

Для проверки круглых форм вы можете преобразовать оставшиеся значения в многоугольники и проверить результирующую функцию.

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

person geographika    schedule 17.04.2010
comment
Спасибо за ссылки географика. Поскольку мой сигнал очень слабый, я не хотел бы отбрасывать фон (в любом случае это открывает еще один набор проблем с колебаниями). А что касается формы, меня это не особо волнует, я просто хочу найти кляксы. В конце концов, эти идеи по-прежнему (должны) идти по пути жадных или затравочных алгоритмов, которые, как известно, имеют здесь проблемы. Вот почему я ищу разные подходы. - person Benjamin Bannier; 17.04.2010
comment
Еще раз спасибо за указатели. Но, как я уже писал, я уже знаю об этих инструментах и ​​ищу совершенно другое направление для атаки (в основном, чтобы не слишком привыкать к ограничениям мышления в их терминах, я думаю). Я предполагаю, что вопрос просто плохо сформулирован или ему не хватает внимания. - person Benjamin Bannier; 21.04.2010

Я не уверен, что вижу аналогию с теорией графов, но вы можете ускорить процесс, предварительно вычислив интеграл площади. Это похоже на многомасштабную вещь.

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

Тогда средняя яркость прямоугольной (а, б), (в, г) области равна

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

Переполнение, вероятно, не ваш друг, если у вас есть большие числа в ваших ячейках.

person Justin    schedule 12.05.2010
comment
Не могли бы вы объяснить, как это может быть полезно для идентификации блоба? Проблема действительно в том, что сигнал очень близок к фону. - person Benjamin Bannier; 13.05.2010
comment
Вместо вычисления среднего значения в k окрестности пикселя (что требует k*k обращений к памяти и добавлений) вы можете использовать 4 доступа к памяти и 4 добавления. - person Justin; 13.05.2010
comment
Этот тип вещей может хорошо работать, если вы начали с больших областей изображения и попытались рекурсивно найти области с похожим соотношением сигнал/шум, а затем применить фильтр усреднения области. - person Justin; 14.05.2010

Использовать алгоритм поиска объединения для кластеризации? Это очень быстро.

Я предполагаю, что граф будет получен в результате рассмотрения каждой пары соседних ячеек с высоким значением, связанных. Используйте алгоритм объединения-поиска, чтобы найти все кластеры и принять все те, которые больше определенного размера, возможно, также с ограничениями формы (например, на основе среднего квадрата расстояния от центра кластера по сравнению с размером кластера). Это тривиальная вариация алгоритма объединения-поиска для сбора статистики, которая вам понадобится для этого, по мере продвижения (счетчик, сумма x, сумма x^2, сумма y, сумма y^2).

person Paul Harrison    schedule 18.05.2010

Если вы просто ищете способ перевести свою проблему в графическую задачу, вот что вы можете сделать.

Из каждой точки посмотрите на всех своих соседей (это могут быть 8 соседних квадратов или 4 соседних, в зависимости от того, что вы хотите). Ищите соседа с максимальным значением, если он больше вашего, то подключайтесь к этому квадрату. если он меньше, то ничего не делать.

после этого у вас будет лес или, возможно, дерево (хотя я думаю, что это маловероятно). Это один из возможных переводов вашей матрицы на график. Я не уверен, что это самый полезный перевод.

person luke    schedule 18.05.2010
comment
Звучит как очень интересный подход. Буду ли я создавать дополнительное дерево для учета колебаний? - person Benjamin Bannier; 18.05.2010
comment
То, что вы описали в своем ответе, объединяет ячейки с соседом с наибольшим количеством. Это количество может колебаться, поэтому комбинация может не принадлежать одному и тому же кластеру. - person Benjamin Bannier; 19.05.2010