diff --git a/lang/zh/gklearn/kernels/random_walk.py b/lang/zh/gklearn/kernels/random_walk.py new file mode 100644 index 0000000..f2d0961 --- /dev/null +++ b/lang/zh/gklearn/kernels/random_walk.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Wed Aug 19 16:55:17 2020 + +@author: ljia + +@references: + + [1] S Vichy N Vishwanathan, Nicol N Schraudolph, Risi Kondor, and Karsten M Borgwardt. Graph kernels. Journal of Machine Learning Research, 11(Apr):1201–1242, 2010. +""" + +import sys +from tqdm import tqdm +import numpy as np +import networkx as nx +from gklearn.utils import SpecialLabel +from gklearn.utils.parallel import parallel_gm, parallel_me +from gklearn.utils.utils import direct_product_graph +from gklearn.kernels import GraphKernel + + +class RandomWalk(GraphKernel): + + + def __init__(self, **kwargs): + GraphKernel.__init__(self) + self._compute_method = kwargs.get('compute_method', None) + self._weight = kwargs.get('weight', 1) + self._p = kwargs.get('p', None) + self._q = kwargs.get('q', None) + self._edge_weight = kwargs.get('edge_weight', None) + self._ds_infos = kwargs.get('ds_infos', {}) + + self._compute_method = self.__compute_method.lower() + + + def _compute_gm_series(self): + pass + + + def _compute_gm_imap_unordered(self): + pass + + + def _compute_kernel_list_series(self, g1, g_list): + pass + + + def _compute_kernel_list_imap_unordered(self, g1, g_list): + pass + + + def _compute_single_kernel_series(self, g1, g2): + pass + + + def _check_graphs(self, Gn): + # remove graphs with no edges, as no walk can be found in their structures, + # so the weight matrix between such a graph and itself might be zero. + for g in Gn: + if nx.number_of_edges(g) == 0: + raise Exception('Graphs must contain edges to construct weight matrices.') + + + def _check_edge_weight(self, G0, verbose): + eweight = None + if self._edge_weight == None: + if verbose >= 2: + print('\n None edge weight is specified. Set all weight to 1.\n') + else: + try: + some_weight = list(nx.get_edge_attributes(G0, self._edge_weight).values())[0] + if isinstance(some_weight, float) or isinstance(some_weight, int): + eweight = self._edge_weight + else: + if verbose >= 2: + print('\n Edge weight with name %s is not float or integer. Set all weight to 1.\n' % self._edge_weight) + except: + if verbose >= 2: + print('\n Edge weight with name "%s" is not found in the edge attributes. Set all weight to 1.\n' % self._edge_weight) + + self._edge_weight = eweight + + + def _add_dummy_labels(self, Gn): + if len(self.__node_labels) == 0 or (len(self.__node_labels) == 1 and self.__node_labels[0] == SpecialLabel.DUMMY): + for i in range(len(Gn)): + nx.set_node_attributes(Gn[i], '0', SpecialLabel.DUMMY) + self.__node_labels = [SpecialLabel.DUMMY] + if len(self.__edge_labels) == 0 or (len(self.__edge_labels) == 1 and self.__edge_labels[0] == SpecialLabel.DUMMY): + for i in range(len(Gn)): + nx.set_edge_attributes(Gn[i], '0', SpecialLabel.DUMMY) + self.__edge_labels = [SpecialLabel.DUMMY] \ No newline at end of file