我可以找到有关“调整完整”链接的唯一描述,比如说:“与完全链接相同,但在簇距离内距离最大”链接类型“调整完成”如何在WEKA中进行凝聚层级聚类?
“簇内距离”的含义是什么?
如何使用这种连接方法最终计算出两个群集之间的距离?
感谢您的回复!
我可以找到有关“调整完整”链接的唯一描述,比如说:“与完全链接相同,但在簇距离内距离最大”链接类型“调整完成”如何在WEKA中进行凝聚层级聚类?
“簇内距离”的含义是什么?
如何使用这种连接方法最终计算出两个群集之间的距离?
感谢您的回复!
关于开源软件的一个伟大的事情是,你可以找出软件的工作原理。下面的代码显示了HierarchicalClusterer
算法的Weka's source code,更具体地,它显示了实现COMPLETE
和ADJCOMPLETE
功能的部分。所不同的是如下:
COMPLETE
联动方法,计算来自第1组的一个节点和从群集2中的一个节点之间的最大距离,并存储这在fBestDist
fMaxDist
fBestDist
所以计算两个簇之间的距离减去fMaxDist
使用ADJCOMPLETE
作为linkType
对应于COMPLETE
距离减去或者群集1或群集内2个节点之间的最大距离2.
Adjusted Complete-Link
在以下paper提出:
塞潘达尔·卡玛瓦尔,丹Klein和克里斯托弗曼宁(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;
是的,谢谢您的快速回复! – 2012-08-10 07:59:43