kMeansEpochs(elements,eltSqLengths,
centroidss,
featuress,valss,
sqDistToCenters,closestCenters,
mMaxEpochs,reporter);
在kMeansEpochs方法中
1).在每次迭代中将
changedClusters分成两部分,通过
numChangedClusters开划分,前半部分是变化的类,后半部分是不在变化的类
2).在每次迭代中,遍历所有的样本,找出这个样本距离最近的类心,距这个类心的距离,确定这个样本所属的类。
3).初始化
scoreMapList,根据样本所属类
scoreMapList.get(closestCenters[i]).set(elements[i],
sqDistToCenters[i] == 0.0 ? -Double. MIN_VALUE : -sqDistToCenters [i]
);
4).给类内的成员进行排序并对类进行打分
Set<E> cluster
=
new
LinkedHashSet<E>(clusterDistances.keysOrderedByValueList());
//得到该团中所有的key,其结果是按value的大小进行排序
clusterScores.set(cluster,
//不同的团的样本放在不同的团中
totalScores[k] == 0.0
//如何这个团的分为 0.0,则将value设为负无穷大,否则为团的总分/团的大小
? -Double.
MIN_VALUE
: totalScores[k]/cluster.size());
5).按照各类的分值对最终结果中的类进行排序
Set<Set<E>> result = new LinkedHashSet<Set<E>>(clusterScores.keysOrderedByValueList()); //得到全部的团key,并按团的value(总分)进行排序