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.

compare_fcsp_space.py 2.9 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. Created on Wed Dec 2 17:41:54 2020
  5. @author: ljia
  6. This script compares the results with and without FCSP.
  7. """
  8. from gklearn.dataset import Dataset
  9. from shortest_path import SPSpace
  10. from structural_sp import SSPSpace
  11. from gklearn.utils.kernels import deltakernel, gaussiankernel, kernelproduct
  12. from gklearn.experiments import DATASET_ROOT
  13. import functools
  14. import os
  15. import pickle
  16. import sys
  17. import logging
  18. def run_task(kernel_name, ds_name, fcsp):
  19. save_file_suffix = '.' + kernel_name + '.' + ds_name + '.' + str(fcsp)
  20. file_name = os.path.join(save_dir, 'space' + save_file_suffix + '.pkl')
  21. # Return if the task is already completed.
  22. if os.path.isfile(file_name):
  23. with open(file_name, 'rb') as f:
  24. data = pickle.load(f)
  25. if data['completed']:
  26. return
  27. print()
  28. print((kernel_name, ds_name, str(fcsp)))
  29. try:
  30. gram_matrix, run_time = compute(kernel_name, ds_name, fcsp, file_name)
  31. except Exception as exp:
  32. print('An exception occured when running this experiment:')
  33. LOG_FILENAME = os.path.join(save_dir, 'error.space' + save_file_suffix + '.txt')
  34. logging.basicConfig(filename=LOG_FILENAME, level=logging.DEBUG)
  35. logging.exception('\n--------------' + save_file_suffix + '------------------')
  36. print(repr(exp))
  37. # else:
  38. # with open(file_name, 'wb') as f:
  39. # pickle.dump(run_time, f)
  40. def compute(kernel_name, ds_name, fcsp, file_name):
  41. dataset = Dataset(ds_name, root=DATASET_ROOT, verbose=True)
  42. if kernel_name == 'ShortestPath':
  43. dataset.trim_dataset(edge_required=True)
  44. # dataset.cut_graphs(range(0, 10))
  45. kernel_class = SPSpace
  46. else:
  47. # dataset.cut_graphs(range(0, 10))
  48. kernel_class = SSPSpace
  49. mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel)
  50. node_kernels = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel}
  51. edge_kernels = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel}
  52. graph_kernel = kernel_class(name=kernel_name,
  53. node_labels=dataset.node_labels,
  54. edge_labels=dataset.edge_labels,
  55. node_attrs=dataset.node_attrs,
  56. edge_attrs=dataset.edge_attrs,
  57. ds_infos=dataset.get_dataset_infos(keys=['directed']),
  58. fcsp=fcsp,
  59. compute_method='naive',
  60. node_kernels=node_kernels,
  61. edge_kernels=edge_kernels,
  62. file_name=file_name
  63. )
  64. gram_matrix, run_time = graph_kernel.compute(dataset.graphs,
  65. parallel=None,
  66. normalize=False,
  67. verbose=2
  68. )
  69. return gram_matrix, run_time
  70. if __name__ == '__main__':
  71. if len(sys.argv) > 1:
  72. kernel_name = sys.argv[1]
  73. ds_name = sys.argv[2]
  74. fcsp = True if sys.argv[3] == 'True' else False
  75. else:
  76. kernel_name = 'StructuralSP'
  77. ds_name = 'Fingerprint'
  78. fcsp = True
  79. save_dir = 'outputs/'
  80. os.makedirs(save_dir, exist_ok=True)
  81. run_task(kernel_name, ds_name, fcsp)

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