二等分k-meansアルゴリズムを作成する必要がありましたが、アルゴリズムを理解できませんでした。私はk-meansアルゴリズムを知っています。
アルゴリズムを説明できますが、学術用語では説明できません
ありがとう。
二等分k-meansアルゴリズムを作成する必要がありましたが、アルゴリズムを理解できませんでした。私はk-meansアルゴリズムを知っています。
アルゴリズムを説明できますが、学術用語では説明できません
ありがとう。
アイデアは、ポイントのクラウドを2つの部分に繰り返し分割することです。つまり、ランダムなバイナリツリーを構築します。各分割(2つの子を持つノード)は、クラウドのポイントを2に分割することに対応します。
あなたは点群から始めます。
その重心(重心)を計算しますw
雲の点の中からランダムなcLで点を選択します
wと比較したときにcLの対称点として点cRを作成します(セグメントcL->wはw->cRと同じです)
クラウドのポイントを2つに分けます。cRに最も近いポイントはサブクラウドRに属し、cLに最も近いポイントはサブクラウドLに属します。
サブクラウドRとLについて繰り返します
ノート :
使用したランダムポイントは破棄できます。ただし、すべてのサブケーブルの図心を保持します。
サブクラウドにポイントが1つだけ含まれている場合は停止します。
k個のクラスターが必要な場合は、最初のクラウドのすべてのポイントが含まれるようにk個の重心を取得します。必要に応じて、さらに複雑な作業を行うことができます(雲の分散を最小化するなど)。4つのクラスター(便宜上2の累乗)が必要だとします。次に、雲を2つに分割し、次にそれぞれを切断するだけです。 2つのサブクラウド。8つのクラスターが必要な場合は、これらのサブクラウドを2つに1回カットします。また、16クラスターの場合。
Kが2の累乗ではない(たとえば24)Kクラスターが必要な場合は、2の最も近い劣った累乗を調べます。それは16です。まだ8つのクラスターが不足しています。各「level-16-cluster」は「level-16-subcloud」の重心です。あなたがすることは、8つの「レベル16クラスター」(例えばランダムに)を取り、それらをそれぞれ2つの「子」「レベル32クラスター」に置き換えることです。(これらの2つの子「level-32-clusters」は、親の「level-16-subcloud」に追加される2つの「level-32-subclouds」に対応します)