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_letter_h.py 23 kB

5 years ago
5 years ago
5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. Created on Tue Jan 14 15:39:29 2020
  5. @author: ljia
  6. """
  7. import numpy as np
  8. import random
  9. import csv
  10. from shutil import copyfile
  11. import networkx as nx
  12. import matplotlib.pyplot as plt
  13. from gklearn.utils.graphfiles import loadDataset, loadGXL, saveGXL
  14. from gklearn.preimage.test_k_closest_graphs import median_on_k_closest_graphs, reform_attributes
  15. from gklearn.preimage.utils import get_same_item_indices, kernel_distance_matrix
  16. from gklearn.preimage.find_best_k import getRelations
  17. def xp_letter_h_LETTER2_cost():
  18. ds = {'dataset': 'cpp_ext/data/collections/Letter.xml',
  19. 'graph_dir': os.path.dirname(os.path.realpath(__file__)) + '/cpp_ext/data/datasets/Letter/HIGH/'} # node/edge symb
  20. Gn, y_all = loadDataset(ds['dataset'], extra_params=ds['graph_dir'])
  21. dis_mat, dis_max, dis_min, dis_mean = kernel_distance_matrix(Gn, None, None, Kmatrix=None, gkernel='structuralspkernel')
  22. for G in Gn:
  23. reform_attributes(G)
  24. # ds = {'name': 'Letter-high',
  25. # 'dataset': '../datasets/Letter-high/Letter-high_A.txt'} # node/edge symb
  26. # Gn, y_all = loadDataset(ds['dataset'])
  27. # Gn = Gn[0:50]
  28. gkernel = 'structuralspkernel'
  29. node_label = None
  30. edge_label = None
  31. ds_name = 'letter-h'
  32. dir_output = 'results/xp_letter_h/'
  33. save_results = True
  34. cost = 'LETTER2'
  35. repeats = 1
  36. # k_list = range(2, 11)
  37. k_list = [150]
  38. fit_method = 'k-graphs'
  39. # get indices by classes.
  40. y_idx = get_same_item_indices(y_all)
  41. if save_results:
  42. # create result files.
  43. fn_output_detail = 'results_detail.' + ds_name + '.' + gkernel + '.' + fit_method + '.csv'
  44. f_detail = open(dir_output + fn_output_detail, 'a')
  45. csv.writer(f_detail).writerow(['dataset', 'graph kernel', 'fit method', 'k',
  46. 'target', 'repeat', 'SOD SM', 'SOD GM', 'dis_k SM', 'dis_k GM',
  47. 'min dis_k gi', 'SOD SM -> GM', 'dis_k SM -> GM', 'dis_k gi -> SM',
  48. 'dis_k gi -> GM', 'median set'])
  49. f_detail.close()
  50. fn_output_summary = 'results_summary.' + ds_name + '.' + gkernel + '.' + fit_method + '.csv'
  51. f_summary = open(dir_output + fn_output_summary, 'a')
  52. csv.writer(f_summary).writerow(['dataset', 'graph kernel', 'fit method', 'k',
  53. 'target', 'SOD SM', 'SOD GM', 'dis_k SM', 'dis_k GM',
  54. 'min dis_k gi', 'SOD SM -> GM', 'dis_k SM -> GM', 'dis_k gi -> SM',
  55. 'dis_k gi -> GM', '# SOD SM -> GM', '# dis_k SM -> GM',
  56. '# dis_k gi -> SM', '# dis_k gi -> GM', 'repeats better SOD SM -> GM',
  57. 'repeats better dis_k SM -> GM', 'repeats better dis_k gi -> SM',
  58. 'repeats better dis_k gi -> GM'])
  59. f_summary.close()
  60. random.seed(1)
  61. rdn_seed_list = random.sample(range(0, repeats * 100), repeats)
  62. for k in k_list:
  63. print('\n--------- k =', k, '----------')
  64. sod_sm_mean_list = []
  65. sod_gm_mean_list = []
  66. dis_k_sm_mean_list = []
  67. dis_k_gm_mean_list = []
  68. dis_k_gi_min_mean_list = []
  69. # nb_sod_sm2gm = [0, 0, 0]
  70. # nb_dis_k_sm2gm = [0, 0, 0]
  71. # nb_dis_k_gi2sm = [0, 0, 0]
  72. # nb_dis_k_gi2gm = [0, 0, 0]
  73. # repeats_better_sod_sm2gm = []
  74. # repeats_better_dis_k_sm2gm = []
  75. # repeats_better_dis_k_gi2sm = []
  76. # repeats_better_dis_k_gi2gm = []
  77. for i, (y, values) in enumerate(y_idx.items()):
  78. print('\ny =', y)
  79. # y = 'F'
  80. # values = y_idx[y]
  81. # values = values[0:10]
  82. k = len(values)
  83. sod_sm_list = []
  84. sod_gm_list = []
  85. dis_k_sm_list = []
  86. dis_k_gm_list = []
  87. dis_k_gi_min_list = []
  88. nb_sod_sm2gm = [0, 0, 0]
  89. nb_dis_k_sm2gm = [0, 0, 0]
  90. nb_dis_k_gi2sm = [0, 0, 0]
  91. nb_dis_k_gi2gm = [0, 0, 0]
  92. repeats_better_sod_sm2gm = []
  93. repeats_better_dis_k_sm2gm = []
  94. repeats_better_dis_k_gi2sm = []
  95. repeats_better_dis_k_gi2gm = []
  96. for repeat in range(repeats):
  97. print('\nrepeat =', repeat)
  98. random.seed(rdn_seed_list[repeat])
  99. median_set_idx_idx = random.sample(range(0, len(values)), k)
  100. median_set_idx = [values[idx] for idx in median_set_idx_idx]
  101. print('median set: ', median_set_idx)
  102. Gn_median = [Gn[g] for g in values]
  103. sod_sm, sod_gm, dis_k_sm, dis_k_gm, dis_k_gi, dis_k_gi_min, idx_dis_k_gi_min \
  104. = median_on_k_closest_graphs(Gn_median, node_label, edge_label,
  105. gkernel, k, fit_method=fit_method, graph_dir=ds['graph_dir'],
  106. edit_costs=None, group_min=median_set_idx_idx,
  107. dataset='Letter', cost=cost, parallel=False)
  108. # write result detail.
  109. sod_sm2gm = getRelations(np.sign(sod_gm - sod_sm))
  110. dis_k_sm2gm = getRelations(np.sign(dis_k_gm - dis_k_sm))
  111. dis_k_gi2sm = getRelations(np.sign(dis_k_sm - dis_k_gi_min))
  112. dis_k_gi2gm = getRelations(np.sign(dis_k_gm - dis_k_gi_min))
  113. if save_results:
  114. f_detail = open(dir_output + fn_output_detail, 'a')
  115. csv.writer(f_detail).writerow([ds_name, gkernel, fit_method, k,
  116. y, repeat,
  117. sod_sm, sod_gm, dis_k_sm, dis_k_gm,
  118. dis_k_gi_min, sod_sm2gm, dis_k_sm2gm, dis_k_gi2sm,
  119. dis_k_gi2gm, median_set_idx])
  120. f_detail.close()
  121. # compute result summary.
  122. sod_sm_list.append(sod_sm)
  123. sod_gm_list.append(sod_gm)
  124. dis_k_sm_list.append(dis_k_sm)
  125. dis_k_gm_list.append(dis_k_gm)
  126. dis_k_gi_min_list.append(dis_k_gi_min)
  127. # # SOD SM -> GM
  128. if sod_sm > sod_gm:
  129. nb_sod_sm2gm[0] += 1
  130. repeats_better_sod_sm2gm.append(repeat)
  131. elif sod_sm == sod_gm:
  132. nb_sod_sm2gm[1] += 1
  133. elif sod_sm < sod_gm:
  134. nb_sod_sm2gm[2] += 1
  135. # # dis_k SM -> GM
  136. if dis_k_sm > dis_k_gm:
  137. nb_dis_k_sm2gm[0] += 1
  138. repeats_better_dis_k_sm2gm.append(repeat)
  139. elif dis_k_sm == dis_k_gm:
  140. nb_dis_k_sm2gm[1] += 1
  141. elif dis_k_sm < dis_k_gm:
  142. nb_dis_k_sm2gm[2] += 1
  143. # # dis_k gi -> SM
  144. if dis_k_gi_min > dis_k_sm:
  145. nb_dis_k_gi2sm[0] += 1
  146. repeats_better_dis_k_gi2sm.append(repeat)
  147. elif dis_k_gi_min == dis_k_sm:
  148. nb_dis_k_gi2sm[1] += 1
  149. elif dis_k_gi_min < dis_k_sm:
  150. nb_dis_k_gi2sm[2] += 1
  151. # # dis_k gi -> GM
  152. if dis_k_gi_min > dis_k_gm:
  153. nb_dis_k_gi2gm[0] += 1
  154. repeats_better_dis_k_gi2gm.append(repeat)
  155. elif dis_k_gi_min == dis_k_gm:
  156. nb_dis_k_gi2gm[1] += 1
  157. elif dis_k_gi_min < dis_k_gm:
  158. nb_dis_k_gi2gm[2] += 1
  159. # save median graphs.
  160. fname_sm = os.path.dirname(os.path.realpath(__file__)) + '/cpp_ext/output/tmp_ged/set_median.gxl'
  161. fn_pre_sm_new = dir_output + 'medians/set_median.' + fit_method \
  162. + '.k' + str(int(k)) + '.y' + y + '.repeat' + str(repeat)
  163. copyfile(fname_sm, fn_pre_sm_new + '.gxl')
  164. fname_gm = os.path.dirname(os.path.realpath(__file__)) + '/cpp_ext/output/tmp_ged/gen_median.gxl'
  165. fn_pre_gm_new = dir_output + 'medians/gen_median.' + fit_method \
  166. + '.k' + str(int(k)) + '.y' + y + '.repeat' + str(repeat)
  167. copyfile(fname_gm, fn_pre_gm_new + '.gxl')
  168. G_best_kernel = Gn_median[idx_dis_k_gi_min].copy()
  169. reform_attributes(G_best_kernel)
  170. fn_pre_g_best_kernel = dir_output + 'medians/g_best_kernel.' + fit_method \
  171. + '.k' + str(int(k)) + '.y' + y + '.repeat' + str(repeat)
  172. saveGXL(G_best_kernel, fn_pre_g_best_kernel + '.gxl', method='gedlib-letter')
  173. # plot median graphs.
  174. set_median = loadGXL(fn_pre_sm_new + '.gxl')
  175. gen_median = loadGXL(fn_pre_gm_new + '.gxl')
  176. draw_Letter_graph(set_median, fn_pre_sm_new)
  177. draw_Letter_graph(gen_median, fn_pre_gm_new)
  178. draw_Letter_graph(G_best_kernel, fn_pre_g_best_kernel)
  179. # write result summary for each letter.
  180. sod_sm_mean_list.append(np.mean(sod_sm_list))
  181. sod_gm_mean_list.append(np.mean(sod_gm_list))
  182. dis_k_sm_mean_list.append(np.mean(dis_k_sm_list))
  183. dis_k_gm_mean_list.append(np.mean(dis_k_gm_list))
  184. dis_k_gi_min_mean_list.append(np.mean(dis_k_gi_min_list))
  185. sod_sm2gm_mean = getRelations(np.sign(sod_gm_mean_list[-1] - sod_sm_mean_list[-1]))
  186. dis_k_sm2gm_mean = getRelations(np.sign(dis_k_gm_mean_list[-1] - dis_k_sm_mean_list[-1]))
  187. dis_k_gi2sm_mean = getRelations(np.sign(dis_k_sm_mean_list[-1] - dis_k_gi_min_mean_list[-1]))
  188. dis_k_gi2gm_mean = getRelations(np.sign(dis_k_gm_mean_list[-1] - dis_k_gi_min_mean_list[-1]))
  189. if save_results:
  190. f_summary = open(dir_output + fn_output_summary, 'a')
  191. csv.writer(f_summary).writerow([ds_name, gkernel, fit_method, k, y,
  192. sod_sm_mean_list[-1], sod_gm_mean_list[-1],
  193. dis_k_sm_mean_list[-1], dis_k_gm_mean_list[-1],
  194. dis_k_gi_min_mean_list[-1], sod_sm2gm_mean, dis_k_sm2gm_mean,
  195. dis_k_gi2sm_mean, dis_k_gi2gm_mean, nb_sod_sm2gm,
  196. nb_dis_k_sm2gm, nb_dis_k_gi2sm, nb_dis_k_gi2gm,
  197. repeats_better_sod_sm2gm, repeats_better_dis_k_sm2gm,
  198. repeats_better_dis_k_gi2sm, repeats_better_dis_k_gi2gm])
  199. f_summary.close()
  200. # write result summary for each letter.
  201. sod_sm_mean = np.mean(sod_sm_mean_list)
  202. sod_gm_mean = np.mean(sod_gm_mean_list)
  203. dis_k_sm_mean = np.mean(dis_k_sm_mean_list)
  204. dis_k_gm_mean = np.mean(dis_k_gm_mean_list)
  205. dis_k_gi_min_mean = np.mean(dis_k_gi_min_list)
  206. sod_sm2gm_mean = getRelations(np.sign(sod_gm_mean - sod_sm_mean))
  207. dis_k_sm2gm_mean = getRelations(np.sign(dis_k_gm_mean - dis_k_sm_mean))
  208. dis_k_gi2sm_mean = getRelations(np.sign(dis_k_sm_mean - dis_k_gi_min_mean))
  209. dis_k_gi2gm_mean = getRelations(np.sign(dis_k_gm_mean - dis_k_gi_min_mean))
  210. if save_results:
  211. f_summary = open(dir_output + fn_output_summary, 'a')
  212. csv.writer(f_summary).writerow([ds_name, gkernel, fit_method, k, 'all',
  213. sod_sm_mean, sod_gm_mean, dis_k_sm_mean, dis_k_gm_mean,
  214. dis_k_gi_min_mean, sod_sm2gm_mean, dis_k_sm2gm_mean,
  215. dis_k_gi2sm_mean, dis_k_gi2gm_mean])
  216. f_summary.close()
  217. print('\ncomplete.')
  218. def xp_letter_h():
  219. ds = {'dataset': 'cpp_ext/data/collections/Letter.xml',
  220. 'graph_dir': os.path.dirname(os.path.realpath(__file__)) + '/cpp_ext/data/datasets/Letter/HIGH/'} # node/edge symb
  221. Gn, y_all = loadDataset(ds['dataset'], extra_params=ds['graph_dir'])
  222. for G in Gn:
  223. reform_attributes(G)
  224. # ds = {'name': 'Letter-high',
  225. # 'dataset': '../datasets/Letter-high/Letter-high_A.txt'} # node/edge symb
  226. # Gn, y_all = loadDataset(ds['dataset'])
  227. # Gn = Gn[0:50]
  228. gkernel = 'structuralspkernel'
  229. node_label = None
  230. edge_label = None
  231. ds_name = 'letter-h'
  232. dir_output = 'results/xp_letter_h/'
  233. save_results = False
  234. repeats = 1
  235. # k_list = range(2, 11)
  236. k_list = [150]
  237. fit_method = 'k-graphs'
  238. # get indices by classes.
  239. y_idx = get_same_item_indices(y_all)
  240. if save_results:
  241. # create result files.
  242. fn_output_detail = 'results_detail.' + ds_name + '.' + gkernel + '.' + fit_method + '.csv'
  243. f_detail = open(dir_output + fn_output_detail, 'a')
  244. csv.writer(f_detail).writerow(['dataset', 'graph kernel', 'fit method', 'k',
  245. 'target', 'repeat', 'SOD SM', 'SOD GM', 'dis_k SM', 'dis_k GM',
  246. 'min dis_k gi', 'SOD SM -> GM', 'dis_k SM -> GM', 'dis_k gi -> SM',
  247. 'dis_k gi -> GM', 'median set'])
  248. f_detail.close()
  249. fn_output_summary = 'results_summary.' + ds_name + '.' + gkernel + '.' + fit_method + '.csv'
  250. f_summary = open(dir_output + fn_output_summary, 'a')
  251. csv.writer(f_summary).writerow(['dataset', 'graph kernel', 'fit method', 'k',
  252. 'target', 'SOD SM', 'SOD GM', 'dis_k SM', 'dis_k GM',
  253. 'min dis_k gi', 'SOD SM -> GM', 'dis_k SM -> GM', 'dis_k gi -> SM',
  254. 'dis_k gi -> GM', '# SOD SM -> GM', '# dis_k SM -> GM',
  255. '# dis_k gi -> SM', '# dis_k gi -> GM', 'repeats better SOD SM -> GM',
  256. 'repeats better dis_k SM -> GM', 'repeats better dis_k gi -> SM',
  257. 'repeats better dis_k gi -> GM'])
  258. f_summary.close()
  259. random.seed(1)
  260. rdn_seed_list = random.sample(range(0, repeats * 100), repeats)
  261. for k in k_list:
  262. print('\n--------- k =', k, '----------')
  263. sod_sm_mean_list = []
  264. sod_gm_mean_list = []
  265. dis_k_sm_mean_list = []
  266. dis_k_gm_mean_list = []
  267. dis_k_gi_min_mean_list = []
  268. # nb_sod_sm2gm = [0, 0, 0]
  269. # nb_dis_k_sm2gm = [0, 0, 0]
  270. # nb_dis_k_gi2sm = [0, 0, 0]
  271. # nb_dis_k_gi2gm = [0, 0, 0]
  272. # repeats_better_sod_sm2gm = []
  273. # repeats_better_dis_k_sm2gm = []
  274. # repeats_better_dis_k_gi2sm = []
  275. # repeats_better_dis_k_gi2gm = []
  276. for i, (y, values) in enumerate(y_idx.items()):
  277. print('\ny =', y)
  278. # y = 'N'
  279. # values = y_idx[y]
  280. # values = values[0:10]
  281. k = len(values)
  282. sod_sm_list = []
  283. sod_gm_list = []
  284. dis_k_sm_list = []
  285. dis_k_gm_list = []
  286. dis_k_gi_min_list = []
  287. nb_sod_sm2gm = [0, 0, 0]
  288. nb_dis_k_sm2gm = [0, 0, 0]
  289. nb_dis_k_gi2sm = [0, 0, 0]
  290. nb_dis_k_gi2gm = [0, 0, 0]
  291. repeats_better_sod_sm2gm = []
  292. repeats_better_dis_k_sm2gm = []
  293. repeats_better_dis_k_gi2sm = []
  294. repeats_better_dis_k_gi2gm = []
  295. for repeat in range(repeats):
  296. print('\nrepeat =', repeat)
  297. random.seed(rdn_seed_list[repeat])
  298. median_set_idx_idx = random.sample(range(0, len(values)), k)
  299. median_set_idx = [values[idx] for idx in median_set_idx_idx]
  300. print('median set: ', median_set_idx)
  301. Gn_median = [Gn[g] for g in values]
  302. sod_sm, sod_gm, dis_k_sm, dis_k_gm, dis_k_gi, dis_k_gi_min, idx_dis_k_gi_min \
  303. = median_on_k_closest_graphs(Gn_median, node_label, edge_label,
  304. gkernel, k, fit_method=fit_method, graph_dir=ds['graph_dir'],
  305. edit_costs=None, group_min=median_set_idx_idx,
  306. dataset='Letter', parallel=False)
  307. # write result detail.
  308. sod_sm2gm = getRelations(np.sign(sod_gm - sod_sm))
  309. dis_k_sm2gm = getRelations(np.sign(dis_k_gm - dis_k_sm))
  310. dis_k_gi2sm = getRelations(np.sign(dis_k_sm - dis_k_gi_min))
  311. dis_k_gi2gm = getRelations(np.sign(dis_k_gm - dis_k_gi_min))
  312. if save_results:
  313. f_detail = open(dir_output + fn_output_detail, 'a')
  314. csv.writer(f_detail).writerow([ds_name, gkernel, fit_method, k,
  315. y, repeat,
  316. sod_sm, sod_gm, dis_k_sm, dis_k_gm,
  317. dis_k_gi_min, sod_sm2gm, dis_k_sm2gm, dis_k_gi2sm,
  318. dis_k_gi2gm, median_set_idx])
  319. f_detail.close()
  320. # compute result summary.
  321. sod_sm_list.append(sod_sm)
  322. sod_gm_list.append(sod_gm)
  323. dis_k_sm_list.append(dis_k_sm)
  324. dis_k_gm_list.append(dis_k_gm)
  325. dis_k_gi_min_list.append(dis_k_gi_min)
  326. # # SOD SM -> GM
  327. if sod_sm > sod_gm:
  328. nb_sod_sm2gm[0] += 1
  329. repeats_better_sod_sm2gm.append(repeat)
  330. elif sod_sm == sod_gm:
  331. nb_sod_sm2gm[1] += 1
  332. elif sod_sm < sod_gm:
  333. nb_sod_sm2gm[2] += 1
  334. # # dis_k SM -> GM
  335. if dis_k_sm > dis_k_gm:
  336. nb_dis_k_sm2gm[0] += 1
  337. repeats_better_dis_k_sm2gm.append(repeat)
  338. elif dis_k_sm == dis_k_gm:
  339. nb_dis_k_sm2gm[1] += 1
  340. elif dis_k_sm < dis_k_gm:
  341. nb_dis_k_sm2gm[2] += 1
  342. # # dis_k gi -> SM
  343. if dis_k_gi_min > dis_k_sm:
  344. nb_dis_k_gi2sm[0] += 1
  345. repeats_better_dis_k_gi2sm.append(repeat)
  346. elif dis_k_gi_min == dis_k_sm:
  347. nb_dis_k_gi2sm[1] += 1
  348. elif dis_k_gi_min < dis_k_sm:
  349. nb_dis_k_gi2sm[2] += 1
  350. # # dis_k gi -> GM
  351. if dis_k_gi_min > dis_k_gm:
  352. nb_dis_k_gi2gm[0] += 1
  353. repeats_better_dis_k_gi2gm.append(repeat)
  354. elif dis_k_gi_min == dis_k_gm:
  355. nb_dis_k_gi2gm[1] += 1
  356. elif dis_k_gi_min < dis_k_gm:
  357. nb_dis_k_gi2gm[2] += 1
  358. # save median graphs.
  359. fname_sm = os.path.dirname(os.path.realpath(__file__)) + '/cpp_ext/output/tmp_ged/set_median.gxl'
  360. fn_pre_sm_new = dir_output + 'medians/set_median.' + fit_method \
  361. + '.k' + str(int(k)) + '.y' + y + '.repeat' + str(repeat)
  362. copyfile(fname_sm, fn_pre_sm_new + '.gxl')
  363. fname_gm = os.path.dirname(os.path.realpath(__file__)) + '/cpp_ext/output/tmp_ged/gen_median.gxl'
  364. fn_pre_gm_new = dir_output + 'medians/gen_median.' + fit_method \
  365. + '.k' + str(int(k)) + '.y' + y + '.repeat' + str(repeat)
  366. copyfile(fname_gm, fn_pre_gm_new + '.gxl')
  367. G_best_kernel = Gn_median[idx_dis_k_gi_min].copy()
  368. reform_attributes(G_best_kernel)
  369. fn_pre_g_best_kernel = dir_output + 'medians/g_best_kernel.' + fit_method \
  370. + '.k' + str(int(k)) + '.y' + y + '.repeat' + str(repeat)
  371. saveGXL(G_best_kernel, fn_pre_g_best_kernel + '.gxl', method='gedlib-letter')
  372. # plot median graphs.
  373. set_median = loadGXL(fn_pre_sm_new + '.gxl')
  374. gen_median = loadGXL(fn_pre_gm_new + '.gxl')
  375. draw_Letter_graph(set_median, fn_pre_sm_new)
  376. draw_Letter_graph(gen_median, fn_pre_gm_new)
  377. draw_Letter_graph(G_best_kernel, fn_pre_g_best_kernel)
  378. # write result summary for each letter.
  379. sod_sm_mean_list.append(np.mean(sod_sm_list))
  380. sod_gm_mean_list.append(np.mean(sod_gm_list))
  381. dis_k_sm_mean_list.append(np.mean(dis_k_sm_list))
  382. dis_k_gm_mean_list.append(np.mean(dis_k_gm_list))
  383. dis_k_gi_min_mean_list.append(np.mean(dis_k_gi_min_list))
  384. sod_sm2gm_mean = getRelations(np.sign(sod_gm_mean_list[-1] - sod_sm_mean_list[-1]))
  385. dis_k_sm2gm_mean = getRelations(np.sign(dis_k_gm_mean_list[-1] - dis_k_sm_mean_list[-1]))
  386. dis_k_gi2sm_mean = getRelations(np.sign(dis_k_sm_mean_list[-1] - dis_k_gi_min_mean_list[-1]))
  387. dis_k_gi2gm_mean = getRelations(np.sign(dis_k_gm_mean_list[-1] - dis_k_gi_min_mean_list[-1]))
  388. if save_results:
  389. f_summary = open(dir_output + fn_output_summary, 'a')
  390. csv.writer(f_summary).writerow([ds_name, gkernel, fit_method, k, y,
  391. sod_sm_mean_list[-1], sod_gm_mean_list[-1],
  392. dis_k_sm_mean_list[-1], dis_k_gm_mean_list[-1],
  393. dis_k_gi_min_mean_list[-1], sod_sm2gm_mean, dis_k_sm2gm_mean,
  394. dis_k_gi2sm_mean, dis_k_gi2gm_mean, nb_sod_sm2gm,
  395. nb_dis_k_sm2gm, nb_dis_k_gi2sm, nb_dis_k_gi2gm,
  396. repeats_better_sod_sm2gm, repeats_better_dis_k_sm2gm,
  397. repeats_better_dis_k_gi2sm, repeats_better_dis_k_gi2gm])
  398. f_summary.close()
  399. # write result summary for each letter.
  400. sod_sm_mean = np.mean(sod_sm_mean_list)
  401. sod_gm_mean = np.mean(sod_gm_mean_list)
  402. dis_k_sm_mean = np.mean(dis_k_sm_mean_list)
  403. dis_k_gm_mean = np.mean(dis_k_gm_mean_list)
  404. dis_k_gi_min_mean = np.mean(dis_k_gi_min_list)
  405. sod_sm2gm_mean = getRelations(np.sign(sod_gm_mean - sod_sm_mean))
  406. dis_k_sm2gm_mean = getRelations(np.sign(dis_k_gm_mean - dis_k_sm_mean))
  407. dis_k_gi2sm_mean = getRelations(np.sign(dis_k_sm_mean - dis_k_gi_min_mean))
  408. dis_k_gi2gm_mean = getRelations(np.sign(dis_k_gm_mean - dis_k_gi_min_mean))
  409. if save_results:
  410. f_summary = open(dir_output + fn_output_summary, 'a')
  411. csv.writer(f_summary).writerow([ds_name, gkernel, fit_method, k, 'all',
  412. sod_sm_mean, sod_gm_mean, dis_k_sm_mean, dis_k_gm_mean,
  413. dis_k_gi_min_mean, sod_sm2gm_mean, dis_k_sm2gm_mean,
  414. dis_k_gi2sm_mean, dis_k_gi2gm_mean])
  415. f_summary.close()
  416. print('\ncomplete.')
  417. #Dessin median courrant
  418. def draw_Letter_graph(graph, file_prefix):
  419. plt.figure()
  420. pos = {}
  421. for n in graph.nodes:
  422. pos[n] = np.array([float(graph.node[n]['x']),float(graph.node[n]['y'])])
  423. nx.draw_networkx(graph, pos)
  424. plt.savefig(file_prefix + '.eps', format='eps', dpi=300)
  425. # plt.show()
  426. plt.clf()
  427. if __name__ == "__main__":
  428. # xp_letter_h()
  429. xp_letter_h_LETTER2_cost()

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