理论分析
集群中心点计算
1 随机从待分类的向量中选出20个作为20个集群的中心。
2 对所有的点,计算其和每个中心的距离,得到点归属于每个集群的概率。
3 重新对每个集群计算新的中心,并计算新的中心和老的中心的距离,判断其是否收敛。
4 如果所有集群都收敛或者达到用户指定的条件,则集群完成。否则,从2开始下一轮计算。
集群数据
对所有的点,计算其和每个中心的距离,得到点归属于每个集群的概率。
代码分析
请先阅读kmeans集群算法(cluster-reuters)
这里只说明FuzzyKMeansClusteringPolicy和KMeansClusteringPolicy的不同地方
/* FuzzyKMeansClusteringPolicy.java中的方法*/
/* 相对于KMeansClusteringPolicy,KMeansClusteringPolicy只返回最大概率者,而本方法是全部返回。*/
@Override
public Vector select(Vector probabilities) {
return probabilities;
}
/* 此方法计算当前点属于所以集群中心的概率*/
@Override
public Vector classify(Vector data, ClusterClassifier prior) {
Collection<SoftCluster> clusters = Lists.newArrayList();
List<Double> distances = Lists.newArrayList();
for (Cluster model : prior.getModels()) {
SoftCluster sc = (SoftCluster) model;
clusters.add(sc);
distances.add(sc.getMeasure().distance(data, sc.getCenter()));
}
FuzzyKMeansClusterer fuzzyKMeansClusterer = new FuzzyKMeansClusterer();
fuzzyKMeansClusterer.setM(m);
return fuzzyKMeansClusterer.computePi(clusters, distances);
} |