diff --git a/eval_mixed_model.py b/eval_mixed_model.py index 0e170e5463ed71f6da725eb9c6fc9452cdac7026..22c8b7bc689d5c3f6a29296350e1212448646ee3 100644 --- a/eval_mixed_model.py +++ b/eval_mixed_model.py @@ -1,35 +1,55 @@ # coding = utf-8 import argparse +import time + +import pandas as pd + from lib.random import mixed_model_spat_sbm from lib.erosion_model import eval_erosion_model from joblib import Parallel,delayed +import networkx as nx +import glob +from tqdm import tqdm + +from lib.utils import load_edgelist parser = argparse.ArgumentParser() -parser.add_argument("nb_nodes",type=int) -parser.add_argument("nb_edges",type=int) -parser.add_argument("nb_com",type=int) -parser.add_argument("alpha",type=float) -parser.add_argument("nb_iterations",type=int) -parser.add_argument('-f', '--features', help='Feature(s) used in the model training', type=str) +parser.add_argument("graph_dir") +parser.add_argument("output_filename") +parser.add_argument("-f", "--format", default="gml", choices=["gexf", "gml", "txt"]) +parser.add_argument("-t","--train-frac",default=0.9,type=float) +parser.add_argument("-n","--nb-iteration",default=1,type=int) parser.add_argument("-v","--verbose",action="store_true") -parser.add_argument("-t","--timeout",default=30,type=int) -args= parser.parse_args() -# COMMAND LINE ARGS VALUES -GRAPH_NODE_NB = args.nb_nodes -GRAPH_EDGE_NB = args.nb_edges -ALPHA = args.alpha -NB_COM = args.nb_com -NB_ITERATION = args.nb_iterations -VERBOSE = args.verbose -FEATURES = set(args.features.split(",")) -TIMEOUT = 10#args.timeout +args = parser.parse_args() +fns = sorted(glob.glob(args.graph_dir + "/*." + args.format)) + +NB_ITERATION = args.nb_iteration +data = [] +def evaluate(fn): + if args.format == "txt": + G = load_edgelist(path=fn) + elif args.format == "gml": + G = nx.read_gml(fn) + else: + G = nx.read_gexf(fn) + G = nx.convert_node_labels_to_integers(G) + auc_sbm,auc_spat,auc_our_model = eval_erosion_model(G,NB_ITERATION) + nb_edges = G.size() + nb_nodes = len(G) + nb_com = G.graph["nb_com"] + alpha = G.graph["alpha"] + return [nb_nodes,nb_edges,nb_com,alpha,fn,auc_sbm,auc_spat,auc_our_model] -G = mixed_model_spat_sbm(GRAPH_NODE_NB,GRAPH_EDGE_NB,NB_COM,alpha=ALPHA) +deb = time.time() +data = Parallel(n_jobs=4,backend="multiprocessing")(delayed(evaluate)(fn) for fn in tqdm(fns)) +#data =[evaluate(fn) for fn in tqdm(fns)] +print("eval took",time.time()-deb) -print(eval_erosion_model(G,NB_ITERATION)) +df = pd.DataFrame(data,columns="nb_nodes nb_edges nb_com alpha fn auc_sbm auc_spat auc_our_model".split()) +df.to_csv(args.output_filename,sep="\t") diff --git a/lib/link_prediction_eval.py b/lib/link_prediction_eval.py index 30a8abf1cabfa88df223ddaea7f9675c4ce80ec5..5535a9c2b8a94bd9e4e9316239c472a7b5db3420 100644 --- a/lib/link_prediction_eval.py +++ b/lib/link_prediction_eval.py @@ -15,8 +15,9 @@ def get_auc_heuristics(G,timeout=60): try: auc_spatial = nee.evaluate_baseline(method="spatial_link_prediction",timeout=timeout).test_scores.auroc() auc_sbm = nee.evaluate_baseline(method="stochastic_block_model",timeout=timeout).test_scores.auroc() - except: + except Exception as e: print("Could not compute AUC ! ") + print(e) return auc_sbm,auc_spatial diff --git a/run_eval_mixed_model.sh b/run_eval_mixed_model.sh deleted file mode 100755 index a927bb537b2714dce83db628167b76870e7dcb97..0000000000000000000000000000000000000000 --- a/run_eval_mixed_model.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -for nb_iteration in 2 3 4 5 -do - for feats in "it_probs" "it_probs,pos" "it_probs,centrality" "it_probs,centrality,pos" - do - for alpha in 0 0.2 0.5 0.7 1 - do - for nbcom in 2 3 4 5 - do - echo "alpha= "$alpha", nb_com= "$nbcom", conf= "$conf", nb_iteration= "$nb_iteration - python eval_mixed_model.py 100 200 $nbcom $alpha $nb_iteration -f $feats - python eval_mixed_model.py 300 600 $nbcom $alpha $nb_iteration -f $feats - done - done - done -done \ No newline at end of file