我能找到的关于“调整完整”链接的唯一描述如下:“与完整链接相同,但群集距离最大”
“群集距离”是什么意思?
最终如何使用这种联动方法计算两个聚类之间的距离?
感谢您的回复!
答案 0 :(得分:1)
开源软件的一大优点是,您可以准确了解软件的工作原理。下面的代码显示了HierarchicalClusterer
算法的Weka's source code,更具体地说,它显示了实现COMPLETE
和ADJCOMPLETE
功能的部分。区别如下:
COMPLETE
链接方法一样,计算群集1中的一个节点与群集2中的一个节点之间的最大距离,并将其存储在fBestDist
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-Link
是Complete-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;