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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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. from gklearn.experiments import DATASET_ROOT
  12. import functools
  13. import os
  14. import pickle
  15. import sys
  16. import logging
  17. # def run_all(fcsp):
  18. # from sklearn.model_selection import ParameterGrid
  19. # Dataset_List = ['Alkane_unlabeled', 'Alkane', 'Acyclic', 'MAO_lite', 'MAO',
  20. # 'PAH_unlabeled', 'PAH', 'MUTAG', 'Monoterpens',
  21. # '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. # task_grid = ParameterGrid({'kernel': Kernel_List[:], 'dataset': Dataset_List[:]})
  30. # for task in list(task_grid):
  31. # save_file_suffix = '.' + task['kernel'] + '.' + task['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((task['kernel'], task['dataset']))
  36. # try:
  37. # gram_matrix, run_time = compute(task['kernel'], task['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('\n--------------' + save_file_suffix + '------------------')
  43. # print(repr(exp))
  44. # else:
  45. # save_file_suffix = '.' + task['kernel'] + task['dataset']
  46. # with open(file_name, 'wb') as f:
  47. # pickle.dump(run_time, f)
  48. def run_task(kernel_name, ds_name, fcsp):
  49. save_file_suffix = '.' + kernel_name + '.' + ds_name + '.' + str(fcsp)
  50. file_name = os.path.join(save_dir, 'run_time' + save_file_suffix + '.pkl')
  51. if not os.path.isfile(file_name):
  52. print()
  53. print((kernel_name, ds_name, str(fcsp)))
  54. try:
  55. gram_matrix, run_time = compute(kernel_name, ds_name, fcsp)
  56. except Exception as exp:
  57. print('An exception occured when running this experiment:')
  58. LOG_FILENAME = os.path.join(save_dir, 'error' + save_file_suffix + '.txt')
  59. logging.basicConfig(filename=LOG_FILENAME, level=logging.DEBUG)
  60. logging.exception('\n--------------' + save_file_suffix + '------------------')
  61. print(repr(exp))
  62. else:
  63. with open(file_name, 'wb') as f:
  64. pickle.dump(run_time, f)
  65. def compute(kernel_name, ds_name, fcsp):
  66. dataset = Dataset(ds_name, root=DATASET_ROOT, verbose=True)
  67. if kernel_name == 'ShortestPath':
  68. dataset.trim_dataset(edge_required=True)
  69. mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel)
  70. node_kernels = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel}
  71. edge_kernels = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel}
  72. graph_kernel = get_graph_kernel_by_name(name=kernel_name,
  73. node_labels=dataset.node_labels,
  74. edge_labels=dataset.edge_labels,
  75. node_attrs=dataset.node_attrs,
  76. edge_attrs=dataset.edge_attrs,
  77. ds_infos=dataset.get_dataset_infos(keys=['directed']),
  78. fcsp=fcsp,
  79. compute_method='naive',
  80. node_kernels=node_kernels,
  81. edge_kernels=edge_kernels,
  82. )
  83. gram_matrix, run_time = graph_kernel.compute(dataset.graphs,
  84. parallel=None,
  85. normalize=True,
  86. verbose=2
  87. )
  88. return gram_matrix, run_time
  89. if __name__ == '__main__':
  90. if len(sys.argv) > 1:
  91. kernel_name = sys.argv[1]
  92. ds_name = sys.argv[2]
  93. fcsp = True if sys.argv[3] == 'True' else False
  94. else:
  95. kernel_name = 'ShortestPath'
  96. ds_name = 'Acyclic'
  97. fcsp = True
  98. save_dir = 'outputs/'
  99. os.makedirs(save_dir, exist_ok=True)
  100. run_task(kernel_name, ds_name, fcsp)

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