Skip to content

Commit 0c01cb3

Browse files
authored
Merge pull request #25 from jajupmochi/v0.2
V0.2
2 parents b649298 + 293ed9e commit 0c01cb3

30 files changed

+3598
-706
lines changed

Problems.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# About graph kenrels.
2+
3+
## (Random walk) Sylvester equation kernel.
4+
5+
### ImportError: cannot import name 'frange' from 'matplotlib.mlab'
6+
7+
You are using an outdated `control` with a recent `matplotlib`. `mlab.frange` was removed in `matplotlib-3.1.0`, and `control` removed the call in `control-0.8.2`.
8+
9+
Update your `control` package.
10+
11+
### Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or libmkl_def.so.
12+
13+
The Intel Math Kernel Library (MKL) is missing or not properly set. I assume the MKL is required by `control` module.
14+
15+
Install MKL. Then add the following to your path:
16+
17+
```
18+
export PATH=/opt/intel/bin:$PATH
19+
20+
export LD_LIBRARY_PATH=/opt/intel/lib/intel64:/opt/intel/mkl/lib/intel64:$LD_LIBRARY_PATH
21+
```

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ A Python package for graph kernels, graph edit distances and graph pre-image pro
1212
* python>=3.5
1313
* numpy>=1.16.2
1414
* scipy>=1.1.0
15-
* matplotlib>=3.0.0
15+
* matplotlib>=3.1.0
1616
* networkx>=2.2
1717
* scikit-learn>=0.20.0
1818
* tabulate>=0.8.2
1919
* tqdm>=4.26.0
20-
* control==0.8.0 (for generalized random walk kernels only)
20+
* control>=0.8.2 (for generalized random walk kernels only)
2121
* slycot==0.3.3 (for generalized random walk kernels only, which requires a fortran compiler, gfortran for example)
2222

