Browse Source

Update the GED method, use new gedlibpy library.

v0.1
jajupmochi 5 years ago
parent
commit
8c03f1b049
9 changed files with 521 additions and 712 deletions
  1. +91
    -95
      preimage/iam.py
  2. +0
    -5
      preimage/librariesImport.py
  3. +0
    -5
      preimage/librariesImport2.py
  4. +352
    -534
      preimage/preimage_iam.py
  5. +1
    -1
      preimage/preimage_random.py
  6. +2
    -2
      preimage/run_gk_iam.py
  7. +0
    -26
      preimage/setup.py
  8. +61
    -34
      preimage/test.py
  9. +14
    -10
      preimage/test_random_mutag.py

+ 91
- 95
preimage/iam.py View File

@@ -12,23 +12,19 @@ import networkx as nx
from tqdm import tqdm from tqdm import tqdm


import sys import sys
#from Cython_GedLib_2 import librariesImport, script
import librariesImport, script
from gedlibpy import librariesImport, gedlibpy
sys.path.insert(0, "../") sys.path.insert(0, "../")
from pygraph.utils.graphfiles import saveDataset
from pygraph.utils.graphdataset import get_dataset_attributes from pygraph.utils.graphdataset import get_dataset_attributes
from pygraph.utils.utils import graph_isIdentical, get_node_labels, get_edge_labels from pygraph.utils.utils import graph_isIdentical, get_node_labels, get_edge_labels
#from pygraph.utils.utils import graph_deepcopy


