在WEKA中,链接类型“调整完成”如何为凝聚层次聚类工作?

时间:2012-08-09 14:56:55

标签: cluster-analysis weka hierarchical-clustering

我能找到的关于“调整完整”链接的唯一描述如下:“与完整链接相同,但群集距离最大”

“群集距离”是什么意思?

最终如何使用这种联动方法计算两个聚类之间的距离?

感谢您的回复!

1 个答案:

答案 0 :(得分:1)

开源软件的一大优点是,您可以准确了解软件的工作原理。下面的代码显示了HierarchicalClusterer算法的Weka's source code,更具体地说,它显示了实现COMPLETEADJCOMPLETE功能的部分。区别如下:

  • 就像COMPLETE链接方法一样,计算群集1中的一个节点与群集2中的一个节点之间的最大距离,并将其存储在fBestDist
  • 然后,找到群集1或群集2中节点之间的最大距离,并将其存储在fMaxDist
  • 最后从fMaxDist
  • 中减去fBestDist

因此,使用ADJCOMPLETE作为linkType计算的两个群集之间的距离对应于COMPLETE距离减去群集1或群集2中2个节点之间的最大距离。

Adjusted Complete-Link在以下paper中提出:

  

Sepandar Kamvar,Dan Klein和Christopher Manning(2002)。 使用基于模型的方法解释和扩展经典凝聚聚类算法。在第19届国际机器学习会议论文集(ICML-2002)

根据它(第4.2节),Adjusted Complete-LinkComplete-Link的版本,如果群集具有不同的半径,则应使用该版本(参见图10)。

case COMPLETE:
case ADJCOMLPETE:
  // find complete link distance aka maximum link, which is the largest distance between
  // any item in cluster1 and any item in cluster2
  fBestDist = 0;
  for (int i = 0; i < cluster1.size(); i++) {
    int i1 = cluster1.elementAt(i);
    for (int j = 0; j < cluster2.size(); j++) {
      int i2 = cluster2.elementAt(j);
      double fDist = fDistance[i1][i2];
      if (fBestDist < fDist) {
        fBestDist = fDist;
      }
    }
  }
  if (m_nLinkType == COMPLETE) {
    break;
  }
  // calculate adjustment, which is the largest within cluster distance
  double fMaxDist = 0;
  for (int i = 0; i < cluster1.size(); i++) {
    int i1 = cluster1.elementAt(i);
    for (int j = i+1; j < cluster1.size(); j++) {
      int i2 = cluster1.elementAt(j);
      double fDist = fDistance[i1][i2];
      if (fMaxDist < fDist) {
        fMaxDist = fDist;
      }
    }
  }
  for (int i = 0; i < cluster2.size(); i++) {
    int i1 = cluster2.elementAt(i);
    for (int j = i+1; j < cluster2.size(); j++) {
      int i2 = cluster2.elementAt(j);
      double fDist = fDistance[i1][i2];
      if (fMaxDist < fDist) {
        fMaxDist = fDist;
      }
    }
  }
  fBestDist -= fMaxDist;
  break;