# Node Clustering¶

Algorithms falling in this category generates communities composed by nodes. The communities can represent neat, crisp, partition as well as overlapping or even fuzzy ones.

## Crisp Communities¶

A clustering is said to be a partition if each node belongs to one and only one community. Methods in this subclass returns as result a NodeClustering object instance.

 agdl(g, number_communities, …) AGDL is a graph-based agglomerative algorithm, for clustering high-dimensional data. async_fluid(g, k) Fluid Communities (FluidC) is based on the simple idea of fluids (i.e., communities) interacting in an environment (i.e., a non-complete graph), expanding and contracting. cpm(g[, initial_membership, weights, …]) CPM is a model where the quality function to optimize is: der(g[, walk_len, threshold, iter_bound]) DER is a Diffusion Entropy Reducer graph clustering algorithm. edmot(g[, component_count, cutoff]) The algorithm first creates the graph of higher order motifs. eigenvector(g) Newman’s leading eigenvector method for detecting community structure based on modularity. em(g, k) EM is based on based on a mixture model. gdmp2(g[, min_threshold]) Gdmp2 is a method for identifying a set of dense subgraphs of a given sparse graph. girvan_newman(g, level) The Girvan–Newman algorithm detects communities by progressively removing edges from the original graph. greedy_modularity(g[, weight]) The CNM algorithm uses the modularity to find the communities strcutures. infomap(g) Infomap is based on ideas of information theory. label_propagation(g) The Label Propagation algorithm (LPA) detects communities using network structure alone. leiden(g[, initial_membership, weights]) The Leiden algorithm is an improvement of the Louvain algorithm. louvain(g[, weight, resolution, randomize]) Louvain maximizes a modularity score for each community. markov_clustering(g[, max_loop]) The Markov clustering algorithm (MCL) is based on simulation of (stochastic) flow in graphs. rber_pots(g[, initial_membership, weights, …]) rber_pots is a model where the quality function to optimize is: rb_pots(g[, initial_membership, weights, …]) Rb_pots is a model where the quality function to optimize is: scan(g, epsilon, mu) SCAN (Structural Clustering Algorithm for Networks) is an algorithm which detects clusters, hubs and outliers in networks. significance_communities(g[, …]) Significance_communities is a model where the quality function to optimize is: spinglass(g) Spinglass relies on an analogy between a very popular statistical mechanic model called Potts spin glass, and the community structure. surprise_communities(g[, …]) Surprise_communities is a model where the quality function to optimize is: walktrap(g) walktrap is an approach based on random walks. sbm_dl(g[, B_min, B_max, deg_corr]) Efficient Monte Carlo and greedy heuristic for the inference of stochastic block models. sbm_dl_nested(g[, B_min, B_max, deg_corr]) Efficient Monte Carlo and greedy heuristic for the inference of stochastic block models.

## Overlapping Communities¶

A clustering is said to be overlapping if any generic node can be assigned to more than one community. Methods in this subclass returns as result a NodeClustering object instance.

 angel(g, threshold[, min_community_size]) Angel is a node-centric bottom-up community discovery algorithm. big_clam(g[, dimensions, iterations, …]) BigClam is an overlapping community detection method that scales to large networks. conga(g, number_communities) CONGA (Cluster-Overlap Newman Girvan Algorithm) is an algorithm for discovering overlapping communities. congo(g, number_communities[, height]) CONGO (CONGA Optimized) is an optimization of the CONGA algortithm. danmf(g[, layers, pre_iterations, …]) The procedure uses telescopic non-negative matrix factorization in order to learn a cluster memmbership distribution over nodes. demon(g, epsilon[, min_com_size]) Demon is a node-centric bottom-up overlapping community discovery algorithm. ego_networks(g[, level]) Ego-networks returns overlapping communities centered at each nodes within a given radius. egonet_splitter(g[, resolution]) The method first creates the egonets of nodes. kclique(g, k) Find k-clique communities in graph using the percolation method. lais2(g) LAIS2 is an overlapping community discovery algorithm based on the density function. lemon(graph, seeds[, min_com_size, …]) Lemon is a large scale overlapping community detection method based on local expansion via minimum one norm. lfm(g, alpha) LFM is based on the local optimization of a fitness function. multicom(g, seed_node) MULTICOM is an algorithm for detecting multiple local communities, possibly overlapping, by expanding the initial seed set. nmnf(g[, dimensions, clusters, lambd, …]) The procedure uses joint non-negative matrix factorization with modularity based regul;arization in order to learn a cluster memmbership distribution over nodes. nnsed(g[, dimensions, iterations, seed]) The procedure uses non-negative matrix factorization in order to learn an unnormalized cluster membership distribution over nodes. node_perception(g, threshold, overlap_threshold) Node perception is based on the idea of joining together small sets of nodes. overlapping_seed_set_expansion(g, seeds[, …]) OSSE is an overlapping community detection algorithm optimizing the conductance community score The algorithm uses a seed set expansion approach; the key idea is to find good seeds, and then expand these seed sets using the personalized PageRank clustering procedure. slpa(g[, t, r]) SLPA is an overlapping community discovery that extends tha LPA.

## Fuzzy Communities¶

A clustering is said to be a fuzzy if each node can belongs (with a different degree of likelihood) to more than one community. Methods in this subclass returns as result a FuzzyNodeClustering object instance.

 frc_fgsn(g, theta, eps, r) Fuzzy-Rough Community Detection on Fuzzy Granular model of Social Network.

## Node Attribute¶

Methods in this subclass returns as result a AttrNodeClustering object instance.

 eva(g, labels[, weight, resolution, …]) The Eva algorithm extends the Louvain approach in order to deal with the attributes of the nodes (aka Louvain Extended to Vertex Attributes). ilouvain(g, labels, id) The I-Louvain algorithm extends the Louvain approach in order to deal only with the scalar attributes of the nodes.

## Bipartite Node¶

Methods in this subclass returns as result a BiNodeClustering object instance.

 bimlpa(g[, theta, lambd]) BiMLPA is designed to detect the many-to-many correspondence community in bipartite networks using multi-label propagation algorithm.