2016-12-14 1 views
0

私が問題に気づくまで、scipyのkmeans2アルゴリズムで遊んでいました。次のコードを考えてみましょう:[0.05, 0.05][1.05, 1.05]scipyのkmeans2アルゴリズムは、minit = 'matrix'を使用するときに設定される初期セントロイドの重み付けをしていますか?

x = np.array([[0.1, 0.0], [0.0, 0.1], [1.1, 1.0], [1.0, 1.1]]) 
c = np.array([[3,3], [4, 4]]) 

kmeans2(x, c, minit = 'matrix', iter=100) 

は、あなただけの、次の重心との解に収束するには、このコードを(むしろdeviously)期待します。 はしかし、コードはこれを返します。

(array([[ 0.55, 0.55], 
    [ 4. , 4. ]]), array([0, 0, 0, 0], dtype=int32)) 

新しい重心を求める際のk-means法のアルゴリズムは、アカウントにその最初の重心を取るように思えます。どうしてこれなの?これを防ぐ方法を教えてください。

答えて

0

私は本当にしばらくの間、これに働いていないが、私はランダムに私の問題はoccuringた理由を、私は考え出したこのユーレカ-瞬間だ:あなたはどのように見れば結果は、ちょっと奇妙に見えるが
をK-これらの結果は実際に説明するのが簡単です.k平均の最初のエポックでは、重心がすべてのデータポイントに最も近いので、4つのデータポイントはすべて[3, 3]重心に割り当てられます。データポイントの平均は[ 0.55, 0.55]です。どんなに多くのエポックがあっても、[3, 3]で初期化されたセントロイドは(他のデータポイントには「引き付けられていない」ため、何もありません)、同じセントロイド([4, 4]で初期化されます)データ点のどれもが他の点よりもこの重心に近くない。それでおしまい。

関連する問題