def evaluateDynamic_changed_LinkPrediction_v2(graph, embedding, rounds, edges_add, edges_rm, n_sample_nodes=None, no_python=False, is_undirected=True, sampling_scheme="u_rand"): nodes = [] for e in edges_add[0]: nodes.append(e[0]) nodes.append(e[1]) # for e in edges_rm[0]: # nodes.append(e[0]) # nodes.append(e[1]) nodes = list(np.unique(nodes)) # pdb.set_trace() test_digraph, node_dict = graph_util.sample_graph_nodes(graph, nodes) estimated_adj = embedding.predict_next_adj(node_l) predicted_edge_list = evaluation_util.getEdgeListFromAdjMtx( estimated_adj, is_undirected=is_undirected, edge_pairs=None) MAP = metrics.computeMAP(predicted_edge_list, test_digraph, node_dict, edges_rm) node_edges_rm = [] for i in range(len(edges_rm[0])): node_edges_rm.append([]) for st, ed in edges_rm[0]: node_edges_rm[node_dict[st]].append((node_dict[st], node_dict[ed], 1)) node_edges_rm = [ node_edges_rm[i] for i in xrange(len(node_edges_rm)) if len(node_edges_rm[i]) > 0 ] # pdb.set_trace() prec_curv, _ = metrics.computePrecisionCurve(predicted_edge_list, test_digraph, node_edges_rm) # pdb.set_trace() return (MAP, prec_curv)
graphs.append( nx.read_gpickle('./test_data/academic/pickle/' + str(i))) G_cen = nx.degree_centrality( graphs[29]) # graph 29 in academia has highest number of edges G_cen = sorted(G_cen.items(), key=operator.itemgetter(1), reverse=True) node_l = [] i = 0 while i < sample: node_l.append(G_cen[i][0]) i += 1 # pdb.set_trace() # node_l = np.random.choice(range(graphs[29].number_of_nodes()), 5000, replace=False) # print(node_l) for i in range(length): graphs[i] = graph_util.sample_graph_nodes(graphs[i], node_l) # pdb.set_trace() graphs = graphs[-args.timelength:] datafile = dataprep_util.prep_input_TIMERS(graphs, args.timelength, args.testDataType) embedding = TIMERS(K=dim_emb, Theta=theta, datafile=datafile, length=args.timelength, nodemigration=args.nodemigration, resultdir=args.resultdir, datatype=args.testDataType) outdir_tmp = './output' if not os.path.exists(outdir_tmp):
def evaluateDynamic_changed_LinkPrediction_v2(graph, embedding, rounds, edges_add, edges_rm, n_sample_nodes=None, no_python=False, is_undirected=True, sampling_scheme="u_rand"): """Function to evaluate dynamic changed link prediction Attributes: graph (Object): Networkx Graph Object embedding (object): Algorithm for learning graph embedding. edges_add (list): list of edges to be added. edges_rm (list): list of edges to be removed. n_sampled_nodes (int): List of sampled nodes. train_ratio_init (float): sample to be used for training and testing. rounds (int): Number of times to run the experiment m_summ (str): summary to be used to save the result. is_undirected (bool): Flag to denote if the graph is directed. sampling_scheme(str): sampling scheme for selecting the nodes. Returns: ndarray: Mean Average precision """ nodes = [] for e in edges_add[0]: nodes.append(e[0]) nodes.append(e[1]) # for e in edges_rm[0]: # nodes.append(e[0]) # nodes.append(e[1]) nodes = list(np.unique(nodes)) # pdb.set_trace() test_digraph, node_dict = graph_util.sample_graph_nodes(graph, nodes) estimated_adj = embedding.predict_next_adj(node_l) predicted_edge_list = evaluation_util.getEdgeListFromAdjMtx( estimated_adj, is_undirected=is_undirected, edge_pairs=None) MAP = metrics.computeMAP(predicted_edge_list, test_digraph, node_dict, edges_rm) node_edges_rm = [] for i in range(len(edges_rm[0])): node_edges_rm.append([]) for st, ed in edges_rm[0]: node_edges_rm[node_dict[st]].append((node_dict[st], node_dict[ed], 1)) node_edges_rm = [ node_edges_rm[i] for i in xrange(len(node_edges_rm)) if len(node_edges_rm[i]) > 0 ] # pdb.set_trace() prec_curv, _ = metrics.computePrecisionCurve(predicted_edge_list, test_digraph, node_edges_rm) # pdb.set_trace() return (MAP, prec_curv)