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.

xp_1nn.py 3.6 kB

5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. Created on Mon May 11 14:15:11 2020
  5. @author: ljia
  6. """
  7. import functools
  8. import multiprocessing
  9. import os
  10. import sys
  11. import logging
  12. from gklearn.utils.kernels import deltakernel, gaussiankernel, kernelproduct
  13. from gklearn.preimage import kernel_knn_cv
  14. dir_root = '../results/xp_1nn.init1.no_triangle_rule.allow_zeros/'
  15. num_random = 10
  16. initial_solutions = 1
  17. triangle_rule = False
  18. allow_zeros = True
  19. update_order = False
  20. test_sizes = [0.9, 0.7] # , 0.5, 0.3, 0.1]
  21. def xp_knn_1_1():
  22. for test_size in test_sizes:
  23. ds_name = 'Letter-high'
  24. knn_options = {'n_neighbors': 1,
  25. 'n_splits': 30,
  26. 'test_size': test_size,
  27. 'verbose': True}
  28. mpg_options = {'fit_method': 'k-graphs',
  29. 'init_ecc': [0.675, 0.675, 0.75, 0.425, 0.425],
  30. 'ds_name': ds_name,
  31. 'parallel': True, # False
  32. 'time_limit_in_sec': 0,
  33. 'max_itrs': 100,
  34. 'max_itrs_without_update': 3,
  35. 'epsilon_residual': 0.01,
  36. 'epsilon_ec': 0.1,
  37. 'allow_zeros': allow_zeros,
  38. 'triangle_rule': triangle_rule,
  39. 'verbose': 1}
  40. mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel)
  41. sub_kernels = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel}
  42. kernel_options = {'name': 'StructuralSP',
  43. 'edge_weight': None,
  44. 'node_kernels': sub_kernels,
  45. 'edge_kernels': sub_kernels,
  46. 'compute_method': 'naive',
  47. 'parallel': 'imap_unordered',
  48. # 'parallel': None,
  49. 'n_jobs': multiprocessing.cpu_count(),
  50. 'normalize': True,
  51. 'verbose': 0}
  52. ged_options = {'method': 'IPFP',
  53. 'initialization_method': 'RANDOM', # 'NODE'
  54. 'initial_solutions': initial_solutions, # 1
  55. 'edit_cost': 'LETTER2',
  56. 'attr_distance': 'euclidean',
  57. 'ratio_runs_from_initial_solutions': 1,
  58. 'threads': multiprocessing.cpu_count(),
  59. 'init_option': 'EAGER_WITHOUT_SHUFFLED_COPIES'}
  60. mge_options = {'init_type': 'MEDOID',
  61. 'random_inits': 10,
  62. 'time_limit': 0,
  63. 'verbose': 1,
  64. 'update_order': update_order,
  65. 'randomness': 'REAL',
  66. 'refine': False}
  67. save_results = True
  68. dir_save = dir_root + ds_name + '.' + kernel_options['name'] + '/' + ('update_order/' if update_order else '')
  69. if not os.path.exists(dir_save):
  70. os.makedirs(dir_save)
  71. file_output = open(dir_save + 'output.txt', 'a')
  72. # sys.stdout = file_output
  73. # print settings.
  74. print('parameters:')
  75. print('dataset name:', ds_name)
  76. print('mpg_options:', mpg_options)
  77. print('kernel_options:', kernel_options)
  78. print('ged_options:', ged_options)
  79. print('mge_options:', mge_options)
  80. print('save_results:', save_results)
  81. for train_examples in ['k-graphs', 'expert', 'random', 'best-dataset', 'trainset']:
  82. # for train_examples in ['expert']:
  83. print('\n-------------------------------------')
  84. print('train examples used:', train_examples, '\n')
  85. mpg_options['fit_method'] = train_examples
  86. # try:
  87. kernel_knn_cv(ds_name, train_examples, knn_options, mpg_options, kernel_options, ged_options, mge_options, save_results=save_results, load_gm='auto', dir_save=dir_save, irrelevant_labels=None, edge_required=False, cut_range=None)
  88. # except Exception as exp:
  89. # print('An exception occured when running this experiment:')
  90. # LOG_FILENAME = dir_save + 'error.txt'
  91. # logging.basicConfig(filename=LOG_FILENAME, level=logging.DEBUG)
  92. # logging.exception('')
  93. # print(repr(exp))
  94. if __name__ == '__main__':
  95. xp_knn_1_1()

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