私はここで少し混乱しています。matlabの既存のkmeans関数には、データのkmeansを連続して見つける機能がありますか?または、onlinephaseは他の何かを意味しますか?
1 に答える
いいえ、これ'onlinephase'
は通常の「割り当て-再計算」の反復(バッチモード)の後の2番目のステップとして実行されます。距離の合計をさらに減らすことができなくなるまでクラスター間でポイントを移動することにより、使用される距離関数(初期クラスター重心も指定)が与えられた場合に、極小解を見つけることが保証されます。
これをグローバル最小値を見つけることと混同しないでください(これはNP困難な問題であると私は信じています)
これは、ドキュメントで詳しく説明されています。
アルゴリズム
kmeansは、2フェーズの反復アルゴリズムを使用して、k個のクラスターすべてにわたって合計されたポイントから重心までの距離の合計を最小化します。
最初のフェーズでは、バッチ更新を使用します。各反復では、ポイントを最も近いクラスター重心に一度に再割り当てし、続いてクラスター重心を再計算します。このフェーズは、極小値であるソリューションに収束しない場合があります。つまり、データのパーティションで、単一のポイントを別のクラスターに移動すると、距離の合計が増加します。これは、小さなデータセットの場合に発生する可能性が高くなります。バッチフェーズは高速ですが、2番目のフェーズの開始点としてソリューションを概算するだけである可能性があります。
2番目のフェーズでは、オンライン更新を使用します。オンライン更新を使用すると、距離の合計が減少する場合はポイントが個別に再割り当てされ、再割り当てのたびにクラスターの重心が再計算されます。第2フェーズ中の各反復は、すべてのポイントを1回通過することで構成されます。距離の合計が小さい他の極小値が存在する可能性がありますが、2番目のフェーズは極小値に収束します。大域的最小値を見つける問題は、一般に、開始点を徹底的に(または賢く、または幸運に)選択することによってのみ解決できますが、ランダムな開始点で複数の複製を使用すると、通常、大域的最小値の解が得られます。