@@ -30,15 +30,15 @@ def commonwalkkernel(*args, | |||
n_jobs=None, | |||
chunksize=None, | |||
verbose=True): | |||
"""Calculate common walk graph kernels between graphs. | |||
"""Compute common walk graph kernels between graphs. | |||
Parameters | |||
---------- | |||
Gn : List of NetworkX graph | |||
List of graphs between which the kernels are calculated. | |||
List of graphs between which the kernels are computed. | |||
G1, G2 : NetworkX graphs | |||
Two graphs between which the kernel is calculated. | |||
Two graphs between which the kernel is computed. | |||
node_label : string | |||
Node attribute used as symbolic label. The default node label is 'atom'. | |||
edge_label : string | |||
@@ -133,7 +133,7 @@ def commonwalkkernel(*args, | |||
# | |||
# for i, j, kernel in tqdm( | |||
# pool.imap_unordered(do_partial, itr, chunksize), | |||
# desc='calculating kernels', | |||
# desc='computing kernels', | |||
# file=sys.stdout): | |||
# Kmatrix[i][j] = kernel | |||
# Kmatrix[j][i] = kernel | |||
@@ -145,14 +145,14 @@ def commonwalkkernel(*args, | |||
# # direct product graph method - exponential | |||
# itr = combinations_with_replacement(range(0, len(Gn)), 2) | |||
# if compute_method == 'exp': | |||
# for i, j in tqdm(itr, desc='calculating kernels', file=sys.stdout): | |||
# for i, j in tqdm(itr, desc='Computing kernels', file=sys.stdout): | |||
# Kmatrix[i][j] = _commonwalkkernel_exp(Gn[i], Gn[j], node_label, | |||
# edge_label, weight) | |||
# Kmatrix[j][i] = Kmatrix[i][j] | |||
# | |||
# # direct product graph method - geometric | |||
# elif compute_method == 'geo': | |||
# for i, j in tqdm(itr, desc='calculating kernels', file=sys.stdout): | |||
# for i, j in tqdm(itr, desc='Computing kernels', file=sys.stdout): | |||
# Kmatrix[i][j] = _commonwalkkernel_geo(Gn[i], Gn[j], node_label, | |||
# edge_label, weight) | |||
# Kmatrix[j][i] = Kmatrix[i][j] | |||
@@ -161,7 +161,7 @@ def commonwalkkernel(*args, | |||
# # search all paths use brute force. | |||
# elif compute_method == 'brute': | |||
# n = int(n) | |||
# # get all paths of all graphs before calculating kernels to save time, but this may cost a lot of memory for large dataset. | |||
# # get all paths of all graphs before computing kernels to save time, but this may cost a lot of memory for large dataset. | |||
# all_walks = [ | |||
# find_all_walks_until_length(Gn[i], n, node_label, edge_label) | |||
# for i in range(0, len(Gn)) | |||
@@ -185,13 +185,13 @@ def commonwalkkernel(*args, | |||
def _commonwalkkernel_exp(g1, g2, node_label, edge_label, beta): | |||
"""Calculate walk graph kernels up to n between 2 graphs using exponential | |||
"""Compute walk graph kernels up to n between 2 graphs using exponential | |||
series. | |||
Parameters | |||
---------- | |||
Gn : List of NetworkX graph | |||
List of graphs between which the kernels are calculated. | |||
List of graphs between which the kernels are computed. | |||
node_label : string | |||
Node attribute used as label. | |||
edge_label : string | |||
@@ -259,13 +259,13 @@ def wrapper_cw_exp(node_label, edge_label, beta, itr): | |||
def _commonwalkkernel_geo(g1, g2, node_label, edge_label, gamma): | |||
"""Calculate common walk graph kernels up to n between 2 graphs using | |||
"""Compute common walk graph kernels up to n between 2 graphs using | |||
geometric series. | |||
Parameters | |||
---------- | |||
Gn : List of NetworkX graph | |||
List of graphs between which the kernels are calculated. | |||
List of graphs between which the kernels are computed. | |||
node_label : string | |||
Node attribute used as label. | |||
edge_label : string | |||
@@ -304,7 +304,7 @@ def _commonwalkkernel_brute(walks1, | |||
node_label='atom', | |||
edge_label='bond_type', | |||
labeled=True): | |||
"""Calculate walk graph kernels up to n between 2 graphs. | |||
"""Compute walk graph kernels up to n between 2 graphs. | |||
Parameters | |||
---------- | |||
@@ -46,7 +46,7 @@ class CommonWalk(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 | |||
@@ -102,7 +102,7 @@ class CommonWalk(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)) | |||
@@ -148,7 +148,7 @@ class CommonWalk(GraphKernel): | |||
len_itr = len(g_list) | |||
parallel_me(do_fun, func_assign, kernel_list, itr, len_itr=len_itr, | |||
init_worker=_init_worker_list, glbv=(g1, g_list), method='imap_unordered', | |||
n_jobs=self._n_jobs, itr_desc='calculating kernels', verbose=self._verbose) | |||
n_jobs=self._n_jobs, itr_desc='Computing kernels', verbose=self._verbose) | |||
return kernel_list | |||
@@ -179,13 +179,13 @@ class CommonWalk(GraphKernel): | |||
def __kernel_do_exp(self, g1, g2, beta): | |||
"""Calculate common walk graph kernel between 2 graphs using exponential | |||
"""Compute common walk graph kernel between 2 graphs using exponential | |||
series. | |||
Parameters | |||
---------- | |||
g1, g2 : NetworkX graphs | |||
Graphs between which the kernels are calculated. | |||
Graphs between which the kernels are computed. | |||
beta : integer | |||
Weight. | |||
@@ -231,13 +231,13 @@ class CommonWalk(GraphKernel): | |||
def __kernel_do_geo(self, g1, g2, gamma): | |||
"""Calculate common walk graph kernel between 2 graphs using geometric | |||
"""Compute common walk graph kernel between 2 graphs using geometric | |||
series. | |||
Parameters | |||
---------- | |||
g1, g2 : NetworkX graphs | |||
Graphs between which the kernels are calculated. | |||
Graphs between which the kernels are computed. | |||
gamma : integer | |||
Weight. | |||
@@ -104,7 +104,7 @@ class GraphKernel(object): | |||
if self._parallel == 'imap_unordered': | |||
gram_matrix = self._compute_gm_imap_unordered() | |||
elif self._parallel == None: | |||
elif self._parallel is None: | |||
gram_matrix = self._compute_gm_series() | |||
else: | |||
raise Exception('Parallel mode is not set correctly.') | |||
@@ -130,7 +130,7 @@ class GraphKernel(object): | |||
if self._parallel == 'imap_unordered': | |||
kernel_list = self._compute_kernel_list_imap_unordered(g1, g_list) | |||
elif self._parallel == None: | |||
elif self._parallel is None: | |||
kernel_list = self._compute_kernel_list_series(g1, g_list) | |||
else: | |||
raise Exception('Parallel mode is not set correctly.') | |||
@@ -59,7 +59,7 @@ class Marginalized(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 | |||
for i, j in iterator: | |||
@@ -119,7 +119,7 @@ class Marginalized(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)) | |||
for i in iterator: | |||
@@ -165,7 +165,7 @@ class Marginalized(GraphKernel): | |||
len_itr = len(g_list) | |||
parallel_me(do_fun, func_assign, kernel_list, itr, len_itr=len_itr, | |||
init_worker=init_worker, glbv=(g1, g_list), method='imap_unordered', | |||
n_jobs=self._n_jobs, itr_desc='calculating kernels', verbose=self._verbose) | |||
n_jobs=self._n_jobs, itr_desc='Computing kernels', verbose=self._verbose) | |||
return kernel_list | |||
@@ -184,12 +184,12 @@ class Marginalized(GraphKernel): | |||
def __kernel_do(self, g1, g2): | |||
"""Calculate marginalized graph kernel between 2 graphs. | |||
"""Compute marginalized graph kernel between 2 graphs. | |||
Parameters | |||
---------- | |||
g1, g2 : NetworkX graphs | |||
2 graphs between which the kernel is calculated. | |||
2 graphs between which the kernel is computed. | |||
Return | |||
------ | |||
@@ -212,12 +212,12 @@ class Marginalized(GraphKernel): | |||
# # matrix to save all the R_inf for all pairs of nodes | |||
# R_inf = np.zeros([num_nodes_G1, num_nodes_G2]) | |||
# | |||
# # calculate R_inf with a simple interative method | |||
# # Compute R_inf with a simple interative method | |||
# for i in range(1, n_iteration): | |||
# R_inf_new = np.zeros([num_nodes_G1, num_nodes_G2]) | |||
# R_inf_new.fill(r1) | |||
# | |||
# # calculate R_inf for each pair of nodes | |||
# # Compute R_inf for each pair of nodes | |||
# for node1 in g1.nodes(data=True): | |||
# neighbor_n1 = g1[node1[0]] | |||
# # the transition probability distribution in the random walks | |||
@@ -243,7 +243,7 @@ class Marginalized(GraphKernel): | |||
# neighbor2] # ref [1] equation (8) | |||
# R_inf[:] = R_inf_new | |||
# | |||
# # add elements of R_inf up and calculate kernel | |||
# # add elements of R_inf up and compute kernel | |||
# for node1 in g1.nodes(data=True): | |||
# for node2 in g2.nodes(data=True): | |||
# s = p_init_G1 * p_init_G2 * deltakernel( | |||
@@ -288,11 +288,11 @@ class Marginalized(GraphKernel): | |||
deltakernel(tuple(g1.nodes[neighbor1][nl] for nl in self.__node_labels), tuple(g2.nodes[neighbor2][nl] for nl in self.__node_labels)) * \ | |||
deltakernel(tuple(neighbor_n1[neighbor1][el] for el in self.__edge_labels), tuple(neighbor_n2[neighbor2][el] for el in self.__edge_labels)) | |||
# calculate R_inf with a simple interative method | |||
# Compute R_inf with a simple interative method | |||
for i in range(2, self.__n_iteration + 1): | |||
R_inf_old = R_inf.copy() | |||
# calculate R_inf for each pair of nodes | |||
# Compute R_inf for each pair of nodes | |||
for node1 in g1.nodes(): | |||
neighbor_n1 = g1[node1] | |||
# the transition probability distribution in the random walks | |||
@@ -309,7 +309,7 @@ class Marginalized(GraphKernel): | |||
(t_dict[(node1, node2, neighbor1, neighbor2)] * \ | |||
R_inf_old[(neighbor1, neighbor2)]) # ref [1] equation (8) | |||
# add elements of R_inf up and calculate kernel | |||
# add elements of R_inf up and compute kernel. | |||
for (n1, n2), value in R_inf.items(): | |||
s = p_init_G1 * p_init_G2 * deltakernel(tuple(g1.nodes[n1][nl] for nl in self.__node_labels), tuple(g2.nodes[n2][nl] for nl in self.__node_labels)) | |||
kernel += s * value # ref [1] equation (6) | |||
@@ -39,15 +39,15 @@ def marginalizedkernel(*args, | |||
n_jobs=None, | |||
chunksize=None, | |||
verbose=True): | |||
"""Calculate marginalized graph kernels between graphs. | |||
"""Compute marginalized graph kernels between graphs. | |||
Parameters | |||
---------- | |||
Gn : List of NetworkX graph | |||
List of graphs between which the kernels are calculated. | |||
List of graphs between which the kernels are computed. | |||
G1, G2 : NetworkX graphs | |||
Two graphs between which the kernel is calculated. | |||
Two graphs between which the kernel is computed. | |||
node_label : string | |||
Node attribute used as symbolic label. The default node label is 'atom'. | |||
@@ -59,7 +59,7 @@ def marginalizedkernel(*args, | |||
The termination probability in the random walks generating step. | |||
n_iteration : integer | |||
Time of iterations to calculate R_inf. | |||
Time of iterations to compute R_inf. | |||
remove_totters : boolean | |||
Whether to remove totterings by method introduced in [2]. The default | |||
@@ -83,11 +83,11 @@ def marginalizedkernel(*args, | |||
Gn, | |||
attr_names=['node_labeled', 'edge_labeled', 'is_directed'], | |||
node_label=node_label, edge_label=edge_label) | |||
if not ds_attrs['node_labeled'] or node_label == None: | |||
if not ds_attrs['node_labeled'] or node_label is None: | |||
node_label = 'atom' | |||
for G in Gn: | |||
nx.set_node_attributes(G, '0', 'atom') | |||
if not ds_attrs['edge_labeled'] or edge_label == None: | |||
if not ds_attrs['edge_labeled'] or edge_label is None: | |||
edge_label = 'bond_type' | |||
for G in Gn: | |||
nx.set_edge_attributes(G, '0', 'bond_type') | |||
@@ -133,7 +133,7 @@ def marginalizedkernel(*args, | |||
# # ---- direct running, normally use single CPU core. ---- | |||
## pbar = tqdm( | |||
## total=(1 + len(Gn)) * len(Gn) / 2, | |||
## desc='calculating kernels', | |||
## desc='Computing kernels', | |||
## file=sys.stdout) | |||
# for i in range(0, len(Gn)): | |||
# for j in range(i, len(Gn)): | |||
@@ -152,12 +152,12 @@ def marginalizedkernel(*args, | |||
def _marginalizedkernel_do(g1, g2, node_label, edge_label, p_quit, n_iteration): | |||
"""Calculate marginalized graph kernel between 2 graphs. | |||
"""Compute marginalized graph kernel between 2 graphs. | |||
Parameters | |||
---------- | |||
G1, G2 : NetworkX graphs | |||
2 graphs between which the kernel is calculated. | |||
2 graphs between which the kernel is computed. | |||
node_label : string | |||
node attribute used as label. | |||
edge_label : string | |||
@@ -165,7 +165,7 @@ def _marginalizedkernel_do(g1, g2, node_label, edge_label, p_quit, n_iteration): | |||
p_quit : integer | |||
the termination probability in the random walks generating step. | |||
n_iteration : integer | |||
time of iterations to calculate R_inf. | |||
time of iterations to compute R_inf. | |||
Return | |||
------ | |||
@@ -188,12 +188,12 @@ def _marginalizedkernel_do(g1, g2, node_label, edge_label, p_quit, n_iteration): | |||
# # matrix to save all the R_inf for all pairs of nodes | |||
# R_inf = np.zeros([num_nodes_G1, num_nodes_G2]) | |||
# | |||
# # calculate R_inf with a simple interative method | |||
# # Compute R_inf with a simple interative method | |||
# for i in range(1, n_iteration): | |||
# R_inf_new = np.zeros([num_nodes_G1, num_nodes_G2]) | |||
# R_inf_new.fill(r1) | |||
# | |||
# # calculate R_inf for each pair of nodes | |||
# # Compute R_inf for each pair of nodes | |||
# for node1 in g1.nodes(data=True): | |||
# neighbor_n1 = g1[node1[0]] | |||
# # the transition probability distribution in the random walks | |||
@@ -219,7 +219,7 @@ def _marginalizedkernel_do(g1, g2, node_label, edge_label, p_quit, n_iteration): | |||
# neighbor2] # ref [1] equation (8) | |||
# R_inf[:] = R_inf_new | |||
# | |||
# # add elements of R_inf up and calculate kernel | |||
# # add elements of R_inf up and compute kernel. | |||
# for node1 in g1.nodes(data=True): | |||
# for node2 in g2.nodes(data=True): | |||
# s = p_init_G1 * p_init_G2 * deltakernel( | |||
@@ -267,11 +267,11 @@ def _marginalizedkernel_do(g1, g2, node_label, edge_label, p_quit, n_iteration): | |||
neighbor_n1[neighbor1][edge_label], | |||
neighbor_n2[neighbor2][edge_label]) | |||
# calculate R_inf with a simple interative method | |||
# Compute R_inf with a simple interative method | |||
for i in range(2, n_iteration + 1): | |||
R_inf_old = R_inf.copy() | |||
# calculate R_inf for each pair of nodes | |||
# Compute R_inf for each pair of nodes | |||
for node1 in g1.nodes(): | |||
neighbor_n1 = g1[node1] | |||
# the transition probability distribution in the random walks | |||
@@ -288,7 +288,7 @@ def _marginalizedkernel_do(g1, g2, node_label, edge_label, p_quit, n_iteration): | |||
(t_dict[(node1, node2, neighbor1, neighbor2)] * \ | |||
R_inf_old[(neighbor1, neighbor2)]) # ref [1] equation (8) | |||
# add elements of R_inf up and calculate kernel | |||
# add elements of R_inf up and compute kernel. | |||
for (n1, n2), value in R_inf.items(): | |||
s = p_init_G1 * p_init_G2 * deltakernel( | |||
g1.nodes[n1][node_label], g2.nodes[n2][node_label]) | |||
@@ -24,7 +24,7 @@ from gklearn.kernels import GraphKernel | |||
from gklearn.utils import Trie | |||
class PathUpToH(GraphKernel): # @todo: add function for k_func == None | |||
class PathUpToH(GraphKernel): # @todo: add function for k_func is None | |||
def __init__(self, **kwargs): | |||
GraphKernel.__init__(self) | |||
@@ -43,7 +43,7 @@ class PathUpToH(GraphKernel): # @todo: add function for k_func == None | |||
itr_kernel = combinations_with_replacement(range(0, len(self._graphs)), 2) | |||
if self._verbose >= 2: | |||
iterator_ps = tqdm(range(0, len(self._graphs)), desc='getting paths', file=sys.stdout) | |||
iterator_kernel = tqdm(itr_kernel, desc='calculating kernels', file=sys.stdout) | |||
iterator_kernel = tqdm(itr_kernel, desc='Computing kernels', file=sys.stdout) | |||
else: | |||
iterator_ps = range(0, len(self._graphs)) | |||
iterator_kernel = itr_kernel | |||
@@ -69,7 +69,7 @@ class PathUpToH(GraphKernel): # @todo: add function for k_func == None | |||
def _compute_gm_imap_unordered(self): | |||
self.__add_dummy_labels(self._graphs) | |||
# get all paths of all graphs before calculating kernels to save time, | |||
# get all paths of all graphs before computing kernels to save time, | |||
# but this may cost a lot of memory for large datasets. | |||
pool = Pool(self._n_jobs) | |||
itr = zip(self._graphs, range(0, len(self._graphs))) | |||
@@ -123,7 +123,7 @@ class PathUpToH(GraphKernel): # @todo: add function for k_func == None | |||
if self._verbose >= 2: | |||
iterator_ps = tqdm(g_list, desc='getting paths', file=sys.stdout) | |||
iterator_kernel = tqdm(range(len(g_list)), desc='calculating kernels', file=sys.stdout) | |||
iterator_kernel = tqdm(range(len(g_list)), desc='Computing kernels', file=sys.stdout) | |||
else: | |||
iterator_ps = g_list | |||
iterator_kernel = range(len(g_list)) | |||
@@ -149,7 +149,7 @@ class PathUpToH(GraphKernel): # @todo: add function for k_func == None | |||
def _compute_kernel_list_imap_unordered(self, g1, g_list): | |||
self.__add_dummy_labels(g_list + [g1]) | |||
# get all paths of all graphs before calculating kernels to save time, | |||
# get all paths of all graphs before computing kernels to save time, | |||
# but this may cost a lot of memory for large datasets. | |||
pool = Pool(self._n_jobs) | |||
itr = zip(g_list, range(0, len(g_list))) | |||
@@ -190,7 +190,7 @@ class PathUpToH(GraphKernel): # @todo: add function for k_func == None | |||
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=(paths_g1, paths_g_list), method='imap_unordered', n_jobs=self._n_jobs, itr_desc='calculating kernels', verbose=self._verbose) | |||
init_worker=init_worker, glbv=(paths_g1, paths_g_list), method='imap_unordered', n_jobs=self._n_jobs, itr_desc='Computing kernels', verbose=self._verbose) | |||
return kernel_list | |||
@@ -218,7 +218,7 @@ class PathUpToH(GraphKernel): # @todo: add function for k_func == None | |||
def __kernel_do_trie(self, trie1, trie2): | |||
"""Calculate path graph kernels up to depth d between 2 graphs using trie. | |||
"""Compute path graph kernels up to depth d between 2 graphs using trie. | |||
Parameters | |||
---------- | |||
@@ -335,7 +335,7 @@ class PathUpToH(GraphKernel): # @todo: add function for k_func == None | |||
def __kernel_do_naive(self, paths1, paths2): | |||
"""Calculate path graph kernels up to depth d between 2 graphs naively. | |||
"""Compute path graph kernels up to depth d between 2 graphs naively. | |||
Parameters | |||
---------- | |||
@@ -37,15 +37,15 @@ def randomwalkkernel(*args, | |||
n_jobs=None, | |||
chunksize=None, | |||
verbose=True): | |||
"""Calculate random walk graph kernels. | |||
"""Compute random walk graph kernels. | |||
Parameters | |||
---------- | |||
Gn : List of NetworkX graph | |||
List of graphs between which the kernels are calculated. | |||
List of graphs between which the kernels are computed. | |||
G1, G2 : NetworkX graphs | |||
Two graphs between which the kernel is calculated. | |||
Two graphs between which the kernel is computed. | |||
compute_method : string | |||
Method used to compute kernel. The Following choices are | |||
@@ -125,7 +125,7 @@ def randomwalkkernel(*args, | |||
Gn = [g.copy() for g in Gn] | |||
eweight = None | |||
if edge_weight == None: | |||
if edge_weight is None: | |||
if verbose: | |||
print('\n None edge weight specified. Set all weight to 1.\n') | |||
else: | |||
@@ -212,12 +212,12 @@ def randomwalkkernel(*args, | |||
############################################################################### | |||
def _sylvester_equation(Gn, lmda, p, q, eweight, n_jobs, chunksize, verbose=True): | |||
"""Calculate walk graph kernels up to n between 2 graphs using Sylvester method. | |||
"""Compute walk graph kernels up to n between 2 graphs using Sylvester method. | |||
Parameters | |||
---------- | |||
G1, G2 : NetworkX graph | |||
Graphs between which the kernel is calculated. | |||
Graphs between which the kernel is computed. | |||
node_label : string | |||
node attribute used as label. | |||
edge_label : string | |||
@@ -230,7 +230,7 @@ def _sylvester_equation(Gn, lmda, p, q, eweight, n_jobs, chunksize, verbose=True | |||
""" | |||
Kmatrix = np.zeros((len(Gn), len(Gn))) | |||
if q == None: | |||
if q is None: | |||
# don't normalize adjacency matrices if q is a uniform vector. Note | |||
# A_wave_list actually contains the transposes of the adjacency matrices. | |||
A_wave_list = [ | |||
@@ -245,7 +245,7 @@ def _sylvester_equation(Gn, lmda, p, q, eweight, n_jobs, chunksize, verbose=True | |||
# norm = A_tilde.sum(axis=0) | |||
# norm[norm == 0] = 1 | |||
# A_wave_list.append(A_tilde / norm) | |||
if p == None: # p is uniform distribution as default. | |||
if p is None: # p is uniform distribution as default. | |||
def init_worker(Awl_toshare): | |||
global G_Awl | |||
G_Awl = Awl_toshare | |||
@@ -255,7 +255,7 @@ def _sylvester_equation(Gn, lmda, p, q, eweight, n_jobs, chunksize, verbose=True | |||
# pbar = tqdm( | |||
# total=(1 + len(Gn)) * len(Gn) / 2, | |||
# desc='calculating kernels', | |||
# desc='Computing kernels', | |||
# file=sys.stdout) | |||
# for i in range(0, len(Gn)): | |||
# for j in range(i, len(Gn)): | |||
@@ -300,12 +300,12 @@ def _se_do(A_wave1, A_wave2, lmda): | |||
############################################################################### | |||
def _conjugate_gradient(Gn, lmda, p, q, ds_attrs, node_kernels, edge_kernels, | |||
node_label, edge_label, eweight, n_jobs, chunksize, verbose=True): | |||
"""Calculate walk graph kernels up to n between 2 graphs using conjugate method. | |||
"""Compute walk graph kernels up to n between 2 graphs using conjugate method. | |||
Parameters | |||
---------- | |||
G1, G2 : NetworkX graph | |||
Graphs between which the kernel is calculated. | |||
Graphs between which the kernel is computed. | |||
node_label : string | |||
node attribute used as label. | |||
edge_label : string | |||
@@ -321,14 +321,14 @@ def _conjugate_gradient(Gn, lmda, p, q, ds_attrs, node_kernels, edge_kernels, | |||
# if not ds_attrs['node_labeled'] and ds_attrs['node_attr_dim'] < 1 and \ | |||
# not ds_attrs['edge_labeled'] and ds_attrs['edge_attr_dim'] < 1: | |||
# # this is faster from unlabeled graphs. @todo: why? | |||
# if q == None: | |||
# if q is None: | |||
# # don't normalize adjacency matrices if q is a uniform vector. Note | |||
# # A_wave_list actually contains the transposes of the adjacency matrices. | |||
# A_wave_list = [ | |||
# nx.adjacency_matrix(G, eweight).todense().transpose() for G in | |||
# tqdm(Gn, desc='compute adjacency matrices', file=sys.stdout) | |||
# ] | |||
# if p == None: # p is uniform distribution as default. | |||
# if p is None: # p is uniform distribution as default. | |||
# def init_worker(Awl_toshare): | |||
# global G_Awl | |||
# G_Awl = Awl_toshare | |||
@@ -336,23 +336,23 @@ def _conjugate_gradient(Gn, lmda, p, q, ds_attrs, node_kernels, edge_kernels, | |||
# parallel_gm(do_partial, Kmatrix, Gn, init_worker=init_worker, | |||
# glbv=(A_wave_list,), n_jobs=n_jobs) | |||
# else: | |||
# reindex nodes using consecutive integers for convenience of kernel calculation. | |||
# reindex nodes using consecutive integers for convenience of kernel computation. | |||
Gn = [nx.convert_node_labels_to_integers( | |||
g, first_label=0, label_attribute='label_orignal') for g in (tqdm( | |||
Gn, desc='reindex vertices', file=sys.stdout) if verbose else Gn)] | |||
if p == None and q == None: # p and q are uniform distributions as default. | |||
if p is None and q is None: # p and q are uniform distributions as default. | |||
def init_worker(gn_toshare): | |||
global G_gn | |||
G_gn = gn_toshare | |||
do_partial = partial(wrapper_cg_labled_do, ds_attrs, node_kernels, | |||
do_partial = partial(wrapper_cg_labeled_do, ds_attrs, node_kernels, | |||
node_label, edge_kernels, edge_label, lmda) | |||
parallel_gm(do_partial, Kmatrix, Gn, init_worker=init_worker, | |||
glbv=(Gn,), n_jobs=n_jobs, chunksize=chunksize, verbose=verbose) | |||
# pbar = tqdm( | |||
# total=(1 + len(Gn)) * len(Gn) / 2, | |||
# desc='calculating kernels', | |||
# desc='Computing kernels', | |||
# file=sys.stdout) | |||
# for i in range(0, len(Gn)): | |||
# for j in range(i, len(Gn)): | |||
@@ -382,24 +382,24 @@ def _cg_unlabled_do(A_wave1, A_wave2, lmda): | |||
return np.dot(q_times, x) | |||
def wrapper_cg_labled_do(ds_attrs, node_kernels, node_label, edge_kernels, | |||
def wrapper_cg_labeled_do(ds_attrs, node_kernels, node_label, edge_kernels, | |||
edge_label, lmda, itr): | |||
i = itr[0] | |||
j = itr[1] | |||
return i, j, _cg_labled_do(G_gn[i], G_gn[j], ds_attrs, node_kernels, | |||
return i, j, _cg_labeled_do(G_gn[i], G_gn[j], ds_attrs, node_kernels, | |||
node_label, edge_kernels, edge_label, lmda) | |||
def _cg_labled_do(g1, g2, ds_attrs, node_kernels, node_label, | |||
def _cg_labeled_do(g1, g2, ds_attrs, node_kernels, node_label, | |||
edge_kernels, edge_label, lmda): | |||
# Frist, compute kernels between all pairs of nodes, method borrowed | |||
# Frist, compute kernels between all pairs of nodes using the method borrowed | |||
# from FCSP. It is faster than directly computing all edge kernels | |||
# when $d_1d_2>2$, where $d_1$ and $d_2$ are vertex degrees of the | |||
# graphs compared, which is the most case we went though. For very | |||
# sparse graphs, this would be slow. | |||
vk_dict = computeVK(g1, g2, ds_attrs, node_kernels, node_label) | |||
# Compute weight matrix of the direct product graph. | |||
# Compute the weight matrix of the direct product graph. | |||
w_times, w_dim = computeW(g1, g2, vk_dict, ds_attrs, | |||
edge_kernels, edge_label) | |||
# use uniform distribution if there is no prior knowledge. | |||
@@ -415,12 +415,12 @@ def _cg_labled_do(g1, g2, ds_attrs, node_kernels, node_label, | |||
############################################################################### | |||
def _fixed_point(Gn, lmda, p, q, ds_attrs, node_kernels, edge_kernels, | |||
node_label, edge_label, eweight, n_jobs, chunksize, verbose=True): | |||
"""Calculate walk graph kernels up to n between 2 graphs using Fixed-Point method. | |||
"""Compute walk graph kernels up to n between 2 graphs using Fixed-Point method. | |||
Parameters | |||
---------- | |||
G1, G2 : NetworkX graph | |||
Graphs between which the kernel is calculated. | |||
Graphs between which the kernel is computed. | |||
node_label : string | |||
node attribute used as label. | |||
edge_label : string | |||
@@ -438,17 +438,17 @@ def _fixed_point(Gn, lmda, p, q, ds_attrs, node_kernels, edge_kernels, | |||
# if not ds_attrs['node_labeled'] and ds_attrs['node_attr_dim'] < 1 and \ | |||
# not ds_attrs['edge_labeled'] and ds_attrs['edge_attr_dim'] > 1: | |||
# # this is faster from unlabeled graphs. @todo: why? | |||
# if q == None: | |||
# if q is None: | |||
# # don't normalize adjacency matrices if q is a uniform vector. Note | |||
# # A_wave_list actually contains the transposes of the adjacency matrices. | |||
# A_wave_list = [ | |||
# nx.adjacency_matrix(G, eweight).todense().transpose() for G in | |||
# tqdm(Gn, desc='compute adjacency matrices', file=sys.stdout) | |||
# ] | |||
# if p == None: # p is uniform distribution as default. | |||
# if p is None: # p is uniform distribution as default. | |||
# pbar = tqdm( | |||
# total=(1 + len(Gn)) * len(Gn) / 2, | |||
# desc='calculating kernels', | |||
# desc='Computing kernels', | |||
# file=sys.stdout) | |||
# for i in range(0, len(Gn)): | |||
# for j in range(i, len(Gn)): | |||
@@ -464,33 +464,33 @@ def _fixed_point(Gn, lmda, p, q, ds_attrs, node_kernels, edge_kernels, | |||
# Kmatrix[j][i] = Kmatrix[i][j] | |||
# pbar.update(1) | |||
# else: | |||
# reindex nodes using consecutive integers for convenience of kernel calculation. | |||
# reindex nodes using consecutive integers for the convenience of kernel computation. | |||
Gn = [nx.convert_node_labels_to_integers( | |||
g, first_label=0, label_attribute='label_orignal') for g in (tqdm( | |||
Gn, desc='reindex vertices', file=sys.stdout) if verbose else Gn)] | |||
if p == None and q == None: # p and q are uniform distributions as default. | |||
if p is None and q is None: # p and q are uniform distributions as default. | |||
def init_worker(gn_toshare): | |||
global G_gn | |||
G_gn = gn_toshare | |||
do_partial = partial(wrapper_fp_labled_do, ds_attrs, node_kernels, | |||
do_partial = partial(wrapper_fp_labeled_do, ds_attrs, node_kernels, | |||
node_label, edge_kernels, edge_label, lmda) | |||
parallel_gm(do_partial, Kmatrix, Gn, init_worker=init_worker, | |||
glbv=(Gn,), n_jobs=n_jobs, chunksize=chunksize, verbose=verbose) | |||
return Kmatrix | |||
def wrapper_fp_labled_do(ds_attrs, node_kernels, node_label, edge_kernels, | |||
def wrapper_fp_labeled_do(ds_attrs, node_kernels, node_label, edge_kernels, | |||
edge_label, lmda, itr): | |||
i = itr[0] | |||
j = itr[1] | |||
return i, j, _fp_labled_do(G_gn[i], G_gn[j], ds_attrs, node_kernels, | |||
return i, j, _fp_labeled_do(G_gn[i], G_gn[j], ds_attrs, node_kernels, | |||
node_label, edge_kernels, edge_label, lmda) | |||
def _fp_labled_do(g1, g2, ds_attrs, node_kernels, node_label, | |||
def _fp_labeled_do(g1, g2, ds_attrs, node_kernels, node_label, | |||
edge_kernels, edge_label, lmda): | |||
# Frist, compute kernels between all pairs of nodes, method borrowed | |||
# Frist, compute kernels between all pairs of nodes using the method borrowed | |||
# from FCSP. It is faster than directly computing all edge kernels | |||
# when $d_1d_2>2$, where $d_1$ and $d_2$ are vertex degrees of the | |||
# graphs compared, which is the most case we went though. For very | |||
@@ -519,13 +519,13 @@ def func_fp(x, p_times, lmda, w_times): | |||
############################################################################### | |||
def _spectral_decomposition(Gn, weight, p, q, sub_kernel, eweight, n_jobs, chunksize, verbose=True): | |||
"""Calculate walk graph kernels up to n between 2 unlabeled graphs using | |||
"""Compute walk graph kernels up to n between 2 unlabeled graphs using | |||
spectral decomposition method. Labels will be ignored. | |||
Parameters | |||
---------- | |||
G1, G2 : NetworkX graph | |||
Graphs between which the kernel is calculated. | |||
Graphs between which the kernel is computed. | |||
node_label : string | |||
node attribute used as label. | |||
edge_label : string | |||
@@ -538,7 +538,7 @@ def _spectral_decomposition(Gn, weight, p, q, sub_kernel, eweight, n_jobs, chunk | |||
""" | |||
Kmatrix = np.zeros((len(Gn), len(Gn))) | |||
if q == None: | |||
if q is None: | |||
# precompute the spectral decomposition of each graph. | |||
P_list = [] | |||
D_list = [] | |||
@@ -552,7 +552,7 @@ def _spectral_decomposition(Gn, weight, p, q, sub_kernel, eweight, n_jobs, chunk | |||
P_list.append(ev) | |||
# P_inv_list = [p.T for p in P_list] # @todo: also works for directed graphs? | |||
if p == None: # p is uniform distribution as default. | |||
if p is None: # p is uniform distribution as default. | |||
q_T_list = [np.full((1, nx.number_of_nodes(G)), 1 / nx.number_of_nodes(G)) for G in Gn] | |||
# q_T_list = [q.T for q in q_list] | |||
def init_worker(q_T_toshare, P_toshare, D_toshare): | |||
@@ -568,7 +568,7 @@ def _spectral_decomposition(Gn, weight, p, q, sub_kernel, eweight, n_jobs, chunk | |||
# pbar = tqdm( | |||
# total=(1 + len(Gn)) * len(Gn) / 2, | |||
# desc='calculating kernels', | |||
# desc='Computing kernels', | |||
# file=sys.stdout) | |||
# for i in range(0, len(Gn)): | |||
# for j in range(i, len(Gn)): | |||
@@ -605,12 +605,12 @@ def _sd_do(q_T1, q_T2, P1, P2, D1, D2, weight, sub_kernel): | |||
############################################################################### | |||
def _randomwalkkernel_kron(G1, G2, node_label, edge_label): | |||
"""Calculate walk graph kernels up to n between 2 graphs using nearest Kronecker product approximation method. | |||
"""Compute walk graph kernels up to n between 2 graphs using nearest Kronecker product approximation method. | |||
Parameters | |||
---------- | |||
G1, G2 : NetworkX graph | |||
Graphs between which the kernel is calculated. | |||
Graphs between which the kernel is computed. | |||
node_label : string | |||
node attribute used as label. | |||
edge_label : string | |||
@@ -692,8 +692,8 @@ def computeVK(g1, g2, ds_attrs, node_kernels, node_label): | |||
def computeW(g1, g2, vk_dict, ds_attrs, edge_kernels, edge_label): | |||
'''Compute weight matrix of the direct product graph. | |||
''' | |||
"""Compute the weight matrix of the direct product graph. | |||
""" | |||
w_dim = nx.number_of_nodes(g1) * nx.number_of_nodes(g2) | |||
w_times = np.zeros((w_dim, w_dim)) | |||
if vk_dict: # node labeled | |||
@@ -47,7 +47,7 @@ class ShortestPath(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 | |||
for i, j in iterator: | |||
@@ -102,7 +102,7 @@ class ShortestPath(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)) | |||
for i in iterator: | |||
@@ -145,7 +145,7 @@ class ShortestPath(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=(g1, g_list), method='imap_unordered', n_jobs=self._n_jobs, itr_desc='calculating kernels', verbose=self._verbose) | |||
init_worker=init_worker, glbv=(g1, g_list), method='imap_unordered', n_jobs=self._n_jobs, itr_desc='Computing kernels', verbose=self._verbose) | |||
return kernel_list | |||
@@ -29,15 +29,15 @@ def spkernel(*args, | |||
n_jobs=None, | |||
chunksize=None, | |||
verbose=True): | |||
"""Calculate shortest-path kernels between graphs. | |||
"""Compute shortest-path kernels between graphs. | |||
Parameters | |||
---------- | |||
Gn : List of NetworkX graph | |||
List of graphs between which the kernels are calculated. | |||
List of graphs between which the kernels are computed. | |||
G1, G2 : NetworkX graphs | |||
Two graphs between which the kernel is calculated. | |||
Two graphs between which the kernel is computed. | |||
node_label : string | |||
Node attribute used as label. The default node label is atom. | |||
@@ -179,7 +179,7 @@ def spkernel(*args, | |||
# do_partial = partial(spkernel_do, Gn, ds_attrs, node_label, node_kernels) | |||
# itr = combinations_with_replacement(range(0, len(Gn)), 2) | |||
# for i, j, kernel in tqdm( | |||
# pool.map(do_partial, itr), desc='calculating kernels', | |||
# pool.map(do_partial, itr), desc='Computing kernels', | |||
# file=sys.stdout): | |||
# Kmatrix[i][j] = kernel | |||
# Kmatrix[j][i] = kernel | |||
@@ -202,7 +202,7 @@ def spkernel(*args, | |||
# # ---- direct running, normally use single CPU core. ---- | |||
# from itertools import combinations_with_replacement | |||
# itr = combinations_with_replacement(range(0, len(Gn)), 2) | |||
# for i, j in tqdm(itr, desc='calculating kernels', file=sys.stdout): | |||
# for i, j in tqdm(itr, desc='Computing kernels', file=sys.stdout): | |||
# kernel = spkernel_do(Gn[i], Gn[j], ds_attrs, node_label, node_kernels) | |||
# Kmatrix[i][j] = kernel | |||
# Kmatrix[j][i] = kernel | |||
@@ -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): | |||
@@ -37,15 +37,15 @@ def structuralspkernel(*args, | |||
n_jobs=None, | |||
chunksize=None, | |||
verbose=True): | |||
"""Calculate mean average structural shortest path kernels between graphs. | |||
"""Compute mean average structural shortest path kernels between graphs. | |||
Parameters | |||
---------- | |||
Gn : List of NetworkX graph | |||
List of graphs between which the kernels are calculated. | |||
List of graphs between which the kernels are computed. | |||
G1, G2 : NetworkX graphs | |||
Two graphs between which the kernel is calculated. | |||
Two graphs between which the kernel is computed. | |||
node_label : string | |||
Node attribute used as label. The default node label is atom. | |||
@@ -215,7 +215,7 @@ def structuralspkernel(*args, | |||
from itertools import combinations_with_replacement | |||
itr = combinations_with_replacement(range(0, len(Gn)), 2) | |||
if verbose: | |||
iterator = tqdm(itr, desc='calculating kernels', file=sys.stdout) | |||
iterator = tqdm(itr, desc='Computing kernels', file=sys.stdout) | |||
else: | |||
iterator = itr | |||
if compute_method == 'trie': | |||
@@ -241,7 +241,7 @@ def structuralspkernel(*args, | |||
# combinations_with_replacement(splist, 2), | |||
# combinations_with_replacement(range(0, len(Gn)), 2)) | |||
# for i, j, kernel in tqdm( | |||
# pool.map(do_partial, itr), desc='calculating kernels', | |||
# pool.map(do_partial, itr), desc='Computing kernels', | |||
# file=sys.stdout): | |||
# Kmatrix[i][j] = kernel | |||
# Kmatrix[j][i] = kernel | |||
@@ -263,7 +263,7 @@ def structuralspkernel(*args, | |||
# with closing(Pool(n_jobs)) as pool: | |||
# for i, j, kernel in tqdm( | |||
# pool.imap_unordered(do_partial, itr, 1000), | |||
# desc='calculating kernels', | |||
# desc='Computing kernels', | |||
# file=sys.stdout): | |||
# Kmatrix[i][j] = kernel | |||
# Kmatrix[j][i] = kernel | |||
@@ -335,7 +335,7 @@ def structuralspkernel_do(g1, g2, spl1, spl2, ds_attrs, node_label, edge_label, | |||
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)) | |||
@@ -429,7 +429,7 @@ def ssp_do_trie(g1, g2, trie1, trie2, ds_attrs, node_label, edge_label, | |||
# # compute graph kernels | |||
# traverseBothTrie(trie1[0].root, trie2[0], kernel) | |||
# | |||
# kernel = kernel[0] / (trie1[1] * trie2[1]) # calculate mean average | |||
# kernel = kernel[0] / (trie1[1] * trie2[1]) # Compute mean average | |||
# # traverse all paths in graph1. Deep-first search is applied. | |||
# def traverseBothTrie(root, trie2, kernel, vk_dict, ek_dict, pcurrent=[]): | |||
@@ -485,7 +485,7 @@ def ssp_do_trie(g1, g2, trie1, trie2, ds_attrs, node_label, edge_label, | |||
else: | |||
traverseBothTrieu(trie1[0].root, trie2[0], kernel, vk_dict, ek_dict) | |||
kernel = kernel[0] / (trie1[1] * trie2[1]) # calculate mean average | |||
kernel = kernel[0] / (trie1[1] * trie2[1]) # Compute mean average | |||
return kernel | |||
@@ -781,9 +781,9 @@ def get_shortest_paths(G, weight, directed): | |||
Parameters | |||
---------- | |||
G : NetworkX graphs | |||
The graphs whose paths are calculated. | |||
The graphs whose paths are computed. | |||
weight : string/None | |||
edge attribute used as weight to calculate the shortest path. | |||
edge attribute used as weight to compute the shortest path. | |||
directed: boolean | |||
Whether graph is directed. | |||
@@ -822,9 +822,9 @@ def get_sps_as_trie(G, weight, directed): | |||
Parameters | |||
---------- | |||
G : NetworkX graphs | |||
The graphs whose paths are calculated. | |||
The graphs whose paths are computed. | |||
weight : string/None | |||
edge attribute used as weight to calculate the shortest path. | |||
edge attribute used as weight to compute the shortest path. | |||
directed: boolean | |||
Whether graph is directed. | |||
@@ -39,7 +39,7 @@ class Treelet(GraphKernel): | |||
def _compute_gm_series(self): | |||
self.__add_dummy_labels(self._graphs) | |||
# get all canonical keys of all graphs before calculating kernels to save | |||
# get all canonical keys of all graphs before computing kernels to save | |||
# time, but this may cost a lot of memory for large dataset. | |||
canonkeys = [] | |||
if self._verbose >= 2: | |||
@@ -55,7 +55,7 @@ class Treelet(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 | |||
for i, j in iterator: | |||
@@ -69,7 +69,7 @@ class Treelet(GraphKernel): | |||
def _compute_gm_imap_unordered(self): | |||
self.__add_dummy_labels(self._graphs) | |||
# get all canonical keys of all graphs before calculating kernels to save | |||
# get all canonical keys of all graphs before computing kernels to save | |||
# time, but this may cost a lot of memory for large dataset. | |||
pool = Pool(self._n_jobs) | |||
itr = zip(self._graphs, range(0, len(self._graphs))) | |||
@@ -105,7 +105,7 @@ class Treelet(GraphKernel): | |||
def _compute_kernel_list_series(self, g1, g_list): | |||
self.__add_dummy_labels(g_list + [g1]) | |||
# get all canonical keys of all graphs before calculating kernels to save | |||
# get all canonical keys of all graphs before computing kernels to save | |||
# time, but this may cost a lot of memory for large dataset. | |||
canonkeys_1 = self.__get_canonkeys(g1) | |||
canonkeys_list = [] | |||
@@ -119,7 +119,7 @@ class Treelet(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)) | |||
for i in iterator: | |||
@@ -132,7 +132,7 @@ class Treelet(GraphKernel): | |||
def _compute_kernel_list_imap_unordered(self, g1, g_list): | |||
self.__add_dummy_labels(g_list + [g1]) | |||
# get all canonical keys of all graphs before calculating kernels to save | |||
# get all canonical keys of all graphs before computing kernels to save | |||
# time, but this may cost a lot of memory for large dataset. | |||
canonkeys_1 = self.__get_canonkeys(g1) | |||
canonkeys_list = [[] for _ in range(len(g_list))] | |||
@@ -167,7 +167,7 @@ class Treelet(GraphKernel): | |||
len_itr = len(g_list) | |||
parallel_me(do_fun, func_assign, kernel_list, itr, len_itr=len_itr, | |||
init_worker=init_worker, glbv=(canonkeys_1, canonkeys_list), method='imap_unordered', | |||
n_jobs=self._n_jobs, itr_desc='calculating kernels', verbose=self._verbose) | |||
n_jobs=self._n_jobs, itr_desc='Computing kernels', verbose=self._verbose) | |||
return kernel_list | |||
@@ -185,7 +185,7 @@ class Treelet(GraphKernel): | |||
def __kernel_do(self, canonkey1, canonkey2): | |||
"""Calculate treelet graph kernel between 2 graphs. | |||
"""Compute treelet graph kernel between 2 graphs. | |||
Parameters | |||
---------- | |||
@@ -29,15 +29,15 @@ def treeletkernel(*args, | |||
n_jobs=None, | |||
chunksize=None, | |||
verbose=True): | |||
"""Calculate treelet graph kernels between graphs. | |||
"""Compute treelet graph kernels between graphs. | |||
Parameters | |||
---------- | |||
Gn : List of NetworkX graph | |||
List of graphs between which the kernels are calculated. | |||
List of graphs between which the kernels are computed. | |||
G1, G2 : NetworkX graphs | |||
Two graphs between which the kernel is calculated. | |||
Two graphs between which the kernel is computed. | |||
sub_kernel : function | |||
The sub-kernel between 2 real number vectors. Each vector counts the | |||
@@ -89,7 +89,7 @@ def treeletkernel(*args, | |||
# ---- use pool.imap_unordered to parallel and track progress. ---- | |||
if parallel == 'imap_unordered': | |||
# get all canonical keys of all graphs before calculating kernels to save | |||
# get all canonical keys of all graphs before computing kernels to save | |||
# time, but this may cost a lot of memory for large dataset. | |||
pool = Pool(n_jobs) | |||
itr = zip(Gn, range(0, len(Gn))) | |||
@@ -120,8 +120,8 @@ def treeletkernel(*args, | |||
glbv=(canonkeys,), n_jobs=n_jobs, chunksize=chunksize, verbose=verbose) | |||
# ---- do not use parallelization. ---- | |||
elif parallel == None: | |||
# get all canonical keys of all graphs before calculating kernels to save | |||
elif parallel is None: | |||
# get all canonical keys of all graphs before computing kernels to save | |||
# time, but this may cost a lot of memory for large dataset. | |||
canonkeys = [] | |||
for g in (tqdm(Gn, desc='getting canonkeys', file=sys.stdout) if verbose else Gn): | |||
@@ -148,7 +148,7 @@ def treeletkernel(*args, | |||
def _treeletkernel_do(canonkey1, canonkey2, sub_kernel): | |||
"""Calculate treelet graph kernel between 2 graphs. | |||
"""Compute treelet graph kernel between 2 graphs. | |||
Parameters | |||
---------- | |||
@@ -210,7 +210,7 @@ def get_canonkeys(G, node_label, edge_label, labeled, is_directed): | |||
# n-star patterns | |||
patterns['3star'] = [[node] + [neighbor for neighbor in G[node]] for node in G.nodes() if G.degree(node) == 3] | |||
patterns['4star'] = [[node] + [neighbor for neighbor in G[node]] for node in G.nodes() if G.degree(node) == 4] | |||
patterns['4star'] = [[node] + [neighbor for neighbor in G[node]] for node in G.nodes() if G.degree(node) == 4] # @todo: check self loop. | |||
patterns['5star'] = [[node] + [neighbor for neighbor in G[node]] for node in G.nodes() if G.degree(node) == 5] | |||
# n-star patterns | |||
canonkey['6'] = len(patterns['3star']) | |||
@@ -34,15 +34,15 @@ def untilhpathkernel(*args, | |||
n_jobs=None, | |||
chunksize=None, | |||
verbose=True): | |||
"""Calculate path graph kernels up to depth/hight h between graphs. | |||
"""Compute path graph kernels up to depth/hight h between graphs. | |||
Parameters | |||
---------- | |||
Gn : List of NetworkX graph | |||
List of graphs between which the kernels are calculated. | |||
List of graphs between which the kernels are computed. | |||
G1, G2 : NetworkX graphs | |||
Two graphs between which the kernel is calculated. | |||
Two graphs between which the kernel is computed. | |||
node_label : string | |||
Node attribute used as label. The default node label is atom. | |||
@@ -91,7 +91,7 @@ def untilhpathkernel(*args, | |||
attr_names=['node_labeled', 'node_attr_dim', 'edge_labeled', | |||
'edge_attr_dim', 'is_directed'], | |||
node_label=node_label, edge_label=edge_label) | |||
if k_func != None: | |||
if k_func is not None: | |||
if not ds_attrs['node_labeled']: | |||
for G in Gn: | |||
nx.set_node_attributes(G, '0', 'atom') | |||
@@ -103,7 +103,7 @@ def untilhpathkernel(*args, | |||
if parallel == 'imap_unordered': | |||
# ---- use pool.imap_unordered to parallel and track progress. ---- | |||
# get all paths of all graphs before calculating kernels to save time, | |||
# get all paths of all graphs before computing kernels to save time, | |||
# but this may cost a lot of memory for large datasets. | |||
pool = Pool(n_jobs) | |||
itr = zip(Gn, range(0, len(Gn))) | |||
@@ -113,10 +113,10 @@ def untilhpathkernel(*args, | |||
else: | |||
chunksize = 100 | |||
all_paths = [[] for _ in range(len(Gn))] | |||
if compute_method == 'trie' and k_func != None: | |||
if compute_method == 'trie' and k_func is not None: | |||
getps_partial = partial(wrapper_find_all_path_as_trie, depth, | |||
ds_attrs, node_label, edge_label) | |||
elif compute_method != 'trie' and k_func != None: | |||
elif compute_method != 'trie' and k_func is not None: | |||
getps_partial = partial(wrapper_find_all_paths_until_length, depth, | |||
ds_attrs, node_label, edge_label, True) | |||
else: | |||
@@ -133,9 +133,9 @@ def untilhpathkernel(*args, | |||
pool.join() | |||
# for g in Gn: | |||
# if compute_method == 'trie' and k_func != None: | |||
# if compute_method == 'trie' and k_func is not None: | |||
# find_all_path_as_trie(g, depth, ds_attrs, node_label, edge_label) | |||
# elif compute_method != 'trie' and k_func != None: | |||
# elif compute_method != 'trie' and k_func is not None: | |||
# find_all_paths_until_length(g, depth, ds_attrs, node_label, edge_label) | |||
# else: | |||
# find_all_paths_until_length(g, depth, ds_attrs, node_label, edge_label, False) | |||
@@ -155,14 +155,14 @@ def untilhpathkernel(*args, | |||
## all_paths[i] = ps | |||
## print(time.time() - ttt) | |||
if compute_method == 'trie' and k_func != None: | |||
if compute_method == 'trie' and k_func is not None: | |||
def init_worker(trie_toshare): | |||
global G_trie | |||
G_trie = trie_toshare | |||
do_partial = partial(wrapper_uhpath_do_trie, k_func) | |||
parallel_gm(do_partial, Kmatrix, Gn, init_worker=init_worker, | |||
glbv=(all_paths,), n_jobs=n_jobs, chunksize=chunksize, verbose=verbose) | |||
elif compute_method != 'trie' and k_func != None: | |||
elif compute_method != 'trie' and k_func is not None: | |||
def init_worker(plist_toshare): | |||
global G_plist | |||
G_plist = plist_toshare | |||
@@ -177,7 +177,7 @@ def untilhpathkernel(*args, | |||
parallel_gm(do_partial, Kmatrix, Gn, init_worker=init_worker, | |||
glbv=(all_paths,), n_jobs=n_jobs, chunksize=chunksize, verbose=verbose) | |||
elif parallel == None: | |||
elif parallel is None: | |||
# from pympler import asizeof | |||
# ---- direct running, normally use single CPU core. ---- | |||
# print(asizeof.asized(all_paths, detail=1).format()) | |||
@@ -195,7 +195,7 @@ def untilhpathkernel(*args, | |||
# print(sizeof_allpaths) | |||
pbar = tqdm( | |||
total=((len(Gn) + 1) * len(Gn) / 2), | |||
desc='calculating kernels', | |||
desc='Computing kernels', | |||
file=sys.stdout) | |||
for i in range(0, len(Gn)): | |||
for j in range(i, len(Gn)): | |||
@@ -217,7 +217,7 @@ def untilhpathkernel(*args, | |||
# print(sizeof_allpaths) | |||
pbar = tqdm( | |||
total=((len(Gn) + 1) * len(Gn) / 2), | |||
desc='calculating kernels', | |||
desc='Computing kernels', | |||
file=sys.stdout) | |||
for i in range(0, len(Gn)): | |||
for j in range(i, len(Gn)): | |||
@@ -236,7 +236,7 @@ def untilhpathkernel(*args, | |||
def _untilhpathkernel_do_trie(trie1, trie2, k_func): | |||
"""Calculate path graph kernels up to depth d between 2 graphs using trie. | |||
"""Compute path graph kernels up to depth d between 2 graphs using trie. | |||
Parameters | |||
---------- | |||
@@ -351,7 +351,7 @@ def wrapper_uhpath_do_trie(k_func, itr): | |||
def _untilhpathkernel_do_naive(paths1, paths2, k_func): | |||
"""Calculate path graph kernels up to depth d between 2 graphs naively. | |||
"""Compute path graph kernels up to depth d between 2 graphs naively. | |||
Parameters | |||
---------- | |||
@@ -400,7 +400,7 @@ def wrapper_uhpath_do_naive(k_func, itr): | |||
def _untilhpathkernel_do_kernelless(paths1, paths2, k_func): | |||
"""Calculate path graph kernels up to depth d between 2 graphs naively. | |||
"""Compute path graph kernels up to depth d between 2 graphs naively. | |||
Parameters | |||
---------- | |||
@@ -32,15 +32,15 @@ def weisfeilerlehmankernel(*args, | |||
n_jobs=None, | |||
chunksize=None, | |||
verbose=True): | |||
"""Calculate Weisfeiler-Lehman kernels between graphs. | |||
"""Compute Weisfeiler-Lehman kernels between graphs. | |||
Parameters | |||
---------- | |||
Gn : List of NetworkX graph | |||
List of graphs between which the kernels are calculated. | |||
List of graphs between which the kernels are computed. | |||
G1, G2 : NetworkX graphs | |||
Two graphs between which the kernel is calculated. | |||
Two graphs between which the kernel is computed. | |||
node_label : string | |||
Node attribute used as label. The default node label is atom. | |||
@@ -115,12 +115,12 @@ def weisfeilerlehmankernel(*args, | |||
def _wl_kernel_do(Gn, node_label, edge_label, height, parallel, n_jobs, chunksize, verbose): | |||
"""Calculate Weisfeiler-Lehman kernels between graphs. | |||
"""Compute Weisfeiler-Lehman kernels between graphs. | |||
Parameters | |||
---------- | |||
Gn : List of NetworkX graph | |||
List of graphs between which the kernels are calculated. | |||
List of graphs between which the kernels are computed. | |||
node_label : string | |||
node attribute used as label. | |||
edge_label : string | |||
@@ -146,7 +146,7 @@ def _wl_kernel_do(Gn, node_label, edge_label, height, parallel, n_jobs, chunksiz | |||
# number of occurence of each label in G | |||
all_num_of_each_label.append(dict(Counter(labels_ori))) | |||
# calculate subtree kernel with the 0th iteration and add it to the final kernel | |||
# Compute subtree kernel with the 0th iteration and add it to the final kernel | |||
compute_kernel_matrix(Kmatrix, all_num_of_each_label, Gn, parallel, n_jobs, chunksize, False) | |||
# iterate each height | |||
@@ -255,7 +255,7 @@ def _wl_kernel_do(Gn, node_label, edge_label, height, parallel, n_jobs, chunksiz | |||
# all_labels_ori.update(labels_comp) | |||
all_num_of_each_label.append(dict(Counter(labels_comp))) | |||
# calculate subtree kernel with h iterations and add it to the final kernel | |||
# Compute subtree kernel with h iterations and add it to the final kernel | |||
compute_kernel_matrix(Kmatrix, all_num_of_each_label, Gn, parallel, n_jobs, chunksize, False) | |||
return Kmatrix | |||
@@ -316,7 +316,7 @@ def compute_kernel_matrix(Kmatrix, all_num_of_each_label, Gn, parallel, n_jobs, | |||
do_partial = partial(wrapper_compute_subtree_kernel, Kmatrix) | |||
parallel_gm(do_partial, Kmatrix, Gn, init_worker=init_worker, | |||
glbv=(all_num_of_each_label,), n_jobs=n_jobs, chunksize=chunksize, verbose=verbose) | |||
elif parallel == None: | |||
elif parallel is None: | |||
for i in range(len(Kmatrix)): | |||
for j in range(i, len(Kmatrix)): | |||
Kmatrix[i][j] = compute_subtree_kernel(all_num_of_each_label[i], | |||
@@ -345,12 +345,12 @@ def wrapper_compute_subtree_kernel(Kmatrix, itr): | |||
def _wl_spkernel_do(Gn, node_label, edge_label, height): | |||
"""Calculate Weisfeiler-Lehman shortest path kernels between graphs. | |||
"""Compute Weisfeiler-Lehman shortest path kernels between graphs. | |||
Parameters | |||
---------- | |||
Gn : List of NetworkX graph | |||
List of graphs between which the kernels are calculated. | |||
List of graphs between which the kernels are computed. | |||
node_label : string | |||
node attribute used as label. | |||
edge_label : string | |||
@@ -413,7 +413,7 @@ def _wl_spkernel_do(Gn, node_label, edge_label, height): | |||
for node in G.nodes(data = True): | |||
node[1][node_label] = set_compressed[set_multisets[node[0]]] | |||
# calculate subtree kernel with h iterations and add it to the final kernel | |||
# Compute subtree kernel with h iterations and add it to the final kernel | |||
for i in range(0, len(Gn)): | |||
for j in range(i, len(Gn)): | |||
for e1 in Gn[i].edges(data = True): | |||
@@ -427,12 +427,12 @@ def _wl_spkernel_do(Gn, node_label, edge_label, height): | |||
def _wl_edgekernel_do(Gn, node_label, edge_label, height): | |||
"""Calculate Weisfeiler-Lehman edge kernels between graphs. | |||
"""Compute Weisfeiler-Lehman edge kernels between graphs. | |||
Parameters | |||
---------- | |||
Gn : List of NetworkX graph | |||
List of graphs between which the kernels are calculated. | |||
List of graphs between which the kernels are computed. | |||
node_label : string | |||
node attribute used as label. | |||
edge_label : string | |||
@@ -491,7 +491,7 @@ def _wl_edgekernel_do(Gn, node_label, edge_label, height): | |||
for node in G.nodes(data = True): | |||
node[1][node_label] = set_compressed[set_multisets[node[0]]] | |||
# calculate subtree kernel with h iterations and add it to the final kernel | |||
# Compute subtree kernel with h iterations and add it to the final kernel | |||
for i in range(0, len(Gn)): | |||
for j in range(i, len(Gn)): | |||
for e1 in Gn[i].edges(data = True): | |||
@@ -504,12 +504,12 @@ def _wl_edgekernel_do(Gn, node_label, edge_label, height): | |||
def _wl_userkernel_do(Gn, node_label, edge_label, height, base_kernel): | |||
"""Calculate Weisfeiler-Lehman kernels based on user-defined kernel between graphs. | |||
"""Compute Weisfeiler-Lehman kernels based on user-defined kernel between graphs. | |||
Parameters | |||
---------- | |||
Gn : List of NetworkX graph | |||
List of graphs between which the kernels are calculated. | |||
List of graphs between which the kernels are computed. | |||
node_label : string | |||
node attribute used as label. | |||
edge_label : string | |||
@@ -564,7 +564,7 @@ def _wl_userkernel_do(Gn, node_label, edge_label, height, base_kernel): | |||
for node in G.nodes(data = True): | |||
node[1][node_label] = set_compressed[set_multisets[node[0]]] | |||
# calculate kernel with h iterations and add it to the final kernel | |||
# Compute kernel with h iterations and add it to the final kernel | |||
Kmatrix += base_kernel(Gn, node_label, edge_label) | |||
return Kmatrix |
@@ -125,12 +125,12 @@ class WeisfeilerLehman(GraphKernel): # @todo: total parallelization and sp, edge | |||
def __subtree_kernel_do(self, Gn): | |||
"""Calculate Weisfeiler-Lehman kernels between graphs. | |||
"""Compute Weisfeiler-Lehman kernels between graphs. | |||
Parameters | |||
---------- | |||
Gn : List of NetworkX graph | |||
List of graphs between which the kernels are calculated. | |||
List of graphs between which the kernels are computed. | |||
Return | |||
------ | |||
@@ -152,7 +152,7 @@ class WeisfeilerLehman(GraphKernel): # @todo: total parallelization and sp, edge | |||
# number of occurence of each label in G | |||
all_num_of_each_label.append(dict(Counter(labels_ori))) | |||
# calculate subtree kernel with the 0th iteration and add it to the final kernel. | |||
# Compute subtree kernel with the 0th iteration and add it to the final kernel. | |||
self.__compute_gram_matrix(gram_matrix, all_num_of_each_label, Gn) | |||
# iterate each height | |||
@@ -198,7 +198,7 @@ class WeisfeilerLehman(GraphKernel): # @todo: total parallelization and sp, edge | |||
# all_labels_ori.update(labels_comp) | |||
all_num_of_each_label.append(dict(Counter(labels_comp))) | |||
# calculate subtree kernel with h iterations and add it to the final kernel | |||
# Compute subtree kernel with h iterations and add it to the final kernel | |||
self.__compute_gram_matrix(gram_matrix, all_num_of_each_label, Gn) | |||
return gram_matrix | |||
@@ -244,12 +244,12 @@ class WeisfeilerLehman(GraphKernel): # @todo: total parallelization and sp, edge | |||
def _wl_spkernel_do(Gn, node_label, edge_label, height): | |||
"""Calculate Weisfeiler-Lehman shortest path kernels between graphs. | |||
"""Compute Weisfeiler-Lehman shortest path kernels between graphs. | |||
Parameters | |||
---------- | |||
Gn : List of NetworkX graph | |||
List of graphs between which the kernels are calculated. | |||
List of graphs between which the kernels are computed. | |||
node_label : string | |||
node attribute used as label. | |||
edge_label : string | |||
@@ -312,7 +312,7 @@ class WeisfeilerLehman(GraphKernel): # @todo: total parallelization and sp, edge | |||
for node in G.nodes(data = True): | |||
node[1][node_label] = set_compressed[set_multisets[node[0]]] | |||
# calculate subtree kernel with h iterations and add it to the final kernel | |||
# Compute subtree kernel with h iterations and add it to the final kernel | |||
for i in range(0, len(Gn)): | |||
for j in range(i, len(Gn)): | |||
for e1 in Gn[i].edges(data = True): | |||
@@ -326,12 +326,12 @@ class WeisfeilerLehman(GraphKernel): # @todo: total parallelization and sp, edge | |||
def _wl_edgekernel_do(Gn, node_label, edge_label, height): | |||
"""Calculate Weisfeiler-Lehman edge kernels between graphs. | |||
"""Compute Weisfeiler-Lehman edge kernels between graphs. | |||
Parameters | |||
---------- | |||
Gn : List of NetworkX graph | |||
List of graphs between which the kernels are calculated. | |||
List of graphs between which the kernels are computed. | |||
node_label : string | |||
node attribute used as label. | |||
edge_label : string | |||
@@ -390,7 +390,7 @@ class WeisfeilerLehman(GraphKernel): # @todo: total parallelization and sp, edge | |||
for node in G.nodes(data = True): | |||
node[1][node_label] = set_compressed[set_multisets[node[0]]] | |||
# calculate subtree kernel with h iterations and add it to the final kernel | |||
# Compute subtree kernel with h iterations and add it to the final kernel | |||
for i in range(0, len(Gn)): | |||
for j in range(i, len(Gn)): | |||
for e1 in Gn[i].edges(data = True): | |||
@@ -403,12 +403,12 @@ class WeisfeilerLehman(GraphKernel): # @todo: total parallelization and sp, edge | |||
def _wl_userkernel_do(Gn, node_label, edge_label, height, base_kernel): | |||
"""Calculate Weisfeiler-Lehman kernels based on user-defined kernel between graphs. | |||
"""Compute Weisfeiler-Lehman kernels based on user-defined kernel between graphs. | |||
Parameters | |||
---------- | |||
Gn : List of NetworkX graph | |||
List of graphs between which the kernels are calculated. | |||
List of graphs between which the kernels are computed. | |||
node_label : string | |||
node attribute used as label. | |||
edge_label : string | |||
@@ -463,7 +463,7 @@ class WeisfeilerLehman(GraphKernel): # @todo: total parallelization and sp, edge | |||
for node in G.nodes(data = True): | |||
node[1][node_label] = set_compressed[set_multisets[node[0]]] | |||
# calculate kernel with h iterations and add it to the final kernel | |||
# Compute kernel with h iterations and add it to the final kernel | |||
gram_matrix += base_kernel(Gn, node_label, edge_label) | |||
return gram_matrix | |||
@@ -63,4 +63,4 @@ def parallel_gm(func, Kmatrix, Gn, init_worker=None, glbv=None, | |||
len_itr = int(len(Gn) * (len(Gn) + 1) / 2) | |||
parallel_me(func, func_assign, Kmatrix, itr, len_itr=len_itr, | |||
init_worker=init_worker, glbv=glbv, method=method, n_jobs=n_jobs, | |||
chunksize=chunksize, itr_desc='calculating kernels', verbose=verbose) | |||
chunksize=chunksize, itr_desc='Computing kernels', verbose=verbose) |