我可以找到有關「調整完整」鏈接的唯一描述,比如說:「與完全鏈接相同,但在簇距離內距離最大」鏈接類型「調整完成」如何在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