Exemple #1
0
    def compute_features(self):

        # graph clique number
        self.add_feature(
            "graph_clique_number",
            lambda graph: clique.graph_clique_number(graph),
            "The clique number of a graph is the size of the largest clique in the graph",
            InterpretabilityScore(3),
        )

        # number of maximal cliques
        self.add_feature(
            "num_max_cliques",
            lambda graph: clique.graph_number_of_cliques(graph),
            "The number of maximal cliques in the graph",
            InterpretabilityScore(3),
        )

        n_cliques = lambda graph: len([
            u for u in list(clique.enumerate_all_cliques(graph)) if len(u) > 1
        ])
        self.add_feature(
            "num_cliques",
            n_cliques,
            "The number of cliques in the graph",
            InterpretabilityScore(3),
        )

        clique_sizes = lambda graph: [
            len(u) for u in list(clique.enumerate_all_cliques(graph))
            if len(u) > 1
        ]
        self.add_feature(
            "clique_sizes",
            clique_sizes,
            "the distribution of clique sizes",
            InterpretabilityScore(3),
            statistics="centrality",
        )

        @lru_cache(maxsize=None)
        def eval_cliques(graph):
            """this evaluates the main function and cach it for speed up."""
            cliques = [
                len(u) for u in list(clique.find_cliques(graph)) if len(u) > 1
            ]
            return np.bincount(cliques)[np.nonzero(np.bincount(cliques))]

        maximal_clique_sizes = (
            lambda graph: eval_cliques(graph)[0] / eval_cliques(graph)[-1])
        self.add_feature(
            "clique_sizes_maximal",
            maximal_clique_sizes,
            "the ratio of number of max and min size cliques",
            InterpretabilityScore(3),
        )
Exemple #2
0
def get_cliques_modular(conn, class_mapping, classes_sorted):

    degree_frequency = []
    max_degree = 0
    for clase in classes_sorted:

        # select rsn
        idx = np.where(class_mapping == clase)[0]
        tmp_conn = conn.copy()[np.ix_(idx, idx)]

        # convert to Graph
        G = nx.from_numpy_array(tmp_conn)

        # find cliques
        cliques = list(clique.enumerate_all_cliques(G))
        clique_degrees = [len(clique) for clique in cliques]

        degrees, counts = np.unique(clique_degrees, return_counts=True)
        degree_frequency.append(counts)

        if np.max(degrees) > max_degree: max_degree = np.max(degrees)

    # all frequencies of the same size
    ext_degree_frequency = []
    for f in degree_frequency:
        if len(f) != max_degree:
            new_f = np.zeros(max_degree)
            new_f[:len(f)] = f
            ext_degree_frequency.append(new_f)
        else:
            ext_degree_frequency.append(f)

    degree_names = [f'{k}-clique' for k in range(3, max_degree + 1)]

    return ext_degree_frequency, degree_names
Exemple #3
0
def get_cliques_local(conn):

    # convert to Graph
    G = nx.from_numpy_array(conn)

    # find cliques
    cliques = list(clique.enumerate_all_cliques(G))
    max_degree = len(cliques[-1])

    v_counts = []
    for degree in range(3, max_degree + 1):

        cliques_ = [clique for clique in cliques if len(clique) == degree]
        v, counts = np.unique(np.row_stack(cliques_), return_counts=True)

        if len(v) != len(conn):
            new_counts = np.zeros(len(conn))
            new_counts[v] = counts
        else:
            new_counts = counts

        v_counts.append(new_counts)

    clique_names = [f'{k}-clique' for k in range(3, max_degree + 1)]

    return v_counts, clique_names
def filtered_cliques(graph, condition=None):
    if condition is None:
        condition = lambda c: len(c) > 1
    return [
        c for c in enumerate_all_cliques(graph.to_nx())
        if graph.parent_node_id not in c and condition(c)
        and len(c) < len(graph) - 1
    ]
def cliques(net):
    """Returns the cliques of a network
        
    Parameters
    ----------
    net : Graph
        NetworkX Graph object
    
    Returns
    -------
    dict
        dictionary of cliques of given size
    """
    cliques_list = list(clique.enumerate_all_cliques(net))

    cliques_dict = dict()
    for c in cliques_list:
        l = len(c)
        try:
            cliques_dict[l].append(c)
        except KeyError:
            cliques_dict[l] = [c]

    return cliques_dict
Exemple #6
0
def max_clique(g):
    cliques = list(cl.enumerate_all_cliques(g))
    print("These are cliques in the graph:")
    #one of the biggest
    max_clique_graph = g.subgraph(nodes=cliques[-1])
    return max_clique_graph
Exemple #7
0
def max_clique(g):
    cliques = list(cl.enumerate_all_cliques(g))
    max_clique_graph = g.subgraph(nodes=cliques[-1])
    return max_clique_graph
Exemple #8
0
    data = f.readline()
    x = int(str(data.split(' ')[0]))
    y = int(str(data.split(' ')[1]))  #使用split将字符串以空格符号分开,前一个为x,后一个为y
    weight = int(str(data.split(' ')[2]))
    cost = int(str(data.split(' ')[3]))
    G.add_edge(x, y)
    G[x][y]['b'] = weight
    G[x][y]['c'] = cost
    #G.add_weighted_edges_from([(x,y,weight)]);   #在网络中添加x-y这一条边
    edgewidth.append(weight * 0.1)
    factor = factor + 1
    if factor == 96:
        break
else:
    print 'error'
pos = nx.fruchterman_reingold_layout(G, dim=2, k=0.8, scale=1.5)
#pos=spring_layout(G)
nx.draw_networkx_nodes(G, pos, node_size=100, alpha=0.7)
nx.draw_networkx_labels(G, pos, font_size=9)
edge_labels = nx.get_edge_attributes(G, 'c')
nx.draw_networkx_edges(G, pos)
nx.draw_networkx_edge_labels(G,
                             pos,
                             font_size=8,
                             clip_on=True,
                             font_color='red')
plt.show()

#聚类
print enumerate_all_cliques(G)
Exemple #9
0
def clique_sizes(graph):
    """clique_sizes"""
    return [len(u) for u in list(clique.enumerate_all_cliques(graph)) if len(u) > 1]
Exemple #10
0
def n_cliques(graph):
    """n_cliques"""
    return len([u for u in list(clique.enumerate_all_cliques(graph)) if len(u) > 1])