問題とアルゴリズムを混同しないでください。
k-means 問題は、重心への最小二乗割り当てを見つけることです。
解を見つけるためのアルゴリズムは複数あります。
グローバルな最適値を見つけるための明白なアプローチがあります。すべての可能な割り当てを列挙します。これにより、グローバルな最小値k^n
が得られますが、指数関数的なランタイムになります。
より速い時間で近似解を見つけることに、より多くの注意が払われました。
Lloyd/Forgy アルゴリズムは、有限数の状態が存在し、目的関数がすべてのステップで減少しなければならないという理由だけで、極小値に収束することが保証されている EM スタイルの反復モデル改良アプローチです。このアルゴリズムは通常O(n*k*i)
どこで実行されi << n
ますが、極小値のみを検出する場合があります。
MacQueens メソッドは、技術的には反復的ではありません。これは、Lloyd の意味で局所的な最小値さえ見つけられない、一度に 1 要素ずつのシングルパス アルゴリズムです。(ただし、収束するまで、データ セットに対して複数回実行して、局所的な最小値も取得できます!) 1 回のパスを実行する場合は、O(n*k)
複数回のパスの場合は を追加しi
ます。ロイドよりも多くのパスが必要な場合とそうでない場合があります。
次に、ハーティガンとウォンがいます。O(n*k*i)
詳細は覚えていませんが、IIRC は Lloyd/Forgy の賢く、より怠惰な変種でしたn*k
。
l
ランダムな割り当てをテストするランダム化されたアルゴリズムを実行することもできます。おそらく最小値はまったく見つかりませんが、「線形」時間で実行されO(n*l)
ます。
ああ、さまざまなランダムな初期化を試して、グローバル最小値を見つける可能性を高めることができます。試行回数の係数を追加t
...