You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

utils.py 4.1 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. Created on Tue Sep 22 11:33:28 2020
  5. @author: ljia
  6. """
  7. Graph_Kernel_List = ['PathUpToH', 'WLSubtree', 'SylvesterEquation', 'Marginalized', 'ShortestPath', 'Treelet', 'ConjugateGradient', 'FixedPoint', 'SpectralDecomposition', 'StructuralSP', 'CommonWalk']
  8. # Graph_Kernel_List = ['CommonWalk', 'Marginalized', 'SylvesterEquation', 'ConjugateGradient', 'FixedPoint', 'SpectralDecomposition', 'ShortestPath', 'StructuralSP', 'PathUpToH', 'Treelet', 'WLSubtree']
  9. def compute_graph_kernel(graphs, kernel_name):
  10. import multiprocessing
  11. if kernel_name == 'CommonWalk':
  12. from gklearn.kernels.commonWalkKernel import commonwalkkernel
  13. estimator = commonwalkkernel
  14. params = {'compute_method': 'geo', 'weight': 0.1}
  15. elif kernel_name == 'Marginalized':
  16. from gklearn.kernels.marginalizedKernel import marginalizedkernel
  17. estimator = marginalizedkernel
  18. params = {'p_quit': 0.5, 'n_iteration': 5, 'remove_totters': False}
  19. elif kernel_name == 'SylvesterEquation':
  20. from gklearn.kernels.randomWalkKernel import randomwalkkernel
  21. estimator = randomwalkkernel
  22. params = {'compute_method': 'sylvester', 'weight': 0.1}
  23. elif kernel_name == 'ConjugateGradient':
  24. from gklearn.kernels.randomWalkKernel import randomwalkkernel
  25. estimator = randomwalkkernel
  26. from gklearn.utils.kernels import deltakernel, gaussiankernel, kernelproduct
  27. import functools
  28. mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel)
  29. sub_kernel = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel}
  30. params = {'compute_method': 'conjugate', 'weight': 0.1, 'node_kernels': sub_kernel, 'edge_kernels': sub_kernel}
  31. elif kernel_name == 'FixedPoint':
  32. from gklearn.kernels.randomWalkKernel import randomwalkkernel
  33. estimator = randomwalkkernel
  34. from gklearn.utils.kernels import deltakernel, gaussiankernel, kernelproduct
  35. import functools
  36. mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel)
  37. sub_kernel = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel}
  38. params = {'compute_method': 'fp', 'weight': 1e-3, 'node_kernels': sub_kernel, 'edge_kernels': sub_kernel}
  39. elif kernel_name == 'SpectralDecomposition':
  40. from gklearn.kernels.randomWalkKernel import randomwalkkernel
  41. estimator = randomwalkkernel
  42. params = {'compute_method': 'spectral', 'sub_kernel': 'geo', 'weight': 0.1}
  43. elif kernel_name == 'ShortestPath':
  44. from gklearn.kernels.spKernel import spkernel
  45. estimator = spkernel
  46. from gklearn.utils.kernels import deltakernel, gaussiankernel, kernelproduct
  47. import functools
  48. mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel)
  49. sub_kernel = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel}
  50. params = {'node_kernels': sub_kernel}
  51. elif kernel_name == 'StructuralSP':
  52. from gklearn.kernels.structuralspKernel import structuralspkernel
  53. estimator = structuralspkernel
  54. from gklearn.utils.kernels import deltakernel, gaussiankernel, kernelproduct
  55. import functools
  56. mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel)
  57. sub_kernel = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel}
  58. params = {'node_kernels': sub_kernel, 'edge_kernels': sub_kernel}
  59. elif kernel_name == 'PathUpToH':
  60. from gklearn.kernels.untilHPathKernel import untilhpathkernel
  61. estimator = untilhpathkernel
  62. params = {'depth': 5, 'k_func': 'MinMax', 'compute_method': 'trie'}
  63. elif kernel_name == 'Treelet':
  64. from gklearn.kernels.treeletKernel import treeletkernel
  65. estimator = treeletkernel
  66. from gklearn.utils.kernels import polynomialkernel
  67. import functools
  68. sub_kernel = functools.partial(polynomialkernel, d=4, c=1e+8)
  69. params = {'sub_kernel': sub_kernel}
  70. elif kernel_name == 'WLSubtree':
  71. from gklearn.kernels.weisfeilerLehmanKernel import weisfeilerlehmankernel
  72. estimator = weisfeilerlehmankernel
  73. params = {'base_kernel': 'subtree', 'height': 5}
  74. params['n_jobs'] = multiprocessing.cpu_count()
  75. params['verbose'] = True
  76. results = estimator(graphs, **params)
  77. return results[0], results[1]

A Python package for graph kernels, graph edit distances and graph pre-image problem.