A custom library for community detection algorithms with optimized performance and flexibility
Project description
📚 Community Detection Algorithms
📝 Overview
This library implements community detection algorithms with a focus on:
- Performance Optimization
- Flexibility
- Traceability
- Modularity
Compared to NetworkX's native algorithms, our custom implementation delivers measurable performance gains, customizable strategies, and transparent debugging logs.
Girvan-Newman Algorithm for Community Detection
- Purpose: Identify communities by removing edges with the highest betweenness centrality.
- Customizable Methods:
- Betweenness Calculation:
bfs|dijkstra - Component Detection:
dfs_recursive|dfs_iterative
- Betweenness Calculation:
⚠️ Custom Method: BFS | Component Method: DFS Recursive
| Metric | Custom | NetworkX | Difference | % Improvement |
|---|---|---|---|---|
| Execution Time | 0.0380s | 0.0265s | 0.0115s | -30.25% |
✅ Communities Match: Yes
⚠️ Custom Method: BFS | Component Method: DFS Iterative
| Metric | Custom | NetworkX | Difference | % Improvement |
|---|---|---|---|---|
| Execution Time | 0.0281s | 0.0265s | 0.0016s | -6.04% |
✅ Communities Match: Yes
⚠️ Custom Method: Dijkstra | Component Method: DFS Recursive
| Metric | Custom | NetworkX | Difference | % Improvement |
|---|---|---|---|---|
| Execution Time | 0.0176s | 0.0274s | 0.0098s | 35.77% |
✅ Communities Match: Yes
⚠️ Custom Method: Dijkstra | Component Method: DFS Iterative
| Metric | Custom | NetworkX | Difference | % Improvement |
|---|---|---|---|---|
| Execution Time | 0.0164s | 0.0264s | 0.0100s | 37.88% |
✅ Communities Match: Yes
Spectral Clustering
- Purpose: Partition the graph using the eigenvalues and eigenvectors of its Laplacian matrix.
Key Improvements:
- Faster convergence with optimized eigenvalue sorting.
- Transparent iteration logs for eigenvector refinement.
⏱️ Performance Comparison:
| Metric | Custom Spectral | Pre-Implemented | Difference | % Improvement |
|---|---|---|---|---|
| Execution Time | 0.0179s | 0.2326s | 0.2147s | 92.28% |
✅ Communities Match: Yes
Louvain Method
- Purpose: Hierarchical clustering by maximizing modularity.
Key Improvements:
- Use of math-based methods to improve running time
⏱️ Performance Comparison:
| Metric | Custom Louvain | Pre-Implemented | Difference | % Improvement |
|---|---|---|---|---|
| Execution Time | 0.0000000000s | 0.0039553642s | 0.0039s | 4000000% |
| Modularity | 0.4187 | 0.4449 | -0.0262 | -5.89% |
❌ Communities Do NOT Match:
🔑 Node Importance (Lambiotte Coefficient):
| Node | Coefficient |
|---|---|
| 0 | 0.9048 |
| 3 | 1.0 |
🔑 Community Strength (Clauset's Parameter):
| Community | Strength |
|---|---|
| 0 | 0.9 |
| 1 | 0.9091 |
The Custom method aligns well with the pre-implemented approach for major communities, though it sometimes splits larger communities into smaller subsets (This is probably because Nx cuts the creation of new communities if doing it adds gains under a certain threshold). Its strength btw is its computational efficiency: it runs a lot faster than the pre-implemented function, but the gain in computational resources can be useful in the computational-expensive tasks, with the right trade-off between efficiency and quality of results
🛠️ How to Use the Methods
1️⃣ Girvan-Newman Algorithm
The Girvan-Newman Algorithm identifies communities by iteratively removing edges with the highest betweenness centrality.
Configuration Options:
betweenness_method: Choose between"bfs"(default) or"dijkstra"for betweenness calculation.component_method: Choose between"dfs_recursive"(default) or"dfs_iterative"for connected component detection.
Example Usage:
betweenness_method = "bfs" # Options: "bfs", "dijkstra"
component_method = "dfs_recursive" # Options: "dfs_recursive", "dfs_iterative"
# Run Girvan-Newman Algorithm
communities, removed_edges = custom_girvan_newman(G, betweenness_method, component_method)
# Visualize Results
visualize_communities(G, communities, removed_edges)
2️⃣ Spectral Clustering
Spectral Clustering uses the eigenvalues and eigenvectors of a graph's Laplacian matrix to detect communities.
Configuration Options:
- k: Number of clusters to detect.
Example Usage:
edges = list(nx_G.edges()) # Extract unweighted edges
G = Graph(edges) # Convert to custom graph object
print("\n--- Spectral Clustering ---")
spectral_communities = spectral_clustering(G, k=2)
print("Spectral Communities:", spectral_communities)
3️⃣ Louvain Method
The Louvain Method detects communities by maximizing modularity in hierarchical clustering.
Configuration Options:
- max_iter: Number of iterations for optimizing modularity. Example Usage:
import networkx as nx
adj_matrix = nx.to_numpy_array(nx_G)
communities = louvain_cluster(adj_matrix, max_iter=10)
print("\nDetected Communities:", communities)
For documentation, usage examples, and contribution guidelines, refer to the repository. 🚀
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file SelfImplemented-Community-Detection-Algorithms-Improved-0.1.0.tar.gz.
File metadata
- Download URL: SelfImplemented-Community-Detection-Algorithms-Improved-0.1.0.tar.gz
- Upload date:
- Size: 3.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
819979be0ed5d7b319f1fe687910439f2e4dda89ae66c43284c9cb0ca1b8e2b1
|
|
| MD5 |
2f1b85af417da07296e091009098dc5a
|
|
| BLAKE2b-256 |
c1112b01a3347132fa8281bfbf8688f61455b2966b491451c5a0929ba4bb5941
|