私はF#を初めて使いました。学習するために、クラスタリングアルゴリズムを実装するのは楽しいと思いました。 私は反復処理が必要なリストの入力リストを持っています。これらの入力ベクトルのそれぞれに対して、重みを更新し、リストのリスト(重み行列)を返す関数を適用する必要があります。私はその部分をnewMatrix
関数で行うことができます。問題は、次の反復で更新されたウェイト行列を使用する必要があり、これを行う方法が失われていることです。ここに重要な部分がありますが、簡潔にするために残された機能がいくつかあります。リストを反復処理してfuncitonの結果を次の繰り返しに渡すには
let inputList = [[1; 1; 0; 0]; [0; 0; 0; 1]; [1; 0; 0; 0]; [0; 0; 1; 1;]]
let weights = [[.2; .6; .5; .9]; [.8; .4; .7; .3]]
let newMatrix xi matrix =
List.map2(fun w wi ->
if wi = (yiIndex xi) then (newWeights xi)
else w) matrix [0..matrix.Length-1]
printfn "%A" (newMatrix inputList.Head weights)
> >
[[0.2; 0.6; 0.5; 0.9]; [0.92; 0.76; 0.28; 0.32]]
だから私の質問は、私が以前newMatrix
結果を用いて、各inputVectorについてnewMatrix
を計算inputList
を反復んか、でしょうか?
編集:追加擬似アルゴリズム:
for input vector 1
given weight matrix calculate new weight matrix
return weight matirx prime
for input vector 2
given weight matrix prime calculate new weight matrix
and so on...
...
脇:私はKohonen SOMアルゴリズムFOM thisブックを実装しています。
@Ankur&@Tomas私はあなたに男の子を投げた質問でタイプミスがありました。私は説明の中で 'newWeights'を参照していました。私は' newMatrix'を参照していたはずです。謝罪。 – nathan