Ответ 1
Что касается вашего первого вопроса, это довольно просто: функция minimize_nested_blockmodel_dl()
возвращает объект NestedBlockState
:
g = collection.data["football"]
state = minimize_nested_blockmodel_dl(g)
вы можете запросить членство в группе узлов, проверив первый уровень иерархии:
lstate = state.levels[0]
Это объект BlockState
, из которого мы получаем членство в группе с помощью метода get_blocks()
:
b = lstate.get_blocks()
print(b[30]) # prints the group membership of node 30
Что касается вашего второго вопроса, модель стохастического блока предполагает, что узлы, принадлежащие к одной группе, имеют одинаковую вероятность подключения к остальной сети. Следовательно, узлы, которые классифицируются в одной и той же группе с помощью указанной выше функции, имеют аналогичные шаблоны связности. Например, если мы посмотрим на пригодность для футбольной сети:
state.draw(output="football.png")
Мы видим, что узлы, принадлежащие к одной и той же группе, имеют тенденцию иметь больше связей с другими узлами той же группы - типичный пример структуры сообщества. Однако это лишь одна из многих возможностей, которые могут быть обнаружены стохастической блочной моделью. Другие топологические шаблоны включают организацию ядра-периферии, двуствольность и т.д.