3

我有一个大型数据集,我正在尝试使用 SOM 进行聚类分析。数据集是巨大的(约数十亿条记录),我不确定神经元的数量和 SOM 网格大小应该从什么开始。任何关于估计神经元数量和网格大小的材料的指针将不胜感激。

谢谢!

4

5 回答 5

6

引用som 工具箱的som_make 函数文档

它使用“munits = 5*dlen^0.54321”的启发式公式。“mapsize”参数影响地图单元的最终数量:“大”地图的默认地图单元数为 x4,“小”地图的默认地图单元数为 x0.25。

dlen 是数据集中的记录数

您还可以阅读解决大型数据集问题的经典 WEBSOM http://www.cs.indiana.edu/~bmarkine/oral/self-organization-of-a.pdf http://websom.hut.fi /websom/doc/ps/Lagus04Infosci.pdf

请记住,地图大小也是一个特定于应用程序的参数。也就是说,这取决于您要对生成的集群做什么。大地图产生大量小但“紧凑”的集群(分配给每个集群的记录非常相似)。小地图产生更少但更通用的集群。不存在“正确数量的集群”,尤其是在现实世界的数据集中。这完全取决于您要检查数据集的细节。

于 2013-10-04T08:29:56.757 回答
3

我编写了一个函数,它以数据集作为输入,返回网格大小。我将它从 Matlab 的自组织地图工具箱的 som_topol_struct() 函数重写为 R 函数。

topology=function(data)
{
  #Determina, para lattice hexagonal, el número de neuronas (munits) y su disposición (msize)
  D=data
  # munits: número de hexágonos
  # dlen: número de sujetos
  dlen=dim(data)[1]
  dim=dim(data)[2]
  munits=ceiling(5*dlen^0.5) # Formula Heurística matlab
  #munits=100
  #size=c(round(sqrt(munits)),round(munits/(round(sqrt(munits)))))
  A=matrix(Inf,nrow=dim,ncol=dim)
  for (i in 1:dim)
  {
    D[,i]=D[,i]-mean(D[is.finite(D[,i]),i])
  }

  for (i in 1:dim){
    for (j in i:dim){
      c=D[,i]*D[,j]
      c=c[is.finite(c)];
      A[i,j]=sum(c)/length(c)
      A[j,i]=A[i,j]
    }
  }

  VS=eigen(A)
  eigval=sort(VS$values)

  if (eigval[length(eigval)]==0 | eigval[length(eigval)-1]*munits<eigval[length(eigval)]){
    ratio=1
  }else{
    ratio=sqrt(eigval[length(eigval)]/eigval[length(eigval)-1])}

  size1=min(munits,round(sqrt(munits/ratio*sqrt(0.75))))
  size2=round(munits/size1)

  return(list(munits=munits,msize=sort(c(size1,size2),decreasing=TRUE))) 
}

希望能帮助到你...

伊万·瓦莱斯-佩雷斯

于 2014-09-16T18:29:08.513 回答
2

我没有它的参考资料,但我建议您从数据集中每个预期类别使用大约 10 个 SOM 神经元开始。例如,如果您认为您的数据集由 8 个独立的组件组成,请使用 9x9 神经元的地图。不过,这完全只是一个大概的启发式方法。

如果您希望数据更直接地驱动 SOM 的拓扑,请尝试在训练期间更改拓扑的 SOM 变体之一:

不幸的是,这些算法比普通 SOM 涉及更多的参数调整,但它们可能适用于您的应用程序。

于 2013-10-04T03:40:22.343 回答
1

Kohenon 在他的《自组织映射的 MATLAB 实现和应用》一书中就为 SOM 选择参数和映射大小的问题撰写了文章。在某些情况下,他建议可以在测试几种 SOM 大小后得出初始值,以检查集群结构是否具有足够的分辨率和统计准确性。

于 2016-09-22T11:01:01.457 回答
0

我的建议如下

  1. SOM 与对应分析密切相关。在统计学中,他们使用 5*r^2 作为经验法则,其中 r 是正方形设置中的行数/列数
  2. 通常,应该使用一些基于数据本身的标准,这意味着您需要一些标准来估计同质性。如果违反某个阈值,您将需要更多节点。为了检查同质性,每个节点都需要一些记录。Agai,从统计数据中您可以了解到,对于简单的测试(少量变量),您需要大约 20 条记录,对于某些变量的更高级测试至少需要 8 条记录。
  3. 请记住,SOM 代表一个预测模型。所以验证是关键,绝对是强制性的。然而,预测模型的验证(参见 Wiki 中的 typeI/II 错误条目)本身就是一个主题。可接受的风险以及风险结构也完全取决于您的目的。
  4. 您可以通过越来越多地减小模型的大小来测试模型错误率的动态。然后取误差可接受的最小的一个。
  5. 允许空节点是 SOM 的优势。然而,它们不应该太多。让我说,不到5%。

综上所述,根据经验,我建议以下标准至少为 8..10 条记录的绝对数量,但这些记录不应超过所有集群的 5%。那些 5% 规则当然是一种启发式方法,但是可以通过统计测试中置信水平的一般用法来证明这一点。您可以选择从 1% 到 5% 的任何百分比。

于 2014-02-06T15:55:16.723 回答