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.py 2.5 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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 gklearn.utils import get_graph_kernel_by_name
  10. from gklearn.utils.kernels import deltakernel, gaussiankernel, kernelproduct
  11. import functools
  12. import os
  13. import pickle
  14. import sys
  15. def run_all(fcsp):
  16. save_dir = 'outputs/' + ('fscp' if fcsp == True else 'naive') + '/'
  17. os.makedirs(save_dir, exist_ok=True)
  18. from sklearn.model_selection import ParameterGrid
  19. Dataset_List = ['Alkane_unlabeled', 'Alkane', 'Acyclic', 'MAO_lite', 'MAO',
  20. 'PAH', 'MUTAG', 'Monoterpenoids', 'Letter-high',
  21. 'Letter-med', 'Letter-low',
  22. 'ENZYMES', 'AIDS_lite', 'AIDS', 'NCI1', 'NCI109', 'DD']
  23. Kernel_List = ['ShortestPath', 'StructuralSP']
  24. work_grid = ParameterGrid({'kernel': Kernel_List[0:], 'dataset': Dataset_List[2:3]})
  25. for work in list(work_grid):
  26. save_file_suffix = '.' + work['kernel'] + '.' + work['dataset']
  27. file_name = os.path.join(save_dir, 'run_time' + save_file_suffix + '.pkl')
  28. if not os.path.isfile(file_name):
  29. print()
  30. print((work['kernel'], work['dataset']))
  31. gram_matrix, run_time = run_work(work['kernel'], work['dataset'], fcsp)
  32. save_file_suffix = '.' + work['kernel'] + work['dataset']
  33. with open(file_name, 'wb') as f:
  34. pickle.dump(run_time, f)
  35. def run_work(kernel_name, ds_name, fcsp):
  36. dataset = Dataset(ds_name, verbose=True)
  37. mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel)
  38. node_kernels = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel}
  39. edge_kernels = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel}
  40. graph_kernel = get_graph_kernel_by_name(name=kernel_name,
  41. node_labels=dataset.node_labels,
  42. edge_labels=dataset.edge_labels,
  43. node_attrs=dataset.node_attrs,
  44. edge_attrs=dataset.edge_attrs,
  45. ds_infos=dataset.get_dataset_infos(keys=['directed']),
  46. fcsp=fcsp,
  47. compute_method='naive',
  48. node_kernels=node_kernels,
  49. edge_kernels=edge_kernels,
  50. )
  51. gram_matrix, run_time = graph_kernel.compute(dataset.graphs,
  52. parallel=None,
  53. normalize=True,
  54. verbose=2
  55. )
  56. return gram_matrix, run_time
  57. if __name__ == '__main__':
  58. if len(sys.argv) > 1:
  59. fcsp = True if sys.argv[1] == 'True' else False
  60. else:
  61. fcsp = True
  62. run_all(fcsp)

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