🎯要点
🎯算法随机图模型数学概率 | 🎯图预期度序列数学定义 | 🎯生成具有任意指数的大型幂律网络,数学计算幂律指数和平均度 | 🎯随机图分析中巨型连接分量数学理论和推论 | 🎯生成式多层网络中尺度结构有序无序分析模型
📜生成式随机图模型用例
📜语言内容分比
🍇Python合成图模型
有时,找到合适的图形数据集来评估算法可能是一项艰巨的任务。有多种选择,通常需要相当长的时间才能完成。即使您找到了完美的图形数据集,您也必须验证其使用、共享和隐私政策。我们需要一种叫做合成图的东西,这些图形数据集是人工生成的可以快速评估目的。
合成图是使用图生成模型生成的。它们的构造是为了尽可能接近地模仿现实世界的图表。
-
埃尔多斯-雷尼模型:在此模型中,我们从一组预定义的节点(例如 N)开始。现在我们使用概率在节点之间添加边以生成图。概率是固定的,并且对于图中的所有节点对都是相同的。因此,较高的概率使图变得密集,较低的概率使图变得稀疏。这是一个简单的模型,与现实世界的图相差甚远。
-
瓦茨-斯特罗加茨模型:这是一种生成具有小世界属性的图的方法。在这种情况下,小世界被定义为具有小路径长度和高聚类系数的事物。
路径长度:它是图中两个节点之间距离的度量。路径长度越短,节点之间的距离越近。聚类系数:它衡量节点的邻居彼此连接的紧密程度。
该模型以具有固定节点数的规则网格结构开始,并将节点的边连接到其最近的邻居。它使用重新布线概率,这意味着一些边会随机地从一个地方移除并添加到其他地方。它用于对现实世界网络进行建模,这些网络是社交网络和交通网络等小世界的实例。
- 巴拉巴西-阿尔伯特模型:该图生成模型遵循“富者愈富”原则。该模型将新节点连接到已有更多连接的现有节点。它导致图中出现一些高度连接的节点和几个连接较差的节点。它用于对互联网和社交网络等无标度网络进行建模。
让我们检查一下合成图如何使用所有三个模型并看看它们的外观。
import networkx as nx
import numpy as np
import matplotlib.pyplot as plt
G1 = nx.erdos_renyi_graph(n=50, p=0.2, seed=42)
G2 = nx.watts_strogatz_graph(n=50, k=5, p=0.4, seed=42)
G3 = nx.barabasi_albert_graph(n=50, m=5, seed=42)
fig, ax = plt.subplots(1, 3, figsize=(15, 5))
ax[0].set_title('Erdos-Renyi')
ax[1].set_title('Watts-Strogatz')
ax[2].set_title('Barabasi-Albert')
nx.draw(G1, ax=ax[0])
nx.draw(G2, ax=ax[1])
nx.draw(G3, ax=ax[2])
plt.show()
调整超参数会生成截然不同的图表。
对于社交网络,我们希望添加节点特征和节点标签。这可以使用 faker python 库来完成,它会生成假名称。
from faker import Faker
import networkx as nx
import matplotlib.pyplot as plt
faker = Faker()
names = []
for i in range(10):
name = faker.name()
names.append(name)
G = nx.barabasi_albert_graph(n=10, m=5, seed=42)
mapping = {i: names[i] for i in range(len(names))}
G = nx.relabel_nodes(G, mapping)
fig, ax = plt.subplots(figsize=(3, 2), dpi=300)
nx.draw(G, with_labels=True, node_size=50,width=0.1, font_size=3.5)
plt.show()
合成社交网络现在有了标签。每个节点代表一个人,他们的名字充当节点标签。可以生成社交网络中每个人的其他节点属性(例如年龄、性别和职业)并更新图。 现在我们有了一个满载的合成社交网络,可用于执行图形分析任务。