「調整された完全な」リンケージについて私が見つけることができる唯一の説明は、「完全なリンケージと同じですが、クラスター距離内で最大である」のようなものです。
「クラスター距離内」とはどういう意味ですか?
このリンケージアプローチを使用して、2つのクラスター間の距離は最終的にどのように計算されますか?
返信ありがとうございます!
「調整された完全な」リンケージについて私が見つけることができる唯一の説明は、「完全なリンケージと同じですが、クラスター距離内で最大である」のようなものです。
「クラスター距離内」とはどういう意味ですか?
このリンケージアプローチを使用して、2つのクラスター間の距離は最終的にどのように計算されますか?
返信ありがとうございます!
オープンソースソフトウェアの優れた点の1つは、ソフトウェアがどのように機能するかを正確に把握できることです。以下のコードは、 WekaのアルゴリズムのソースコードをHierarchicalClusterer
示しています。より具体的には、COMPLETE
およびADJCOMPLETE
機能を実装する部分を示しています。違いは次のとおりです。
COMPLETE
クラスター1の1つのノードとクラスター2の1つのノード間の最大距離を計算し、これをに格納します。fBestDist
fMaxDist
fMaxDist
にfBestDist
したがって、ADJCOMPLETE
asを使用して計算された2つのクラスター間の距離は、クラスター1またはクラスター2内の2つのノード間の最大距離を差し引いた距離linkType
に対応します。COMPLETE
Adjusted Complete-Link
次の論文で提案されました:
セパンダル・カムヴァル、ダン・クライン、クリストファー・マニング(2002)。モデルベースのアプローチを使用した古典的な凝集クラスタリングアルゴリズムの解釈と拡張。機械学習に関する第19回国際会議(ICML-2002)の議事録
それによると(セクション4.2)、は、さまざまな半径を持つクラスターの場合に使用する必要がAdjusted Complete-Link
あるバージョンです(図10を参照)。Complete-Link
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;