From bd8bf2b2347de7c1c005d78aa14ec3e3a7ed02f3 Mon Sep 17 00:00:00 2001 From: jajupmochi Date: Wed, 9 Jun 2021 17:25:27 +0200 Subject: [PATCH] [Enhancement] Add more verbose for the WL kernel. --- gklearn/kernels/weisfeiler_lehman.py | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/gklearn/kernels/weisfeiler_lehman.py b/gklearn/kernels/weisfeiler_lehman.py index 64069b7..aeca3ea 100644 --- a/gklearn/kernels/weisfeiler_lehman.py +++ b/gklearn/kernels/weisfeiler_lehman.py @@ -14,11 +14,14 @@ Created on Tue Apr 14 15:16:34 2020 import numpy as np import networkx as nx +import sys from collections import Counter # from functools import partial +from itertools import combinations_with_replacement from gklearn.utils import SpecialLabel from gklearn.utils.parallel import parallel_gm, parallel_me from gklearn.kernels import GraphKernel +from gklearn.utils.iters import get_iters class WeisfeilerLehman(GraphKernel): # @todo: sp, edge user kernel. @@ -268,7 +271,11 @@ class WeisfeilerLehman(GraphKernel): # @todo: sp, edge user kernel. all_num_of_each_label = [] # number of occurence of each label in each graph in this iteration # for each graph - for G in Gn: + if self.verbose >= 2: + iterator = get_iters(Gn, desc='Setting all labels into a tuple') + else: + iterator = Gn + for G in iterator: # set all labels into a tuple. for nd, attrs in G.nodes(data=True): # @todo: there may be a better way. G.nodes[nd]['label_tuple'] = tuple(attrs[name] for name in self._node_labels) @@ -288,6 +295,10 @@ class WeisfeilerLehman(GraphKernel): # @todo: sp, edge user kernel. all_num_of_each_label = [] # number of occurence of each label in G # @todo: parallel this part. +# if self.verbose >= 2: +# iterator = get_iters(enumerate(Gn), desc='Going through iteration ' + str(h), length=len(Gn)) +# else: +# iterator = enumerate(Gn) for idx, G in enumerate(Gn): all_multisets = [] @@ -341,11 +352,15 @@ class WeisfeilerLehman(GraphKernel): # @todo: sp, edge user kernel. # parallel_gm(do_partial, gram_matrix, Gn, init_worker=init_worker, # glbv=(all_num_of_each_label,), n_jobs=self.n_jobs, verbose=self.verbose) # elif self.parallel is None: - for i in range(len(gram_matrix)): - for j in range(i, len(gram_matrix)): - gram_matrix[i][j] = self._compute_subtree_kernel(all_num_of_each_label[i], - all_num_of_each_label[j], gram_matrix[i][j]) - gram_matrix[j][i] = gram_matrix[i][j] + itr = combinations_with_replacement(range(0, len(gram_matrix)), 2) + len_itr = int(len(gram_matrix) * (len(gram_matrix) + 1) / 2) + iterator = get_iters(itr, desc='Computing Gram matrix for this iteration', file=sys.stdout, length=len_itr, verbose=(self.verbose >= 2)) + for i, j in iterator: +# for i in iterator: +# for j in range(i, len(gram_matrix)): + gram_matrix[i][j] = self._compute_subtree_kernel(all_num_of_each_label[i], + all_num_of_each_label[j], gram_matrix[i][j]) + gram_matrix[j][i] = gram_matrix[i][j] def _compute_subtree_kernel(self, num_of_each_label1, num_of_each_label2, kernel):