Графы JUNG: сходство вершин?

У меня есть граф JUNG, содержащий около 10 000 вершин и 100 000 ребер, и я хочу получить меру сходства между любой парой вершин. Вершины представляют понятия (например, собака, дом и т. д.), а связи представляют отношения между понятиями (например, связанные, is_a, is_part_of и т. д.).

Вершины тесно взаимосвязаны, поэтому подход с использованием кратчайшего пути не дает хороших результатов (кратчайшие пути всегда очень короткие).

Какие подходы вы бы порекомендовали для ранжирования связности между вершинами?

У JUNG есть некоторые алгоритмы для оценки важности вершин, но я не понимаю, есть ли меры сходства между двумя вершинами. SimPack также кажется многообещающим.

Любые подсказки?


person Mulone    schedule 03.07.2011    source источник
comment
Мулоне: Вопрос о том, какие подходы подходят, зависит от семантики вершин, ребер и от того, есть ли у вас какие-либо другие атрибуты для каждого из них. На этот вопрос на самом деле нет универсального ответа. Если вы можете предоставить больше информации, я могу попытаться дать вам более полезный ответ. :)   -  person Joshua O'Madadhain    schedule 03.07.2011
comment
Спасибо! Я обновил вопрос. :-)   -  person Mulone    schedule 03.07.2011
comment
Ответ Рона в целом хорош. Однако сходство на графике, определенном так, как вы описываете, не является четко определенным. is_a, is_part_of, связанные и т.п., безусловно, могут порождать подграфы (например, включать все, чего можно достичь из вершины V, перейдя по ссылкам is_a), которые в основном являются классами эквивалентности или их вариациями. Но непонятно, как из этого получить сходство. (Если вы можете добраться до B из A с помощью 4 связанных ссылок, это более сильная или более слабая связь, чем 3 ссылки is_part_of?) Какую основную проблему вы пытаетесь решить?   -  person Joshua O'Madadhain    schedule 07.07.2011


Ответы (1)


Показатели centrality измеряют не сходство пар вершин, а некоторую (в зависимости от метода) центральность отдельных узлов сети в целом. Поэтому этот подход, возможно, не то, что вам нужно.

SimPack действительно имеет хорошую цель, но для графов он реализует сравнения на основе изоморфизма, которые скорее сравнивают несколько графов на предмет подобия, чем пары узлов одного заданного графа. Поэтому это пока не в тему.

Вам нужны так называемые graph clustering методы (также называемые методами определения сетевого модуля или определения сетевого сообщества), которые делят граф (сеть) на несколько разделов, чтобы узлы в каждом разделе были более тесно взаимосвязаны друг с другом. чем с узлами других разделов.

Самый классический метод — это, возможно, кластеризация центральности между Ньюманом и Гирваном, где вы можете использовать дендрограмму для расчет подобия, и он есть в JUNG< /а>. Конечно, в настоящее время существует множество методов. Вы можете попробовать (бесстыдный плагин) наш метод ModuLand или прочтите прекрасную таблицу алгоритмов обнаружения модулей в конце Электронный дополнительный материал. Это семейство методов overlapping graph clustering, то есть его результатом для каждого узла является вектор, содержащий сильные стороны принадлежности к любому соответствующему кластеру сети. Попарное сходство узлов легко получить из пар этих векторов узла к кластеру.

Кластеризация графа нетривиальна, и, возможно, вам потребуется адаптировать любой метод для получения очень точных результатов в конкретной предметной области, но это на усмотрение читателя ;) Удачи!

person ron    schedule 03.07.2011
comment
Кстати, у вас, кажется, есть информация из какой-то онтологии, которая, как правило, содержит большие древовидные ориентированные подграфы (отношения «есть-а», «является частью»), если вы не считаете «связанные» ссылки. Возможно, вы сможете разработать достойную меру сходства на основе дерева онтологий и увеличить ее на основе сходства на основе кластеризации графов. - person ron; 03.07.2011
comment
Кроме того, если вы можете каким-либо образом преобразовать узлы в векторы, вы можете получить сходство, как описано выше. Самый простой (но не слишком сложный) метод — определить вектор для узла как кратчайшее расстояние до всех остальных узлов сети. - person ron; 03.07.2011