【问题标题】:Finding neuron hits on self-organizing map programmatically以编程方式在自组织图上查找神经元命中
【发布时间】:2016-02-06 04:49:28
【问题描述】:

我一直在使用 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 工具箱中没有可用的功能对我来说似乎很奇怪。

有人知道吗? 另外,有没有比我上面描述的更快的方法来找到每个模式被“分配”到的神经元?

【问题讨论】:

  • 所使用的各种变量的典型大小是多少?有任何最小的样本数据可以使用吗?
  • 特征尺寸为 8296x1,我有一组 500 个文档(== 500 个特征)。 SOM 大小为 10x10。
  • negdist 似乎使用某种距离计算。关于这一点,我可以建议基于矩阵乘法的技术,请参阅 herehere
  • @Divakar 谢谢,这些方法非常有趣。

标签: matlab neural-network som


【解决方案1】:

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

y = net(X);

然后,可以简单地找到每个神经元的“命中”:

numhits = sum(y,2);

关于您关于“找到与每种模式相关的神经元”的问题:也许您想多了?看来您可以简单地这样做:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    相关资源
    最近更新 更多