I am familiar with various clustering algorithms (k-means etc) but for my specific use case (social networks), I need an algorithm that detects overlapping groups. This algorithm neatly separates my Facebook friends into my high school friends, my college friends, my family and my work friends.
The algorithm I used above (JUNG’s VoltageClusterer) separates nodes into single clusters. But I want an algorithm that can assign nodes multiple clusters (e.g. a friend of mine can be both my high school friend and college friend).
How do I do this? It would be nice if I can have this algorithm work for weighted graphs too instead of just unweighted ones.
Palla et al have a nice Nature paper on detecting overlapping communities:
http://www.nature.com/nature/journal/v435/n7043/full/nature03607.html
They demonstrate its success in different types of networks, from social to protein interaction.
The algorithm is called k-clique percolation. It’s implemented in their C-finder program:
http://www.cfinder.org/