Fuzzykmeans集群算法(cluster-reuters)

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: 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 国际许可协议进行许可。

发表回复