def iam_moreGraphsAsInit_tryAllPossibleBestGraphs(Gn_median, Gn_candidate,
c_ei=3, c_er=3, c_es=1, ite_max=50, epsilon=0.001,
node_label='atom', edge_label='bond_type',
def iam_upgraded(Gn_median, Gn_candidate, c_ei=3, c_er=3, c_es=1, ite_max=50,
epsilon=0.001, node_label='atom', edge_label='bond_type',
connected=False, removeNodes=True, allBestInit=False, allBestNodes=False, connected=False, removeNodes=True, allBestInit=False, allBestNodes=False,
allBestEdges=False,
allBestEdges=False, allBestOutput=False,
params_ged={'ged_cost': 'CHEM_1', 'ged_method': 'IPFP', 'saveGXL': 'benoit'}): params_ged={'ged_cost': 'CHEM_1', 'ged_method': 'IPFP', 'saveGXL': 'benoit'}):
"""See my name, then you know what I do. """See my name, then you know what I do.
""" """
from tqdm import tqdm
# Gn_median = Gn_median[0:10] # Gn_median = Gn_median[0:10]
# Gn_median = [nx.convert_node_labels_to_integers(g) for g in Gn_median] # Gn_median = [nx.convert_node_labels_to_integers(g) for g in Gn_median]
if removeNodes: if removeNodes:
@@ -150,16 +146,6 @@ def iam_moreGraphsAsInit_tryAllPossibleBestGraphs(Gn_median, Gn_candidate,
h_ij0 += h_ij0_p h_ij0 += h_ij0_p
h_ij0_list.append(h_ij0) h_ij0_list.append(h_ij0)
label_list.append(label) label_list.append(label)
# # case when the edge is to be removed.
# h_ij0_remove = 0
# for idx, g in enumerate(Gn_median):
# pi_i = pi_p_forward[idx][nd1i]
# pi_j = pi_p_forward[idx][nd2i]
# if g.has_node(pi_i) and g.has_node(pi_j) and not
# g.has_edge(pi_i, pi_j):
# h_ij0_remove += 1
# h_ij0_list.append(h_ij0_remove)
# label_list.append(label_r)
# get the best labels. # get the best labels.
idx_max = np.argwhere(h_ij0_list == np.max(h_ij0_list)).flatten().tolist() idx_max = np.argwhere(h_ij0_list == np.max(h_ij0_list)).flatten().tolist()
@@ -370,7 +356,9 @@ def iam_moreGraphsAsInit_tryAllPossibleBestGraphs(Gn_median, Gn_candidate,
idx_list.append(idx) idx_list.append(idx)
return Gn_new, idx_list return Gn_new, idx_list


###########################################################################
# phase 1: initilize. # phase 1: initilize.
# compute set-median. # compute set-median.
dis_min = np.inf dis_min = np.inf
@@ -421,8 +409,6 @@ def iam_moreGraphsAsInit_tryAllPossibleBestGraphs(Gn_median, Gn_candidate,
# print(g.edges(data=True)) # print(g.edges(data=True))
# get the best median graphs # get the best median graphs
# dis_list, pi_forward_list = median_distance(G_list, Gn_median,
# **params_ged)
G_min_list, pi_forward_min_list, dis_min = best_median_graphs( G_min_list, pi_forward_min_list, dis_min = best_median_graphs(
G_list, pi_forward_list, dis_list) G_list, pi_forward_list, dis_list)
# for g in G_min_list: # for g in G_min_list:
@@ -430,9 +416,11 @@ def iam_moreGraphsAsInit_tryAllPossibleBestGraphs(Gn_median, Gn_candidate,
# plt.show() # plt.show()
# print(g.nodes(data=True)) # print(g.nodes(data=True))
# print(g.edges(data=True)) # print(g.edges(data=True))
# randomly choose one graph.
idx_rdm = random.randint(0, len(G_min_list) - 1)
G_min_list = [G_min_list[idx_rdm]]
if not allBestOutput:
# randomly choose one graph.
idx_rdm = random.randint(0, len(G_min_list) - 1)
G_min_list = [G_min_list[idx_rdm]]
return G_min_list, dis_min return G_min_list, dis_min


@@ -445,13 +433,91 @@ def iam_moreGraphsAsInit_tryAllPossibleBestGraphs(Gn_median, Gn_candidate,






###############################################################################
# Useful functions.


def GED(g1, g2, lib='gedlibpy', cost='CHEM_1', method='IPFP', saveGXL='benoit',
stabilizer='min'):
"""
Compute GED.
"""
if lib == 'gedlibpy':
def convertGraph(G):
"""Convert a graph to the proper NetworkX format that can be
recognized by library gedlibpy.
"""
G_new = nx.Graph()
for nd, attrs in G.nodes(data=True):
G_new.add_node(str(nd), chem=attrs['atom'])
for nd1, nd2, attrs in G.edges(data=True):
# G_new.add_edge(str(nd1), str(nd2), valence=attrs['bond_type'])
G_new.add_edge(str(nd1), str(nd2))
return G_new
gedlibpy.restart_env()
gedlibpy.add_nx_graph(convertGraph(g1), "")
gedlibpy.add_nx_graph(convertGraph(g2), "")


listID = gedlibpy.get_all_graph_ids()
gedlibpy.set_edit_cost(cost)
gedlibpy.init()
gedlibpy.set_method(method, "")
gedlibpy.init_method()

g = listID[0]
h = listID[1]
if stabilizer == None:
gedlibpy.run_method(g, h)
pi_forward = gedlibpy.get_forward_map(g, h)
pi_backward = gedlibpy.get_backward_map(g, h)
upper = gedlibpy.get_upper_bound(g, h)
lower = gedlibpy.get_lower_bound(g, h)
elif stabilizer == 'min':
upper = np.inf
for itr in range(50):
gedlibpy.run_method(g, h)
upper_tmp = gedlibpy.get_upper_bound(g, h)
if upper_tmp < upper:
upper = upper_tmp
pi_forward = gedlibpy.get_forward_map(g, h)
pi_backward = gedlibpy.get_backward_map(g, h)
lower = gedlibpy.get_lower_bound(g, h)
if upper == 0:
break
dis = upper
# make the map label correct (label remove map as np.inf)
nodes1 = [n for n in g1.nodes()]
nodes2 = [n for n in g2.nodes()]
nb1 = nx.number_of_nodes(g1)
nb2 = nx.number_of_nodes(g2)
pi_forward = [nodes2[pi] if pi < nb2 else np.inf for pi in pi_forward]
pi_backward = [nodes1[pi] if pi < nb1 else np.inf for pi in pi_backward]
return dis, pi_forward, pi_backward




def median_distance(Gn, Gn_median, measure='ged', verbose=False,
ged_cost='CHEM_1', ged_method='IPFP', saveGXL='benoit'):
dis_list = []
pi_forward_list = []
for idx, G in tqdm(enumerate(Gn), desc='computing median distances',
file=sys.stdout) if verbose else enumerate(Gn):
dis_sum = 0
pi_forward_list.append([])
for G_p in Gn_median:
dis_tmp, pi_tmp_forward, pi_tmp_backward = GED(G, G_p,
cost=ged_cost, method=ged_method, saveGXL=saveGXL)
pi_forward_list[idx].append(pi_tmp_forward)
dis_sum += dis_tmp
dis_list.append(dis_sum)
return dis_list, pi_forward_list




############################################################################### ###############################################################################
# Old implementations.
def iam(Gn, c_ei=3, c_er=3, c_es=1, node_label='atom', edge_label='bond_type', def iam(Gn, c_ei=3, c_er=3, c_es=1, node_label='atom', edge_label='bond_type',
connected=True): connected=True):
@@ -579,73 +645,6 @@ def iam(Gn, c_ei=3, c_er=3, c_es=1, node_label='atom', edge_label='bond_type',
return G return G



def GED(g1, g2, lib='gedlib', cost='CHEM_1', method='IPFP', saveGXL='benoit',
stabilizer='min'):
"""
Compute GED.
"""
if lib == 'gedlib':
# transform dataset to the 'xml' file as the GedLib required.
saveDataset([g1, g2], [None, None], group='xml', filename='ged_tmp/tmp',
xparams={'method': saveGXL})
# script.appel()
script.PyRestartEnv()
script.PyLoadGXLGraph('ged_tmp/', 'ged_tmp/tmp.xml')
listID = script.PyGetGraphIds()
script.PySetEditCost(cost) #("CHEM_1")
script.PyInitEnv()
script.PySetMethod(method, "")
script.PyInitMethod()
g = listID[0]
h = listID[1]
if stabilizer == None:
script.PyRunMethod(g, h)
pi_forward, pi_backward = script.PyGetAllMap(g, h)
upper = script.PyGetUpperBound(g, h)
lower = script.PyGetLowerBound(g, h)
elif stabilizer == 'min':
upper = np.inf
for itr in range(50):
script.PyRunMethod(g, h)
upper_tmp = script.PyGetUpperBound(g, h)
if upper_tmp < upper:
upper = upper_tmp
pi_forward, pi_backward = script.PyGetAllMap(g, h)
lower = script.PyGetLowerBound(g, h)
if upper == 0:
break
dis = upper
# make the map label correct (label remove map as np.inf)
nodes1 = [n for n in g1.nodes()]
nodes2 = [n for n in g2.nodes()]
nb1 = nx.number_of_nodes(g1)
nb2 = nx.number_of_nodes(g2)
pi_forward = [nodes2[pi] if pi < nb2 else np.inf for pi in pi_forward]
pi_backward = [nodes1[pi] if pi < nb1 else np.inf for pi in pi_backward]
return dis, pi_forward, pi_backward


def median_distance(Gn, Gn_median, measure='ged', verbose=False,
ged_cost='CHEM_1', ged_method='IPFP', saveGXL='benoit'):
dis_list = []
pi_forward_list = []
for idx, G in tqdm(enumerate(Gn), desc='computing median distances',
file=sys.stdout) if verbose else enumerate(Gn):
dis_sum = 0
pi_forward_list.append([])
for G_p in Gn_median:
dis_tmp, pi_tmp_forward, pi_tmp_backward = GED(G, G_p,
cost=ged_cost, method=ged_method, saveGXL=saveGXL)
pi_forward_list[idx].append(pi_tmp_forward)
dis_sum += dis_tmp
dis_list.append(dis_sum)
return dis_list, pi_forward_list


# --------------------------- These are tests --------------------------------# # --------------------------- These are tests --------------------------------#
def test_iam_with_more_graphs_as_init(Gn, G_candidate, c_ei=3, c_er=3, c_es=1, def test_iam_with_more_graphs_as_init(Gn, G_candidate, c_ei=3, c_er=3, c_es=1,
@@ -785,9 +784,6 @@ def test_iam_with_more_graphs_as_init(Gn, G_candidate, c_ei=3, c_er=3, c_es=1,


############################################################################### ###############################################################################





if __name__ == '__main__': if __name__ == '__main__':
from pygraph.utils.graphfiles import loadDataset from pygraph.utils.graphfiles import loadDataset
ds = {'name': 'MUTAG', 'dataset': '../datasets/MUTAG/MUTAG.mat', ds = {'name': 'MUTAG', 'dataset': '../datasets/MUTAG/MUTAG.mat',


+ 0
- 5
preimage/librariesImport.py View File

@@ -1,5 +0,0 @@
from ctypes import *
lib1 = cdll.LoadLibrary('lib/fann/libdoublefann.so')
lib2 = cdll.LoadLibrary('lib/libsvm.3.22/libsvm.so')
lib3 = cdll.LoadLibrary('lib/nomad/libnomad.so')
lib4 = cdll.LoadLibrary('lib/nomad/libsgtelib.so')

+ 0
- 5
preimage/librariesImport2.py View File

@@ -1,5 +0,0 @@
from ctypes import *
lib1 = cdll.LoadLibrary('Cython_GedLib_2/lib/fann/libdoublefann.so')
lib2 = cdll.LoadLibrary('Cython_GedLib_2/lib/libsvm.3.22/libsvm.so')
lib3 = cdll.LoadLibrary('Cython_GedLib_2/lib/nomad/libnomad.so')
lib4 = cdll.LoadLibrary('Cython_GedLib_2/lib/nomad/libsgtelib.so')

preimage/preimage_iam.py
File diff suppressed because it is too large
View File


preimage/preimage.py → preimage/preimage_random.py View File

@@ -57,7 +57,7 @@ def compute_kernel(Gn, graph_kernel, verbose):
return Kmatrix return Kmatrix




def random_preimage(Gn_init, Gn_median, alpha, idx_gi, Kmatrix, k, r_max, l, gkernel):
def preimage_random(Gn_init, Gn_median, alpha, idx_gi, Kmatrix, k, r_max, l, gkernel):
Gn_init = [nx.convert_node_labels_to_integers(g) for g in Gn_init] Gn_init = [nx.convert_node_labels_to_integers(g) for g in Gn_init]
# compute k nearest neighbors of phi in DN. # compute k nearest neighbors of phi in DN.

+ 2
- 2
preimage/run_gk_iam.py View File

@@ -402,7 +402,7 @@ def test_iam_letter_h():
def test_random_preimage_letter_h(): def test_random_preimage_letter_h():
from preimage import random_preimage, compute_kernel
from preimage_random import preimage_random, compute_kernel
ds = {'name': 'Letter-high', 'dataset': '../datasets/Letter-high/Letter-high_A.txt', ds = {'name': 'Letter-high', 'dataset': '../datasets/Letter-high/Letter-high_A.txt',
'extra_params': {}} # node nsymb 'extra_params': {}} # node nsymb
# ds = {'name': 'Letter-med', 'dataset': '../datasets/Letter-med/Letter-med_A.txt', # ds = {'name': 'Letter-med', 'dataset': '../datasets/Letter-med/Letter-med_A.txt',
@@ -443,7 +443,7 @@ def test_random_preimage_letter_h():
# for each alpha # for each alpha
for alpha in alpha_range: for alpha in alpha_range:
print('alpha =', alpha) print('alpha =', alpha)
dhat, ghat_list = random_preimage(Gn_let, Gn_let, [alpha] * len(Gn_let),
dhat, ghat_list = preimage_random(Gn_let, Gn_let, [alpha] * len(Gn_let),
range(len(Gn_let), len(Gn_mix)), km, range(len(Gn_let), len(Gn_mix)), km,
k, r_max, gkernel, c_ei=1.7, k, r_max, gkernel, c_ei=1.7,
c_er=1.7, c_es=1.7) c_er=1.7, c_es=1.7)


+ 0
- 26
preimage/setup.py View File

@@ -1,26 +0,0 @@
#from distutils.core import setup
from distutils.extension import Extension
#from Cython.Distutils import build_ext

from distutils.core import setup
from Cython.Build import cythonize

#setup(ext_modules=cythonize("script.pyx"))

extensions = [Extension("script",
sources=["script.pyx", "src/essai.cpp"],
include_dirs=["include","include/lsape", "include/Eigen", "include/nomad", "include/sgtelib", "include/libsvm.3.22", "include/fann", "include/boost_1_69_0"],
library_dirs=["lib/fann","lib/gedlib", "lib/libsvm.3.22","lib/nomad"],
libraries=["doublefann","sgtelib", "svm", "nomad"],
language="c++",
extra_compile_args=["-std=c++11"],
extra_link_args=["-std=c++11"])]

setup(ext_modules=cythonize(extensions))

#extensions = [Extension("script", sources=["script.pyx", "include/gedlib-master/src/env/ged_env.ipp"], include_dirs=["."], language="c++")]
#setup(name = "script", ext_modules = extensions, cmdclass = {'build_ext':build_ext},)


# Commande Bash : python setup.py build_ext --inplace

+ 61
- 34
preimage/test.py View File

@@ -1,57 +1,84 @@
#export LD_LIBRARY_PATH=.:/export/home/lambertn/Documents/Cython_GedLib_2/lib/fann/:/export/home/lambertn/Documents/Cython_GedLib_2/lib/libsvm.3.22:/export/home/lambertn/Documents/Cython_GedLib_2/lib/nomad
#export LD_LIBRARY_PATH=.:/export/home/lambertn/Documents/gedlibpy/lib/fann/:/export/home/lambertn/Documents/gedlibpy/lib/libsvm.3.22:/export/home/lambertn/Documents/gedlibpy/lib/nomad


#Pour que "import script" trouve les librairies qu'a besoin GedLib #Pour que "import script" trouve les librairies qu'a besoin GedLib
#Equivalent à définir la variable d'environnement LD_LIBRARY_PATH sur un bash #Equivalent à définir la variable d'environnement LD_LIBRARY_PATH sur un bash
#Permet de fonctionner sur Idle et autre sans définir à chaque fois la variable d'environnement
#os.environ ne fonctionne pas dans ce cas
import librariesImport, script
import gedlibpy.librariesImport
from gedlibpy import gedlibpy
import networkx as nx


#import script


#truc = script.computeEditDistanceOnGXlGraphs('include/gedlib-master/data/datasets/Mutagenicity/data/','collections/MUTA_10.xml',"CHEM_1", "BIPARTITE", "")
#print(truc)
#script.PyRestartEnv()
#script.appel()

def test() :
# script.appel()
script.PyRestartEnv()
print("Here is the Python function !")
def init() :
print("List of Edit Cost Options : ") print("List of Edit Cost Options : ")
for i in script.listOfEditCostOptions :
for i in gedlibpy.list_of_edit_cost_options :
print (i) print (i)
print("") print("")


print("List of Method Options : ") print("List of Method Options : ")
for j in script.listOfMethodOptions :
for j in gedlibpy.list_of_method_options :
print (j) print (j)
print("") print("")

print("List of Init Options : ")
for k in gedlibpy.list_of_init_options :
print (k)
print("")
script.PyLoadGXLGraph('include/gedlib-master/data/datasets/Mutagenicity/data/', 'collections/MUTA_10.xml')
listID = script.PyGetGraphIds()
def test():
afficheId = ""
for i in listID :
afficheId+=str(i) + " "
print("Number of graphs = " + str(len(listID)) + ", list of Ids = " + afficheId)
gedlibpy.load_GXL_graphs('include/gedlib-master/data/datasets/Mutagenicity/data/', 'collections/MUTA_10.xml')
listID = gedlibpy.get_all_graph_ids()
gedlibpy.set_edit_cost("CHEM_1")
gedlibpy.init()
gedlibpy.set_method("IPFP", "")
gedlibpy.init_method()
g = listID[0]
h = listID[1]
gedlibpy.run_method(g, h)
print("Node Map : ", gedlibpy.get_node_map(g,h))
print("Forward map : " , gedlibpy.get_forward_map(g, h), ", Backward map : ", gedlibpy.get_backward_map(g, h))
print("Assignment Matrix : ")
print(gedlibpy.get_assignment_matrix(g, h))
print ("Upper Bound = " + str(gedlibpy.get_upper_bound(g,h)) + ", Lower Bound = " + str(gedlibpy.get_lower_bound(g, h)) + ", Runtime = " + str(gedlibpy.get_runtime(g, h)))


script.PySetEditCost("CHEM_1")


script.PyInitEnv()
def convertGraph(G):
G_new = nx.Graph()
for nd, attrs in G.nodes(data=True):
G_new.add_node(str(nd), chem=attrs['atom'])
for nd1, nd2, attrs in G.edges(data=True):
G_new.add_edge(str(nd1), str(nd2), valence=attrs['bond_type'])
return G_new


script.PySetMethod("BIPARTITE", "")
script.PyInitMethod()


def testNxGrapĥ():
import sys
sys.path.insert(0, "../")
from pygraph.utils.graphfiles import loadDataset
ds = {'name': 'MUTAG', 'dataset': '../datasets/MUTAG/MUTAG_A.txt',
'extra_params': {}} # node/edge symb
Gn, y_all = loadDataset(ds['dataset'], extra_params=ds['extra_params'])
gedlibpy.restart_env()
for graph in Gn:
g_new = convertGraph(graph)
gedlibpy.add_nx_graph(g_new, "")
listID = gedlibpy.get_all_graph_ids()
gedlibpy.set_edit_cost("CHEM_1")
gedlibpy.init()
gedlibpy.set_method("IPFP", "")
gedlibpy.init_method()

print(listID)
g = listID[0] g = listID[0]
h = listID[1] h = listID[1]


script.PyRunMethod(g,h)
liste = script.PyGetAllMap(g,h)
print("Forward map : " ,liste[0], ", Backward map : ", liste[1])
print ("Upper Bound = " + str(script.PyGetUpperBound(g,h)) + ", Lower Bound = " + str(script.PyGetLowerBound(g,h)) + ", Runtime = " + str(script.PyGetRuntime(g,h)))
gedlibpy.run_method(g, h)


print("Node Map : ", gedlibpy.get_node_map(g, h))
print("Forward map : " , gedlibpy.get_forward_map(g, h), ", Backward map : ", gedlibpy.get_backward_map(g, h))
print ("Upper Bound = " + str(gedlibpy.get_upper_bound(g, h)) + ", Lower Bound = " + str(gedlibpy.get_lower_bound(g, h)) + ", Runtime = " + str(gedlibpy.get_runtime(g, h)))


test()
init()
#testNxGrapĥ()

+ 14
- 10
preimage/test_random_mutag.py View File

@@ -22,7 +22,7 @@ from pygraph.utils.graphfiles import loadDataset
# random pre-image paper.) # random pre-image paper.)


def test_preimage_mix_2combination_all_pairs(): def test_preimage_mix_2combination_all_pairs():
from gk_iam import preimage_iam_random_mix, compute_kernel
from preimage_iam import preimage_iam_random_mix, compute_kernel
from iam import median_distance from iam import median_distance
ds = {'name': 'MUTAG', 'dataset': '../datasets/MUTAG/MUTAG_A.txt', ds = {'name': 'MUTAG', 'dataset': '../datasets/MUTAG/MUTAG_A.txt',
'extra_params': {}} # node/edge symb 'extra_params': {}} # node/edge symb
@@ -37,6 +37,8 @@ def test_preimage_mix_2combination_all_pairs():
alpha_range = np.linspace(0.5, 0.5, 1) alpha_range = np.linspace(0.5, 0.5, 1)
k = 5 # k nearest neighbors k = 5 # k nearest neighbors
epsilon = 1e-6 epsilon = 1e-6
InitIAMWithAllDk = True
InitRandomWithAllDk = True
# parameters for GED function # parameters for GED function
ged_cost='CHEM_1' ged_cost='CHEM_1'
ged_method='IPFP' ged_method='IPFP'
@@ -127,7 +129,8 @@ def test_preimage_mix_2combination_all_pairs():
nb_updated_k_iam, nb_updated_k_random = \ nb_updated_k_iam, nb_updated_k_random = \
preimage_iam_random_mix(Gn, [g1, g2], preimage_iam_random_mix(Gn, [g1, g2],
[alpha, 1 - alpha], range(len(Gn), len(Gn) + 2), km, k, r_max, [alpha, 1 - alpha], range(len(Gn), len(Gn) + 2), km, k, r_max,
l_max, gkernel, epsilon=epsilon,
l_max, gkernel, epsilon=epsilon, InitIAMWithAllDk=InitIAMWithAllDk,
InitRandomWithAllDk=InitRandomWithAllDk,
params_iam={'c_ei': c_ei, 'c_er': c_er, 'c_es': c_es, params_iam={'c_ei': c_ei, 'c_er': c_er, 'c_es': c_es,
'ite_max': ite_max_iam, 'epsilon': epsilon_iam, 'ite_max': ite_max_iam, 'epsilon': epsilon_iam,
'removeNodes': removeNodes, 'connected': connected_iam}, 'removeNodes': removeNodes, 'connected': connected_iam},
@@ -194,7 +197,7 @@ def test_preimage_mix_2combination_all_pairs():


def test_gkiam_2combination_all_pairs(): def test_gkiam_2combination_all_pairs():
from gk_iam import gk_iam_nearest_multi, compute_kernel
from preimage_iam import preimage_iam, compute_kernel
from iam import median_distance from iam import median_distance
ds = {'name': 'MUTAG', 'dataset': '../datasets/MUTAG/MUTAG_A.txt', ds = {'name': 'MUTAG', 'dataset': '../datasets/MUTAG/MUTAG_A.txt',
'extra_params': {}} # node/edge symb 'extra_params': {}} # node/edge symb
@@ -206,8 +209,9 @@ def test_gkiam_2combination_all_pairs():
lmbda = 0.03 # termination probalility lmbda = 0.03 # termination probalility
r_max = 10 # iteration limit for pre-image. r_max = 10 # iteration limit for pre-image.
alpha_range = np.linspace(0.5, 0.5, 1) alpha_range = np.linspace(0.5, 0.5, 1)
k = 10 # k nearest neighbors
k = 5 # k nearest neighbors
epsilon = 1e-6 epsilon = 1e-6
InitIAMWithAllDk = False
# parameters for GED function # parameters for GED function
ged_cost='CHEM_1' ged_cost='CHEM_1'
ged_method='IPFP' ged_method='IPFP'
@@ -292,9 +296,9 @@ def test_gkiam_2combination_all_pairs():
print('alpha =', alpha) print('alpha =', alpha)
time0 = time.time() time0 = time.time()
dhat, ghat_list, sod_ks, nb_updated, nb_updated_k = \ dhat, ghat_list, sod_ks, nb_updated, nb_updated_k = \
gk_iam_nearest_multi(Gn, [g1, g2],
preimage_iam(Gn, [g1, g2],
[alpha, 1 - alpha], range(len(Gn), len(Gn) + 2), km, k, r_max, [alpha, 1 - alpha], range(len(Gn), len(Gn) + 2), km, k, r_max,
gkernel, epsilon=epsilon,
gkernel, epsilon=epsilon, InitIAMWithAllDk=InitIAMWithAllDk,
params_iam={'c_ei': c_ei, 'c_er': c_er, 'c_es': c_es, params_iam={'c_ei': c_ei, 'c_er': c_er, 'c_es': c_es,
'ite_max': ite_max_iam, 'epsilon': epsilon_iam, 'ite_max': ite_max_iam, 'epsilon': epsilon_iam,
'removeNodes': removeNodes, 'connected': connected_iam}, 'removeNodes': removeNodes, 'connected': connected_iam},
@@ -463,7 +467,7 @@ def test_gkiam_2combination():
def test_random_preimage_2combination(): def test_random_preimage_2combination():
# from gk_iam import compute_kernel # from gk_iam import compute_kernel
from preimage import random_preimage
from preimage_random import preimage_random
ds = {'name': 'MUTAG', 'dataset': '../datasets/MUTAG/MUTAG_A.txt', ds = {'name': 'MUTAG', 'dataset': '../datasets/MUTAG/MUTAG_A.txt',
'extra_params': {}} # node/edge symb 'extra_params': {}} # node/edge symb
Gn, y_all = loadDataset(ds['dataset'], extra_params=ds['extra_params']) Gn, y_all = loadDataset(ds['dataset'], extra_params=ds['extra_params'])
@@ -535,7 +539,7 @@ def test_random_preimage_2combination():
print('\n-------------------------------------------------------\n') print('\n-------------------------------------------------------\n')
print('alpha =', alpha) print('alpha =', alpha)
time0 = time.time() time0 = time.time()
dhat, ghat, nb_updated = random_preimage(Gn, [g1, g2], [alpha, 1 - alpha],
dhat, ghat, nb_updated = preimage_random(Gn, [g1, g2], [alpha, 1 - alpha],
range(len(Gn), len(Gn) + 2), km, range(len(Gn), len(Gn) + 2), km,
k, r_max, l, gkernel) k, r_max, l, gkernel)
time_total = time.time() - time0 + time_km time_total = time.time() - time0 + time_km
@@ -610,5 +614,5 @@ if __name__ == '__main__':
# random pre-image paper.) # random pre-image paper.)
# test_random_preimage_2combination() # test_random_preimage_2combination()
# test_gkiam_2combination() # test_gkiam_2combination()
test_gkiam_2combination_all_pairs()
# test_preimage_mix_2combination_all_pairs()
# test_gkiam_2combination_all_pairs()
test_preimage_mix_2combination_all_pairs()

Loading…
Cancel
Save