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)
Example #2
0
                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)