The implementation of overlapping clustering (NEO-K-Means) I am researching on overlapping clustering (Clusters are non-disjoint).I found that Neo-K-Means is probably the state-of-the-art now.But, when I tried  implementing the algorithm with the multi-label data set (music-emotion/scene).I hadn't got the high result as declared in the paper (My results are around 0.4 F-measure , the paper declare 0.55 for music and 0.626 for scene ). In spite of , I had initialized the experiments with the best situation for K-Means (centroid seeds are means of each class and the total cluster assignments are equal to reality) . I wonder what wrong with my implementation method , orDo I have to do something extra for getting higher result ? 

PS. I have found the further research of Neo-Kmeans , but I think I should clear this point before go further.

This is my code 

while (count &lt; TIMES) {

            DC = new ArrayList&lt;DistanceCollection&gt;();

            for (int i = 0; i &lt; K; i++) {

                cluster[i] = new Cluster();

            }

            for (int i = 0; i &lt; dataList.size(); i++) {

                for (int j = 0; j &lt; K; j++) {

                    DistanceCollection dist = new DistanceCollection();
                    dist.dataNum = dataList.get(i).dataNum;
                    dist.clusterNum = j;
                    dist.distanceFromCluster = euclidean(centroids[j], dataList.get(i));
                    DC.add(dist);

                }

            }

            // sort the distances for argmin(i,j) checking 
            Collections.sort(DC, new DistanceCollectionComparator());



            int totalAssignment = 2585;
            int assignedCluster = -1;
            int assignmentCount = 0;
            int[] dataSelectionCheck = new int[2407];
            int dataMatrix[][] = new int[6][2407];

            for (int i = 0;  assignmentCount &lt; dataList.size(); i++) {

                int clusterNum = DC.get(i).clusterNum;
                int dataNum = DC.get(i).dataNum;

                if (dataMatrix[clusterNum][dataNum] == 0 &amp;&amp; dataSelectionCheck[dataNum] == 0) {

                    cluster[clusterNum].dataMembers.add(dataList.get(dataNum));
                    dataMatrix[clusterNum][dataNum] = 1;
                    dataSelectionCheck[dataNum] = 1;

                    assignmentCount++;

                }

            }

            for (int i = 0; assignmentCount &lt; totalAssignment; i++) {

                int clusterNum = DC.get(i).clusterNum;
                int dataNum = DC.get(i).dataNum;

                if (dataMatrix[clusterNum][dataNum] == 0) {

                    cluster[clusterNum].dataMembers.add(dataList.get(dataNum));
                    dataMatrix[clusterNum][dataNum] = 1; 

                    assignmentCount++;

                }

            }



            for (int i = 0; i &lt; K; i++) {

                if (cluster[i].dataMembers.size() &gt; 0) {

                    for (int j = 0; j &lt; centroids[i].features.length ; j++) {

                        double accumFeaturesValue = 0;

                        for (int k = 0; k &lt; cluster[i].dataMembers.size(); k++) {

                            accumFeaturesValue += cluster[i].dataMembers.get(k).features[j];

                        }

                        centroids[i].features[j] = accumFeaturesValue / cluster[i].dataMembers.size();

                    }
                }

            }


            count++ ;

        }
I have never heard of NEO-k-means. So I wouldn't call it "state of the art": which tools does include it?

Plenty of methods are published every week and have zero impact because they are redundant, badly written, only work on a single data set, hard to parameterize, or outright irreproducible (As I have not read NEO-k-Means, I'm not claiming any of this applies to this particular algorithm!)

Nevertheless, it is not the first to do non-overlapping clustering.


Fuzzy c-means (FCM): a soft-asssignment k-means variant
EM (Gaussian Mixture Modeling) is even more powerful, and has a sound theorertical backing
Subspace and correlation clusterings are usually overlapping, too.


I'd start with GMM and FCM, as these have been successfully used by many people.