2323
## How to use?
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#!/usr/bin/env python3
2+
# -*- coding: utf-8 -*-
3+
"""
4+
Created on Mon Sep 21 10:34:26 2020
5+
6+
@author: ljia
7+
"""
8+
from utils import Graph_Kernel_List, compute_graph_kernel
9+
10+
11+
def generate_graphs():
12+
from gklearn.utils.graph_synthesizer import GraphSynthesizer
13+
gsyzer = GraphSynthesizer()
14+
graphs = gsyzer.unified_graphs(num_graphs=1000, num_nodes=20, num_edges=40, num_node_labels=0, num_edge_labels=0, seed=None, directed=False)
15+
return graphs
16+
17+
18+
def xp_synthesied_graphs_dataset_size():
19+
20+
# Generate graphs.
21+
graphs = generate_graphs()
22+
23+
# Run and save.
24+
import pickle
25+
import os
26+
save_dir = 'outputs/synthesized_graphs_N/'
27+
if not os.path.exists(save_dir):
28+
os.makedirs(save_dir)
29+
30+
run_times = {}
31+
32+
for kernel_name in Graph_Kernel_List:
33+
print()
34+
print('Kernel:', kernel_name)
35+
36+
run_times[kernel_name] = []
37+
for num_graphs in [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000]:
38+
print()
39+
print('Number of graphs:', num_graphs)
40+
41+
sub_graphs = [g.copy() for g in graphs[0:num_graphs]]
42+
gram_matrix, run_time = compute_graph_kernel(sub_graphs, kernel_name)
43+
run_times[kernel_name].append(run_time)
44+
45+
pickle.dump(run_times, open(save_dir + 'run_time.' + kernel_name + '.' + str(num_graphs) + '.pkl', 'wb'))
46+
47+
# Save all.
48+
pickle.dump(run_times, open(save_dir + 'run_times.pkl', 'wb'))
49+
50+
return
51+
52+
53+
if __name__ == '__main__':
54+
xp_synthesied_graphs_dataset_size()
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#!/usr/bin/env python3
2+
# -*- coding: utf-8 -*-
3+
"""
4+
Created on Mon Sep 21 10:34:26 2020
5+
6+
@author: ljia
7+
"""
8+
from utils import Graph_Kernel_List, compute_graph_kernel
9+
10+
11+
def generate_graphs(degree):
12+
from gklearn.utils.graph_synthesizer import GraphSynthesizer
13+
gsyzer = GraphSynthesizer()
14+
graphs = gsyzer.unified_graphs(num_graphs=100, num_nodes=20, num_edges=int(10*degree), num_node_labels=0, num_edge_labels=0, seed=None, directed=False)
15+
return graphs
16+
17+
18+
def xp_synthesied_graphs_degrees():
19+
20+
# Run and save.
21+
import pickle
22+
import os
23+
save_dir = 'outputs/synthesized_graphs_degrees/'
24+
if not os.path.exists(save_dir):
25+
os.makedirs(save_dir)
26+
27+
run_times = {}
28+
29+
for kernel_name in Graph_Kernel_List:
30+
print()
31+
print('Kernel:', kernel_name)
32+
33+
run_times[kernel_name] = []
34+
for degree in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
35+
print()
36+
print('Degree:', degree)
37+
38+
# Generate graphs.
39+
graphs = generate_graphs(degree)
40+
41+
# Compute Gram matrix.
42+
gram_matrix, run_time = compute_graph_kernel(graphs, kernel_name)
43+
run_times[kernel_name].append(run_time)
44+
45+
pickle.dump(run_times, open(save_dir + 'run_time.' + kernel_name + '.' + str(degree) + '.pkl', 'wb'))
46+
47+
# Save all.
48+
pickle.dump(run_times, open(save_dir + 'run_times.pkl', 'wb'))
49+
50+
return
51+
52+
53+
if __name__ == '__main__':
54+
xp_synthesied_graphs_degrees()
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#!/usr/bin/env python3
2+
# -*- coding: utf-8 -*-
3+
"""
4+
Created on Mon Sep 21 10:34:26 2020
5+
6+
@author: ljia
7+
"""
8+
from utils import Graph_Kernel_List_ESym, compute_graph_kernel
9+
10+
11+
def generate_graphs(num_el_alp):
12+
from gklearn.utils.graph_synthesizer import GraphSynthesizer
13+
gsyzer = GraphSynthesizer()
14+
graphs = gsyzer.unified_graphs(num_graphs=100, num_nodes=20, num_edges=40, num_node_labels=0, num_edge_labels=num_el_alp, seed=None, directed=False)
15+
return graphs
16+
17+
18+
def xp_synthesied_graphs_num_edge_label_alphabet():
19+
20+
# Run and save.
21+
import pickle
22+
import os
23+
save_dir = 'outputs/synthesized_graphs_num_edge_label_alphabet/'
24+
if not os.path.exists(save_dir):
25+
os.makedirs(save_dir)
26+
27+
run_times = {}
28+
29+
for kernel_name in Graph_Kernel_List_ESym:
30+
print()
31+
print('Kernel:', kernel_name)
32+
33+
run_times[kernel_name] = []
34+
for num_el_alp in [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40]:
35+
print()
36+
print('Number of edge label alphabet:', num_el_alp)
37+
38+
# Generate graphs.
39+
graphs = generate_graphs(num_el_alp)
40+
41+
# Compute Gram matrix.
42+
gram_matrix, run_time = compute_graph_kernel(graphs, kernel_name)
43+
run_times[kernel_name].append(run_time)
44+
45+
pickle.dump(run_times, open(save_dir + 'run_time.' + kernel_name + '.' + str(num_el_alp) + '.pkl', 'wb'))
46+
47+
# Save all.
48+
pickle.dump(run_times, open(save_dir + 'run_times.pkl', 'wb'))
49+
50+
return
51+
52+
53+
if __name__ == '__main__':
54+
xp_synthesied_graphs_num_edge_label_alphabet()
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#!/usr/bin/env python3
2+
# -*- coding: utf-8 -*-
3+
"""
4+
Created on Mon Sep 21 10:34:26 2020
5+
6+
@author: ljia
7+
"""
8+
from utils import Graph_Kernel_List_VSym, compute_graph_kernel
9+
10+
11+
def generate_graphs(num_nl_alp):
12+
from gklearn.utils.graph_synthesizer import GraphSynthesizer
13+
gsyzer = GraphSynthesizer()
14+
graphs = gsyzer.unified_graphs(num_graphs=100, num_nodes=20, num_edges=40, num_node_labels=num_nl_alp, num_edge_labels=0, seed=None, directed=False)
15+
return graphs
16+
17+
18+
def xp_synthesied_graphs_num_node_label_alphabet():
19+
20+
# Run and save.
21+
import pickle
22+
import os
23+
save_dir = 'outputs/synthesized_graphs_num_node_label_alphabet/'
24+
if not os.path.exists(save_dir):
25+
os.makedirs(save_dir)
26+
27+
run_times = {}
28+
29+
for kernel_name in Graph_Kernel_List_VSym:
30+
print()
31+
print('Kernel:', kernel_name)
32+
33+
run_times[kernel_name] = []
34+
for num_nl_alp in [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]:
35+
print()
36+
print('Number of node label alphabet:', num_nl_alp)
37+
38+
# Generate graphs.
39+
graphs = generate_graphs(num_nl_alp)
40+
41+
# Compute Gram matrix.
42+
gram_matrix, run_time = compute_graph_kernel(graphs, kernel_name)
43+
run_times[kernel_name].append(run_time)
44+
45+
pickle.dump(run_times, open(save_dir + 'run_time.' + kernel_name + '.' + str(num_nl_alp) + '.pkl', 'wb'))
46+
47+
# Save all.
48+
pickle.dump(run_times, open(save_dir + 'run_times.pkl', 'wb'))
49+
50+
return
51+
52+
53+
if __name__ == '__main__':
54+
xp_synthesied_graphs_num_node_label_alphabet()
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#!/usr/bin/env python3
2+
# -*- coding: utf-8 -*-
3+
"""
4+
Created on Mon Sep 21 10:34:26 2020
5+
6+
@author: ljia
7+
"""
8+
from utils import Graph_Kernel_List, compute_graph_kernel
9+
10+
11+
def generate_graphs(num_nodes):
12+
from gklearn.utils.graph_synthesizer import GraphSynthesizer
13+
gsyzer = GraphSynthesizer()
14+
graphs = gsyzer.unified_graphs(num_graphs=100, num_nodes=num_nodes, num_edges=int(num_nodes*2), num_node_labels=0, num_edge_labels=0, seed=None, directed=False)
15+
return graphs
16+
17+
18+
def xp_synthesied_graphs_num_nodes():
19+
20+
# Run and save.
21+
import pickle
22+
import os
23+
save_dir = 'outputs/synthesized_graphs_num_nodes/'
24+
if not os.path.exists(save_dir):
25+
os.makedirs(save_dir)
26+
27+
run_times = {}
28+
29+
for kernel_name in Graph_Kernel_List:
30+
print()
31+
print('Kernel:', kernel_name)
32+
33+
run_times[kernel_name] = []
34+
for num_nodes in [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]:
35+
print()
36+
print('Number of nodes:', num_nodes)
37+
38+
# Generate graphs.
39+
graphs = generate_graphs(num_nodes)
40+
41+
# Compute Gram matrix.
42+
gram_matrix, run_time = compute_graph_kernel(graphs, kernel_name)
43+
run_times[kernel_name].append(run_time)
44+
45+
pickle.dump(run_times, open(save_dir + 'run_time.' + kernel_name + '.' + str(num_nodes) + '.pkl', 'wb'))
46+
47+
# Save all.
48+
pickle.dump(run_times, open(save_dir + 'run_times.pkl', 'wb'))
49+
50+
return
51+
52+
53+
if __name__ == '__main__':
54+
xp_synthesied_graphs_num_nodes()

0 commit comments

Comments
 (0)