8

400x1000 マトリックスの matlab で kmeans を実行していますが、何らかの理由でアルゴリズムを実行するたびに異なる結果が得られます。以下はコード例です。

[idx, ~, ~, ~] = kmeans(factor_matrix, 10, 'dist','sqeuclidean','replicates',20);

何らかの理由で、このコードを実行するたびに異なる結果が得られますか? 何か案は?

多重共線性の問題を特定するために使用しています。

助けてくれてありがとう!

4

3 に答える 3

18

MATLAB での k-means の実装には、ランダム化されたコンポーネント (初期中心の選択) があります。これにより、さまざまな結果が生じます。ただし、実際には、MATLAB は k-means を何度も実行し、歪みが最も少ないクラスタリングを返します。毎回非常に異なるクラスタリングが表示される場合は、k-means が探す種類のクラスタ (球状) にデータが適していないことを意味している可能性があり、他のクラスタリング アルゴリズム (スペクトル アルゴリズムなど) を試すことを示しています。

start関数の引数 (パラメーター)の 1 つとして中心の初期セットを渡すことで、決定論的な動作を得ることができます。これにより、毎回同じ出力クラスタリングが得られます。中心の初期セットを選択するためのヒューリスティックがいくつかあります (例: K-means++ )。

于 2012-08-27T06:57:44.780 に答える
6

wikiで読むことができるように、k-means アルゴリズムは一般にヒューリスティックで部分的に確率論的であり、Matlab のものも例外ではありません。

これは、アルゴリズムに特定のランダムな部分があることを意味します ( Matlab の場合、グローバルな解を見つけるためにランダムな開始点を繰り返し使用します)。これによりkmeans、平均して高品質の出力クラスターが作成されます。ただし、アルゴリズムの疑似乱数の性質を考えると、毎回わずかに異なるクラスターが得られます。これは正常な動作です。

于 2012-08-27T06:47:55.943 に答える
2

これは初期化問題と呼ばれます。kmeans はデータをクラスター化するためにランダムな初期ポイントから開始するためです。matlab は k 個のランダムな点を選択し、データ内の点からこれらの位置までの距離を計算し、新しい重心を見つけて距離をさらに最小化します。そのため、重心の位置によって異なる結果が得られる可能性がありますが、答えは似ています。

于 2013-11-14T21:33:36.753 に答える