随机块模型 (SBM)¶
[1]:
import graspologic
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
/home/runner/.cache/pypoetry/virtualenvs/graspologic-pkHfzCJ8-py3.10/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
from .autonotebook import tqdm as notebook_tqdm
与Erdos-Renyi (ER) 模型不同,随机块模型(SBM)生成的图包含社区:由社区内和社区间顶点不同边概率特征的不相交子图(1)。
SBM 由每个社区中的顶点数 \(n\) 和一个块概率矩阵 \(P \in \mathbb{R}^{n x n}\) 参数化,其中每个元素指定特定块中边的概率。可以将 SBM 视为一组 ER 图的集合,其中每个块对应一个 ER 图。
下面,我们使用以下参数对一个双块SBM(无向,无自环)进行采样:
\begin{align*} n &= [50, 50]\\ P &= \begin{bmatrix} 0.5 & 0.2\\ 0.2 & 0.05 \end{bmatrix} \end{align*}
对角线对应于块内边的概率,非对角线对应于块间边的概率。
[2]:
from graspologic.simulations import sbm
n = [50, 50]
p = [[0.5, 0.2],
[0.2, 0.05]]
np.random.seed(1)
G = sbm(n=n, p=p)
使用热图可视化图表¶
[3]:
from graspologic.plot import heatmap
_ = heatmap(G, title ='SBM Simulation')
加权SBM图¶
类似于ER模拟,sbm() 函数提供了通过概率分布函数为所有采样的边采样权重的方法。为了采样权重,你可以选择以下两种方式之一:
提供一个单一的概率分布函数,并为该分布函数提供相应的关键字参数。所有的权重将使用相同的函数进行采样。
为每个块提供带有相应关键字参数的概率分布函数。
下面我们使用以下参数对一个SBM(无向,无自环)进行采样:
\begin{align*} n &= [50, 50]\\ P &= \begin{bmatrix}0.5 & 0.2\\ 0.2 & 0.05 \end{bmatrix} \end{align*}
权重是从以下概率函数中采样的:
\begin{align*} PDFs &= \begin{bmatrix}Normal & Poisson\\ Poisson & Normal \end{bmatrix}\\ Parameters &= \begin{bmatrix}{\mu=3, \sigma^2=1} & {\lambda=5}\\ {\lambda=5} & {\mu=3, \sigma^2=1} \end{bmatrix} \end{align*}
[4]:
from numpy.random import normal, poisson
n = [50, 50]
p = [[0.5, 0.2],
[0.2, 0.05]]
wt = [[normal, poisson],
[poisson, normal]]
wtargs = [[dict(loc=3, scale=1), dict(lam=5)],
[dict(lam=5), dict(loc=3, scale=1)]]
G = sbm(n=n, p=p, wt=wt, wtargs=wtargs)
使用热图可视化图表¶
[5]:
_ = heatmap(G, title='Weighted SBM Simulation')