【发布时间】:2011-07-27 15:41:38
【问题描述】:
我是 F# 的新手,为了努力学习,我认为实现聚类算法会很有趣。
我有一个需要迭代的列表的输入列表。对于这些输入向量中的每一个,我需要应用一个函数来更新权重并返回列表列表(权重矩阵)。我可以通过newMatrix 函数来完成这部分工作。问题是,我需要在下一次迭代中使用更新的权重矩阵,而我不知道如何做到这一点。以下是重要部分,为简洁起见省略了一些功能。
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 结果迭代 inputList 为每个 inputVector 计算 newMatrix?
编辑:添加伪算法:
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 算法来自 this 书。
【问题讨论】:
-
@Ankur & @Tomas 我的问题中有一个错字,让你们望而却步。我在描述中引用了
newWeights,我应该引用newMatrix。道歉。
标签: f#