以编程方式查找神经元在自组织地图上的命中

时间:2015-01-27 14:03:39

标签: matlab neural-network som

我一直在使用Matlab的工具箱来自组织地图,即newsom和相关的函数系列。我正在将SOM聚类应用于大量文档,我使用plotsomhits(net, features)可视化为每个神经元分配了多少个模式/文档。但是,我似乎无法在工具箱中找到任何在数据结构中检索这些命中的函数,而不仅仅是可视化它们。

现在我知道我可以自己找到命中,在一个简单的for循环中选择最大化每个模式的负距离度量的神经元:

 nweights = net.IW{1}; % retrieve weights
 mx = -Inf; winner = 1;
 for i = 1:length(nweights)
     distance = negdist(nweights(i, :), pattern);
     if distance > mx % update index of winner 
        mx = distance;
        winner = i;
     end
 end

然而,对于我来说,SOM工具箱中没有可用的功能似乎很奇怪,因为存在可视化此类结果的功能。

有人知道吗? 此外,是否有一种更快的方法来找到每个模式被“分配”的神经元而不是我上面描述的模式?

1 个答案:

答案 0 :(得分:0)

要查找命中数,您必须使用神经网络(net)从所有输入(y)获取输出(X):

y = net(X);

然后,"命中"对于每个神经元,只需简单地找到:

numhits = sum(y,2);

关于你的问题"找到与每种模式相关的神经元":也许你过度思考了?看起来你可以这样做:

y = net(pattern) neuronNumber = find(y)

我希望这是有道理的。如果我在这里不正确,请提供一些说明,我会调整我的答案。