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.6 kB

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

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