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 3.0 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. import logging
  16. def run_all(fcsp):
  17. save_dir = 'outputs/' + ('fscp' if fcsp == True else 'naive') + '/'
  18. os.makedirs(save_dir, exist_ok=True)
  19. from sklearn.model_selection import ParameterGrid
  20. Dataset_List = ['Alkane_unlabeled', 'Alkane', 'Acyclic', 'MAO_lite', 'MAO',
  21. 'PAH_unlabeled', 'PAH', 'MUTAG', 'Letter-high', 'Letter-med', 'Letter-low',
  22. 'ENZYMES', 'AIDS', 'NCI1', 'NCI109', 'DD',
  23. 'BZR', 'COX2', 'DHFR', 'PTC_FM', 'PTC_FR', 'PTC_MM', 'PTC_MR',
  24. 'Cuneiform', 'KKI', 'OHSU', 'Peking_1', 'SYNTHETICnew',
  25. 'Synthie', 'SYNTHETIC', 'Fingerprint', 'IMDB-BINARY',
  26. 'IMDB-MULTI', 'COIL-DEL', 'PROTEINS', 'PROTEINS_full',
  27. 'Mutagenicity', 'REDDIT-BINARY']
  28. Kernel_List = ['ShortestPath', 'StructuralSP']
  29. work_grid = ParameterGrid({'kernel': Kernel_List[:], 'dataset': Dataset_List[:]})
  30. for work in list(work_grid):
  31. save_file_suffix = '.' + work['kernel'] + '.' + work['dataset']
  32. file_name = os.path.join(save_dir, 'run_time' + save_file_suffix + '.pkl')
  33. if not os.path.isfile(file_name):
  34. print()
  35. print((work['kernel'], work['dataset']))
  36. try:
  37. gram_matrix, run_time = run_work(work['kernel'], work['dataset'], fcsp)
  38. except Exception as exp:
  39. print('An exception occured when running this experiment:')
  40. LOG_FILENAME = save_dir + 'error.txt'
  41. logging.basicConfig(filename=LOG_FILENAME, level=logging.DEBUG)
  42. logging.exception(save_file_suffix)
  43. print(repr(exp))
  44. save_file_suffix = '.' + work['kernel'] + work['dataset']
  45. with open(file_name, 'wb') as f:
  46. pickle.dump(run_time, f)
  47. def run_work(kernel_name, ds_name, fcsp):
  48. dataset = Dataset(ds_name, verbose=True)
  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 = get_graph_kernel_by_name(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. )
  63. gram_matrix, run_time = graph_kernel.compute(dataset.graphs,
  64. parallel=None,
  65. normalize=True,
  66. verbose=2
  67. )
  68. return gram_matrix, run_time
  69. if __name__ == '__main__':
  70. if len(sys.argv) > 1:
  71. fcsp = True if sys.argv[1] == 'True' else False
  72. else:
  73. fcsp = True
  74. run_all(fcsp)

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