ForceAtlas

這個筆記範例說明透過力導向演算法 Force Atlas 2 將一個圖形嵌入。

[1]:
from IPython.display import SVG
[2]:
from sknetwork.data import karate_club
from sknetwork.embedding.force_atlas import ForceAtlas
from sknetwork.visualization import visualize_graph

範例

[3]:
graph = karate_club(metadata=True)
adjacency = graph.adjacency
labels = graph.labels
[4]:
forceatlas2 = ForceAtlas()
embedding = forceatlas2.fit_transform(adjacency)
image = visualize_graph(adjacency, embedding, labels=labels)
SVG(image)
[4]:
../../_images/tutorials_embedding_forceatlas_5_0.svg

選項

我們在這裡闡述提供給使用者的各種設定的影響。

使用對數吸引力取代線性吸引力。

[5]:
forceatlas2 = ForceAtlas(lin_log = True)
embedding = forceatlas2.fit_transform(adjacency)
image = visualize_graph(adjacency, embedding, labels=labels)
SVG(image)
[5]:
../../_images/tutorials_embedding_forceatlas_9_0.svg

設定重力和排斥力常數(gravity_factorrepulsion_factor),以設定每個力在配置中的重要性。數值保持在 0.01 到 0.1 之間。

[6]:
forceatlas2 = ForceAtlas(gravity_factor = 0.1)
embedding = forceatlas2.fit_transform(adjacency)
image = visualize_graph(adjacency, embedding, labels=labels)
SVG(image)
[6]:
../../_images/tutorials_embedding_forceatlas_11_0.svg

設定容忍搖擺的數量。較少的搖擺會產生較慢的速度和更高的精度。

[7]:
forceatlas2 = ForceAtlas(tolerance=1.5)
embedding = forceatlas2.fit_transform(adjacency)
image = visualize_graph(adjacency, embedding, labels=labels)
SVG(image)
[7]:
../../_images/tutorials_embedding_forceatlas_13_0.svg
[8]:
forceatlas2 = ForceAtlas(approx_radius=2)
embedding = forceatlas2.fit_transform(adjacency)
image = visualize_graph(adjacency, embedding, labels=labels)
SVG(image)
[8]:
../../_images/tutorials_embedding_forceatlas_14_0.svg