|
@@ -6,6 +6,8 @@ Created on Tue Sep 22 11:33:28 2020 |
|
|
@author: ljia |
|
|
@author: ljia |
|
|
""" |
|
|
""" |
|
|
import multiprocessing |
|
|
import multiprocessing |
|
|
|
|
|
import numpy as np |
|
|
|
|
|
from gklearn.utils import model_selection_for_precomputed_kernel |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Graph_Kernel_List = ['PathUpToH', 'WLSubtree', 'SylvesterEquation', 'Marginalized', 'ShortestPath', 'Treelet', 'ConjugateGradient', 'FixedPoint', 'SpectralDecomposition', 'StructuralSP', 'CommonWalk'] |
|
|
Graph_Kernel_List = ['PathUpToH', 'WLSubtree', 'SylvesterEquation', 'Marginalized', 'ShortestPath', 'Treelet', 'ConjugateGradient', 'FixedPoint', 'SpectralDecomposition', 'StructuralSP', 'CommonWalk'] |
|
@@ -109,4 +111,123 @@ def compute_graph_kernel(graphs, kernel_name, n_jobs=multiprocessing.cpu_count() |
|
|
params['verbose'] = True |
|
|
params['verbose'] = True |
|
|
results = estimator(graphs, **params) |
|
|
results = estimator(graphs, **params) |
|
|
|
|
|
|
|
|
|
|
|
return results[0], results[1] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def cross_validate(graphs, targets, kernel_name, output_dir='outputs/', ds_name='synthesized', n_jobs=multiprocessing.cpu_count()): |
|
|
|
|
|
|
|
|
|
|
|
param_grid = None |
|
|
|
|
|
|
|
|
|
|
|
if kernel_name == 'CommonWalk': |
|
|
|
|
|
from gklearn.kernels.commonWalkKernel import commonwalkkernel |
|
|
|
|
|
estimator = commonwalkkernel |
|
|
|
|
|
param_grid_precomputed = [{'compute_method': ['geo'], |
|
|
|
|
|
'weight': np.linspace(0.01, 0.15, 15)}] |
|
|
|
|
|
|
|
|
|
|
|
elif kernel_name == 'Marginalized': |
|
|
|
|
|
from gklearn.kernels.marginalizedKernel import marginalizedkernel |
|
|
|
|
|
estimator = marginalizedkernel |
|
|
|
|
|
param_grid_precomputed = {'p_quit': np.linspace(0.1, 0.9, 9), |
|
|
|
|
|
'n_iteration': np.linspace(1, 19, 7), |
|
|
|
|
|
'remove_totters': [False]} |
|
|
|
|
|
|
|
|
|
|
|
elif kernel_name == 'SylvesterEquation': |
|
|
|
|
|
from gklearn.kernels.randomWalkKernel import randomwalkkernel |
|
|
|
|
|
estimator = randomwalkkernel |
|
|
|
|
|
param_grid_precomputed = {'compute_method': ['sylvester'], |
|
|
|
|
|
# 'weight': np.linspace(0.01, 0.10, 10)} |
|
|
|
|
|
'weight': np.logspace(-1, -10, num=10, base=10)} |
|
|
|
|
|
|
|
|
|
|
|
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} |
|
|
|
|
|
param_grid_precomputed = {'compute_method': ['conjugate'], |
|
|
|
|
|
'node_kernels': [sub_kernel], 'edge_kernels': [sub_kernel], |
|
|
|
|
|
'weight': np.logspace(-1, -10, num=10, base=10)} |
|
|
|
|
|
|
|
|
|
|
|
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} |
|
|
|
|
|
param_grid_precomputed = {'compute_method': ['fp'], |
|
|
|
|
|
'node_kernels': [sub_kernel], 'edge_kernels': [sub_kernel], |
|
|
|
|
|
'weight': np.logspace(-3, -10, num=8, base=10)} |
|
|
|
|
|
|
|
|
|
|
|
elif kernel_name == 'SpectralDecomposition': |
|
|
|
|
|
from gklearn.kernels.randomWalkKernel import randomwalkkernel |
|
|
|
|
|
estimator = randomwalkkernel |
|
|
|
|
|
param_grid_precomputed = {'compute_method': ['spectral'], |
|
|
|
|
|
'weight': np.logspace(-1, -10, num=10, base=10), |
|
|
|
|
|
'sub_kernel': ['geo', 'exp']} |
|
|
|
|
|
|
|
|
|
|
|
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} |
|
|
|
|
|
param_grid_precomputed = {'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} |
|
|
|
|
|
param_grid_precomputed = {'node_kernels': [sub_kernel], 'edge_kernels': [sub_kernel], |
|
|
|
|
|
'compute_method': ['naive']} |
|
|
|
|
|
|
|
|
|
|
|
elif kernel_name == 'PathUpToH': |
|
|
|
|
|
from gklearn.kernels.untilHPathKernel import untilhpathkernel |
|
|
|
|
|
estimator = untilhpathkernel |
|
|
|
|
|
param_grid_precomputed = {'depth': np.linspace(1, 10, 10), # [2], |
|
|
|
|
|
'k_func': ['MinMax', 'tanimoto'], # ['MinMax'], # |
|
|
|
|
|
'compute_method': ['trie']} # ['MinMax']} |
|
|
|
|
|
|
|
|
|
|
|
elif kernel_name == 'Treelet': |
|
|
|
|
|
from gklearn.kernels.treeletKernel import treeletkernel |
|
|
|
|
|
estimator = treeletkernel |
|
|
|
|
|
from gklearn.utils.kernels import polynomialkernel |
|
|
|
|
|
import functools |
|
|
|
|
|
gkernels = [functools.partial(gaussiankernel, gamma=1 / ga) |
|
|
|
|
|
# for ga in np.linspace(1, 10, 10)] |
|
|
|
|
|
for ga in np.logspace(0, 10, num=11, base=10)] |
|
|
|
|
|
pkernels = [functools.partial(polynomialkernel, d=d, c=c) for d in range(1, 11) |
|
|
|
|
|
for c in np.logspace(0, 10, num=11, base=10)] |
|
|
|
|
|
param_grid_precomputed = {'sub_kernel': pkernels + gkernels} |
|
|
|
|
|
|
|
|
|
|
|
elif kernel_name == 'WLSubtree': |
|
|
|
|
|
from gklearn.kernels.weisfeilerLehmanKernel import weisfeilerlehmankernel |
|
|
|
|
|
estimator = weisfeilerlehmankernel |
|
|
|
|
|
param_grid_precomputed = {'base_kernel': ['subtree'], |
|
|
|
|
|
'height': np.linspace(0, 10, 11)} |
|
|
|
|
|
param_grid = {'C': np.logspace(-10, 4, num=29, base=10)} |
|
|
|
|
|
|
|
|
|
|
|
if param_grid is None: |
|
|
|
|
|
param_grid = {'C': np.logspace(-10, 10, num=41, base=10)} |
|
|
|
|
|
|
|
|
|
|
|
results = model_selection_for_precomputed_kernel( |
|
|
|
|
|
graphs, |
|
|
|
|
|
estimator, |
|
|
|
|
|
param_grid_precomputed, |
|
|
|
|
|
param_grid, |
|
|
|
|
|
'classification', |
|
|
|
|
|
NUM_TRIALS=28, |
|
|
|
|
|
datafile_y=targets, |
|
|
|
|
|
extra_params=None, |
|
|
|
|
|
ds_name=ds_name, |
|
|
|
|
|
output_dir=output_dir, |
|
|
|
|
|
n_jobs=n_jobs, |
|
|
|
|
|
read_gm_from_file=False, |
|
|
|
|
|
verbose=True) |
|
|
|
|
|
|
|
|
return results[0], results[1] |
|
|
return results[0], results[1] |