原创文章,转载请注明: 转载自慢慢的回味
本文链接地址: Fuzzykmeans集群算法(cluster-reuters)
理论分析
集群中心点计算
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); } |
本作品采用知识共享署名 4.0 国际许可协议进行许可。