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 < TIMES) {            DC = new ArrayList<DistanceCollection>();            for (int i = 0; i < K; i++) {                cluster[i] = new Cluster();            }            for (int i = 0; i < dataList.size(); i++) {                for (int j = 0; j < 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 < dataList.size(); i++) {                int clusterNum = DC.get(i).clusterNum;                int dataNum = DC.get(i).dataNum;                if (dataMatrix[clusterNum][dataNum] == 0 && dataSelectionCheck[dataNum] == 0) {                    cluster[clusterNum].dataMembers.add(dataList.get(dataNum));                    dataMatrix[clusterNum][dataNum] = 1;                    dataSelectionCheck[dataNum] = 1;                    assignmentCount++;                }            }            for (int i = 0; assignmentCount < 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 < K; i++) {                if (cluster[i].dataMembers.size() > 0) {                    for (int j = 0; j < centroids[i].features.length ; j++) {                        double accumFeaturesValue = 0;                        for (int k = 0; k < cluster[i].dataMembers.size(); k++) {                            accumFeaturesValue += cluster[i].dataMembers.get(k).features[j];                        }                        centroids[i].features[j] = accumFeaturesValue / cluster[i].dataMembers.size();                    }                }            }            count++ ;        }
The implementation of overlapping clustering (NEO-K-Means)
machine learning;data mining;clustering;k means;research