0

私は k-means の scipy 実装を使用しており、計算を n 回ループし、ループごとに重心の出力配列を記録し、最も高い可能性で出力を計算する方法が必要です。 編集k = 4 に設定しているため、各ソリューションには 4 つの要素があります。最も頻繁に発生する重心配列 (つまり、4 つの要素のセット) を決定する必要があります。

私の重心配列は次のようになります。

[[ 75]
 [115]
 [163]
 [ 16]]

コードを手動で実行すると、k-means のランダムな特性により、4 ~ 6 の解が表示されます。基本的に、各配列の出現回数を n 個以上数えて、最も可能性の高い配列を返したいと思います。

Jblascoの質問の解釈に基づいて、編集して明確にします

アルゴリズムが実行されるたびに、上記のようなセントロイド配列が返されます。アルゴリズムを 3 回実行すると、次のようになります。

[[ 75]  [[ 73]  [[ 75]
 [115]   [112]   [115]
 [163]   [167]   [163]
 [ 16]], [ 14]], [ 16]]

主に次の 2 つのことを達成したいと考えています。

1) これらのセントロイドを生成するコードをループします。
2) 最も可能性の高い (頻繁で一般的な) ソリューションを決定します。この場合は次のようになります。

[[ 75]
 [115]
 [163]
 [ 16]]
4

2 に答える 2

0

わかりました。意味がわかりました。もう一度始めましょう。同様の問題に対する同様の考え方。私はそれが最もエレガントな可能性ではないことを認めますが、機能し、直感的だと思います:

keep_count = {}
for attempt in range(n):
    array = get_one_of_those_arrays  <-- sorry, no idea how the function of k-means work
    array = tuple(array.reshape(4))
    if keep_count.has_key(array):
        keep_count[array] +=1
    else:
        keep_count[result] = 1

次に、最大値の位置を見つける必要があります。

max_value = max(keep_count.values())
max_pos = keep_count.values().index(max_value)
most_frequent = keep_count.keys()[max_pos]
于 2013-07-18T16:15:18.990 に答える