Random Projection

This notebook illustrates the embedding of a graph through random projection.

[1]:
from IPython.display import SVG
[2]:
import numpy as np
[3]:
from sknetwork.data import karate_club, painters, movie_actor
from sknetwork.embedding import BiRandomProjection, RandomProjection
from sknetwork.visualization import svg_graph, svg_digraph, svg_bigraph

Graphs

[4]:
graph = karate_club(metadata=True)
adjacency = graph.adjacency
labels = graph.labels
[5]:
projection = RandomProjection()
embedding = projection.fit_transform(adjacency)
embedding.shape
[5]:
(34, 2)
[6]:
image = svg_graph(adjacency, embedding, labels=labels)
[7]:
SVG(image)
[7]:
../../_images/tutorials_embedding_random_projection_9_0.svg

Digraphs

[8]:
graph = painters(metadata=True)
adjacency = graph.adjacency
position = graph.position
names = graph.names
[9]:
projection = RandomProjection()
embedding = projection.fit_transform(adjacency)
embedding.shape
[9]:
(14, 2)
[10]:
image = svg_digraph(adjacency, embedding, names=names)
[11]:
SVG(image)
[11]:
../../_images/tutorials_embedding_random_projection_14_0.svg

Bigraphs

[12]:
graph = movie_actor(metadata=True)
biadjacency = graph.biadjacency
names_row = graph.names_row
names_col = graph.names_col
[13]:
biprojection = BiRandomProjection(normalized=False)
biprojection.fit(biadjacency)
[13]:
BiRandomProjection(n_components=2, alpha=0.5, n_iter=3, random_walk=False, normalized=False)
[14]:
embedding_row = biprojection.embedding_row_
embedding_row.shape
[14]:
(15, 2)
[15]:
embedding_col = biprojection.embedding_col_
embedding_col.shape
[15]:
(16, 2)
[16]:
image = svg_bigraph(biadjacency, names_row, names_col,
                    position_row=embedding_row, position_col=embedding_col,
                    color_row='blue', color_col='red')
[17]:
SVG(image)
[17]:
../../_images/tutorials_embedding_random_projection_21_0.svg