Spectral

This notebook illustrates the spectral embedding of a graph.

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

Graphs

[4]:
graph = karate_club(metadata=True)
adjacency = graph.adjacency
labels = graph.labels
[5]:
# embedding in dimension 2
spectral = Spectral(2)
embedding = spectral.fit_transform(adjacency)
[6]:
# visualization
image = svg_graph(adjacency, position=embedding, labels=labels)
SVG(image)
[6]:
../../_images/tutorials_embedding_spectral_8_0.svg
[7]:
# find the embedding of a new node
adjacency_vector = np.zeros(adjacency.shape[0], dtype = int)
adjacency_vector[:6] = np.ones(6, dtype = int)
embedding_vector = spectral.predict(adjacency_vector)
[8]:
# visualization
adjacency_extend = sparse.vstack([adjacency, adjacency_vector])
adjacency_extend = sparse.hstack([adjacency_extend, sparse.csr_matrix((35, 1))], format='csr')
embedding_extend = np.vstack([embedding, embedding_vector])
labels_extend = list(labels) + [-1]
[9]:
image = svg_graph(adjacency_extend, position=embedding_extend, labels=labels_extend, seeds={34:1})
SVG(image)
[9]:
../../_images/tutorials_embedding_spectral_11_0.svg

Directed graphs

[10]:
graph = painters(metadata=True)
adjacency = graph.adjacency
position = graph.position
names = graph.names
[11]:
# embedding
spectral = Spectral()
embedding = spectral.fit_transform(adjacency)
[12]:
image = svg_digraph(adjacency, position=embedding, names=names)
SVG(image)
[12]:
../../_images/tutorials_embedding_spectral_15_0.svg

Bipartite graphs

[13]:
graph = movie_actor(metadata=True)
biadjacency = graph.biadjacency
names_row = graph.names_row
names_col = graph.names_col
[14]:
# embedding
spectral = Spectral()
spectral.fit(biadjacency)
[14]:
Spectral(n_components=2, decomposition='rw', regularization=-1, normalized=True)
[15]:
embedding_row = spectral.embedding_row_
embedding_col = spectral.embedding_col_
[16]:
image = svg_bigraph(biadjacency, names_row, names_col,
                    position_row=embedding_row, position_col=embedding_col,
                    color_row='blue', color_col='red')
SVG(image)
[16]:
../../_images/tutorials_embedding_spectral_20_0.svg