diff --git a/gklearn/experiments/papers/PRL_2020/synthesized_graphs_N.py b/gklearn/experiments/papers/PRL_2020/synthesized_graphs_N.py index ee0da19..37762d6 100644 --- a/gklearn/experiments/papers/PRL_2020/synthesized_graphs_N.py +++ b/gklearn/experiments/papers/PRL_2020/synthesized_graphs_N.py @@ -5,8 +5,8 @@ Created on Mon Sep 21 10:34:26 2020 @author: ljia """ -Graph_Kernel_List = ['PathUpToH', 'WLSubtree', 'SylvesterEquation', 'Marginalized', 'ShortestPath', 'Treelet', 'ConjugateGradient', 'FixedPoint', 'SpectralDecomposition', 'CommonWalk'] -# Graph_Kernel_List = ['CommonWalk', 'Marginalized', 'SylvesterEquation', 'ConjugateGradient', 'FixedPoint', 'SpectralDecomposition', 'ShortestPath', 'StructuralSP', 'PathUpToH', 'Treelet', 'WLSubtree'] +from utils import Graph_Kernel_List, compute_graph_kernel + def generate_graphs(): from gklearn.utils.graph_synthesizer import GraphSynthesizer @@ -15,90 +15,6 @@ def generate_graphs(): return graphs -def compute_graph_kernel(graphs, kernel_name): - import multiprocessing - - if kernel_name == 'CommonWalk': - from gklearn.kernels.commonWalkKernel import commonwalkkernel - estimator = commonwalkkernel - params = {'compute_method': 'geo', 'weight': 0.1} - - elif kernel_name == 'Marginalized': - from gklearn.kernels.marginalizedKernel import marginalizedkernel - estimator = marginalizedkernel - params = {'p_quit': 0.5, 'n_iteration': 5, 'remove_totters': False} - - elif kernel_name == 'SylvesterEquation': - from gklearn.kernels.randomWalkKernel import randomwalkkernel - estimator = randomwalkkernel - params = {'compute_method': 'sylvester', 'weight': 0.1} - - elif kernel_name == 'ConjugateGradient': - from gklearn.kernels.randomWalkKernel import randomwalkkernel - estimator = randomwalkkernel - from gklearn.utils.kernels import deltakernel, gaussiankernel, kernelproduct - import functools - mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel) - sub_kernel = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel} - params = {'compute_method': 'conjugate', 'weight': 0.1, 'node_kernels': sub_kernel, 'edge_kernels': sub_kernel} - - elif kernel_name == 'FixedPoint': - from gklearn.kernels.randomWalkKernel import randomwalkkernel - estimator = randomwalkkernel - from gklearn.utils.kernels import deltakernel, gaussiankernel, kernelproduct - import functools - mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel) - sub_kernel = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel} - params = {'compute_method': 'fp', 'weight': 1e-3, 'node_kernels': sub_kernel, 'edge_kernels': sub_kernel} - - elif kernel_name == 'SpectralDecomposition': - from gklearn.kernels.randomWalkKernel import randomwalkkernel - estimator = randomwalkkernel - params = {'compute_method': 'spectral', 'sub_kernel': 'geo', 'weight': 0.1} - - elif kernel_name == 'ShortestPath': - from gklearn.kernels.spKernel import spkernel - estimator = spkernel - from gklearn.utils.kernels import deltakernel, gaussiankernel, kernelproduct - import functools - mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel) - sub_kernel = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel} - params = {'node_kernels': sub_kernel} - - elif kernel_name == 'StructuralSP': - from gklearn.kernels.structuralspKernel import structuralspkernel - estimator = structuralspkernel - from gklearn.utils.kernels import deltakernel, gaussiankernel, kernelproduct - import functools - mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel) - sub_kernel = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel} - params = {'node_kernels': sub_kernel, 'edge_kernels': sub_kernel} - - elif kernel_name == 'PathUpToH': - from gklearn.kernels.untilHPathKernel import untilhpathkernel - estimator = untilhpathkernel - params = {'depth': 5, 'k_func': 'MinMax', 'compute_method': 'trie'} - - elif kernel_name == 'Treelet': - from gklearn.kernels.treeletKernel import treeletkernel - estimator = treeletkernel - from gklearn.utils.kernels import polynomialkernel - import functools - sub_kernel = functools.partial(polynomialkernel, d=4, c=1e+8) - params = {'sub_kernel': sub_kernel} - - elif kernel_name == 'WLSubtree': - from gklearn.kernels.weisfeilerLehmanKernel import weisfeilerlehmankernel - estimator = weisfeilerlehmankernel - params = {'base_kernel': 'subtree', 'height': 5} - - params['n_jobs'] = multiprocessing.cpu_count() - params['verbose'] = True - results = estimator(graphs, **params) - - return results[0], results[1] - - def xp_synthesied_graphs_dataset_size(): # Generate graphs. diff --git a/gklearn/experiments/papers/PRL_2020/synthesized_graphs_degrees.py b/gklearn/experiments/papers/PRL_2020/synthesized_graphs_degrees.py new file mode 100644 index 0000000..d6e5d8b --- /dev/null +++ b/gklearn/experiments/papers/PRL_2020/synthesized_graphs_degrees.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Mon Sep 21 10:34:26 2020 + +@author: ljia +""" +from utils import Graph_Kernel_List, compute_graph_kernel + + +def generate_graphs(degree): + from gklearn.utils.graph_synthesizer import GraphSynthesizer + gsyzer = GraphSynthesizer() + graphs = gsyzer.unified_graphs(num_graphs=100, num_nodes=20, num_edges=int(10*degree), num_node_labels=0, num_edge_labels=0, seed=None, directed=False) + return graphs + + +def xp_synthesied_graphs_degrees(): + + # Run and save. + import pickle + import os + save_dir = 'outputs/synthesized_graphs_degrees/' + if not os.path.exists(save_dir): + os.makedirs(save_dir) + + run_times = {} + + for kernel_name in Graph_Kernel_List: + print() + print('Kernel:', kernel_name) + + run_times[kernel_name] = [] + for degree in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]: + print() + print('Degree:', degree) + + # Generate graphs. + graphs = generate_graphs(degree) + + # Compute Gram matrix. + gram_matrix, run_time = compute_graph_kernel(graphs, kernel_name) + run_times[kernel_name].append(run_time) + + pickle.dump(run_times, open(save_dir + 'run_time.' + kernel_name + '.' + str(degree) + '.pkl', 'wb')) + + # Save all. + pickle.dump(run_times, open(save_dir + 'run_times.pkl', 'wb')) + + return + + +if __name__ == '__main__': + xp_synthesied_graphs_degrees()