|
|
@@ -18,7 +18,7 @@ from tqdm import tqdm |
|
|
|
# import networkx as nx |
|
|
|
import numpy as np |
|
|
|
from gklearn.utils.parallel import parallel_gm, parallel_me |
|
|
|
from gklearn.utils.utils import get_shortest_paths |
|
|
|
from gklearn.utils.utils import get_shortest_paths, compute_vertex_kernels |
|
|
|
from gklearn.kernels import GraphKernel |
|
|
|
|
|
|
|
|
|
|
@@ -57,7 +57,7 @@ class StructuralSP(GraphKernel): |
|
|
|
from itertools import combinations_with_replacement |
|
|
|
itr = combinations_with_replacement(range(0, len(self._graphs)), 2) |
|
|
|
if self._verbose >= 2: |
|
|
|
iterator = tqdm(itr, desc='calculating kernels', file=sys.stdout) |
|
|
|
iterator = tqdm(itr, desc='Computing kernels', file=sys.stdout) |
|
|
|
else: |
|
|
|
iterator = itr |
|
|
|
if self.__compute_method == 'trie': |
|
|
@@ -135,7 +135,7 @@ class StructuralSP(GraphKernel): |
|
|
|
# compute kernel list. |
|
|
|
kernel_list = [None] * len(g_list) |
|
|
|
if self._verbose >= 2: |
|
|
|
iterator = tqdm(range(len(g_list)), desc='calculating kernels', file=sys.stdout) |
|
|
|
iterator = tqdm(range(len(g_list)), desc='Computing kernels', file=sys.stdout) |
|
|
|
else: |
|
|
|
iterator = range(len(g_list)) |
|
|
|
if self.__compute_method == 'trie': |
|
|
@@ -193,7 +193,7 @@ class StructuralSP(GraphKernel): |
|
|
|
itr = range(len(g_list)) |
|
|
|
len_itr = len(g_list) |
|
|
|
parallel_me(do_fun, func_assign, kernel_list, itr, len_itr=len_itr, |
|
|
|
init_worker=init_worker, glbv=(sp1, splist, g1, g_list), method='imap_unordered', n_jobs=self._n_jobs, itr_desc='calculating kernels', verbose=self._verbose) |
|
|
|
init_worker=init_worker, glbv=(sp1, splist, g1, g_list), method='imap_unordered', n_jobs=self._n_jobs, itr_desc='Computing kernels', verbose=self._verbose) |
|
|
|
|
|
|
|
return kernel_list |
|
|
|
|
|
|
@@ -273,7 +273,7 @@ class StructuralSP(GraphKernel): |
|
|
|
if len(p1) == len(p2): |
|
|
|
kernel += 1 |
|
|
|
try: |
|
|
|
kernel = kernel / (len(spl1) * len(spl2)) # calculate mean average |
|
|
|
kernel = kernel / (len(spl1) * len(spl2)) # Compute mean average |
|
|
|
except ZeroDivisionError: |
|
|
|
print(spl1, spl2) |
|
|
|
print(g1.nodes(data=True)) |
|
|
@@ -318,40 +318,7 @@ class StructuralSP(GraphKernel): |
|
|
|
|
|
|
|
|
|
|
|
def __get_all_node_kernels(self, g1, g2): |
|
|
|
# compute shortest path matrices, method borrowed from FCSP. |
|
|
|
vk_dict = {} # shortest path matrices dict |
|
|
|
if len(self.__node_labels) > 0: |
|
|
|
# node symb and non-synb labeled |
|
|
|
if len(self.__node_attrs) > 0: |
|
|
|
kn = self.__node_kernels['mix'] |
|
|
|
for n1, n2 in product(g1.nodes(data=True), g2.nodes(data=True)): |
|
|
|
n1_labels = [n1[1][nl] for nl in self.__node_labels] |
|
|
|
n2_labels = [n2[1][nl] for nl in self.__node_labels] |
|
|
|
n1_attrs = [n1[1][na] for na in self.__node_attrs] |
|
|
|
n2_attrs = [n2[1][na] for na in self.__node_attrs] |
|
|
|
vk_dict[(n1[0], n2[0])] = kn(n1_labels, n2_labels, n1_attrs, n2_attrs) |
|
|
|
# node symb labeled |
|
|
|
else: |
|
|
|
kn = self.__node_kernels['symb'] |
|
|
|
for n1 in g1.nodes(data=True): |
|
|
|
for n2 in g2.nodes(data=True): |
|
|
|
n1_labels = [n1[1][nl] for nl in self.__node_labels] |
|
|
|
n2_labels = [n2[1][nl] for nl in self.__node_labels] |
|
|
|
vk_dict[(n1[0], n2[0])] = kn(n1_labels, n2_labels) |
|
|
|
else: |
|
|
|
# node non-synb labeled |
|
|
|
if len(self.__node_attrs) > 0: |
|
|
|
kn = self.__node_kernels['nsymb'] |
|
|
|
for n1 in g1.nodes(data=True): |
|
|
|
for n2 in g2.nodes(data=True): |
|
|
|
n1_attrs = [n1[1][na] for na in self.__node_attrs] |
|
|
|
n2_attrs = [n2[1][na] for na in self.__node_attrs] |
|
|
|
vk_dict[(n1[0], n2[0])] = kn(n1_attrs, n2_attrs) |
|
|
|
# node unlabeled |
|
|
|
else: |
|
|
|
pass |
|
|
|
|
|
|
|
return vk_dict |
|
|
|
return compute_vertex_kernels(g1, g2, self._node_kernels, node_labels=self._node_labels, node_attrs=self._node_attrs) |
|
|
|
|
|
|
|
|
|
|
|
def __get_all_edge_kernels(self, g1, g2): |
|
|
|