| @@ -18,7 +18,7 @@ from tqdm import tqdm | |||||
| # import networkx as nx | # import networkx as nx | ||||
| import numpy as np | import numpy as np | ||||
| from gklearn.utils.parallel import parallel_gm, parallel_me | 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 | from gklearn.kernels import GraphKernel | ||||
| @@ -57,7 +57,7 @@ class StructuralSP(GraphKernel): | |||||
| from itertools import combinations_with_replacement | from itertools import combinations_with_replacement | ||||
| itr = combinations_with_replacement(range(0, len(self._graphs)), 2) | itr = combinations_with_replacement(range(0, len(self._graphs)), 2) | ||||
| if self._verbose >= 2: | if self._verbose >= 2: | ||||
| iterator = tqdm(itr, desc='calculating kernels', file=sys.stdout) | |||||
| iterator = tqdm(itr, desc='Computing kernels', file=sys.stdout) | |||||
| else: | else: | ||||
| iterator = itr | iterator = itr | ||||
| if self.__compute_method == 'trie': | if self.__compute_method == 'trie': | ||||
| @@ -135,7 +135,7 @@ class StructuralSP(GraphKernel): | |||||
| # compute kernel list. | # compute kernel list. | ||||
| kernel_list = [None] * len(g_list) | kernel_list = [None] * len(g_list) | ||||
| if self._verbose >= 2: | 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: | else: | ||||
| iterator = range(len(g_list)) | iterator = range(len(g_list)) | ||||
| if self.__compute_method == 'trie': | if self.__compute_method == 'trie': | ||||
| @@ -193,7 +193,7 @@ class StructuralSP(GraphKernel): | |||||
| itr = range(len(g_list)) | itr = range(len(g_list)) | ||||
| len_itr = len(g_list) | len_itr = len(g_list) | ||||
| parallel_me(do_fun, func_assign, kernel_list, itr, len_itr=len_itr, | 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 | return kernel_list | ||||
| @@ -273,7 +273,7 @@ class StructuralSP(GraphKernel): | |||||
| if len(p1) == len(p2): | if len(p1) == len(p2): | ||||
| kernel += 1 | kernel += 1 | ||||
| try: | try: | ||||
| kernel = kernel / (len(spl1) * len(spl2)) # calculate mean average | |||||
| kernel = kernel / (len(spl1) * len(spl2)) # Compute mean average | |||||
| except ZeroDivisionError: | except ZeroDivisionError: | ||||
| print(spl1, spl2) | print(spl1, spl2) | ||||
| print(g1.nodes(data=True)) | print(g1.nodes(data=True)) | ||||
| @@ -318,40 +318,7 @@ class StructuralSP(GraphKernel): | |||||
| def __get_all_node_kernels(self, g1, g2): | 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): | def __get_all_edge_kernels(self, g1, g2): | ||||