This demo showcases a selection of clustering algorithms. The algorithms presented are the following:

- Edge Betweenness Clustering
- k-Means Clustering
- Hierarchical Clustering
- Biconnected Components Clustering
- Louvain Modularity Clustering
- Label Propagation Clustering

- Browse the
*Clustering Algorithms*. - Explore the
*options*of the algorithms (if any). - Modify the graphs by adding/removing nodes and edges or by moving graph elements.

Partitions the graph into groups using edge betweenness centrality. The groups are detected by progressively removing the edge with the highest betweenness centrality from the graph.

- Determine the desired minimum or maximum number of clusters. The algorithm will try to respect these values (if possible), unless the graph is disconnected.
- Determine whether or not edge direction or edge costs should be taken under consideration. Edge costs can be determined through edge labels. If edge costs are enabled, for those edges that do not have a label, their edge length will be considered.
- Create/Remove nodes and edges to see how the result of the algorithm is influenced.

Partitions the graph into `k`

clusters based on the node positions such
that their distance from the cluster's mean (centroid) is minimized (refer to the
crosses). The result is presented by means of a Voronoi diagram.

- Determine the distance metric to be used.
- Determine the desired maximum number of clusters or the maximum number of iterations. The maximum number of iterations corresponds to the number of iterations that are allowed to be performed even if the convergence has not been achieved.
- Create new nodes or move/remove the existing ones to see how the result of the algorithm is influenced.

Partitions the graph into clusters based on hierarchical clustering. For the clustering an agglomerative strategy is applied, i.e., a bottom-up approach according to which at the beginning each node belongs to its own cluster. At each step pairs of clusters are merged while moving up to the hierarchy. The dissimilarity between clusters is determined based on the given linkage criterion and the given node distances. The algorithm continues until all nodes belong to the same cluster. The result is a dendrogram which can be cut based on a given cut-off value.

- Determine the linkage criterion that defines how the distance between sets of nodes will be measured.
- Move the red line of the dendrogram to determine a new cut-off value and examine the resulting clusters.
- Hover a dendrogram to see which nodes of the original graph belong to this cluster and vice-versa.
- Create new nodes or move/remove the existing ones to see how the result of the algorithm is influenced.

Partitions the graph by analyzing its biconnected components such that nodes that belong to the same group are biconnected. Nodes that belong to multiple biconnected components will be assigned to exactly one of these components.

- Create/Remove nodes or edges to see how the result of the algorithm is influenced.

Partitions the graph by using the *Louvain Modularity* algorithm.

The algorithm starts by assigning each node to its own community. Then, iteratively tries to construct communities by moving nodes from their current community to another until the modularity is locally optimized. At the next step, the small communities found are merged to a single node and the algorithm starts from the beginning until the modularity of the graph cannot be further improved.

- Create/Remove nodes or edges to see how the result of the algorithm is influenced.

Partitions the graph by using the *Label Propagation* algorithm.

Label Propagation iteratively assigns a label to each node. The label of a node is set to the most frequent label among its neighbors. If there are multiple candidates the algorithm randomly chooses one of them. After applying the algorithm, all nodes with the same label belong to the same community.

- Create/Remove nodes or edges to see how the result of the algorithm is influenced.