【发布时间】:2013-10-03 15:31:31
【问题描述】:
我有一个大型数据集,我正在尝试使用 SOM 进行聚类分析。数据集是 HUGE(约数十亿条记录),我不确定神经元的数量和 SOM 网格的大小应该是多少。任何关于估计神经元数量和网格大小的材料的指针将不胜感激。
谢谢!
【问题讨论】:
标签: machine-learning neural-network self-organizing-maps
我有一个大型数据集,我正在尝试使用 SOM 进行聚类分析。数据集是 HUGE(约数十亿条记录),我不确定神经元的数量和 SOM 网格的大小应该是多少。任何关于估计神经元数量和网格大小的材料的指针将不胜感激。
谢谢!
【问题讨论】:
标签: machine-learning neural-network self-organizing-maps
我编写了一个函数,它以数据集作为输入,返回网格大小。我将它从 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)))
}
希望对你有帮助……
伊万·瓦莱斯-佩雷斯
【讨论】:
引用 som 工具箱的som_make function documentation
它使用启发式公式“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
请记住,地图大小也是一个特定于应用程序的参数。也就是说,这取决于您要对生成的集群做什么。大地图产生大量小但“紧凑”的集群(分配给每个集群的记录非常相似)。小地图产生更少但更通用的集群。不存在“正确数量的集群”,尤其是在现实世界的数据集中。这完全取决于您要检查数据集的细节。
【讨论】:
我没有它的参考资料,但我建议您从数据集中每个预期类别使用大约 10 个 SOM 神经元开始。例如,如果您认为您的数据集由 8 个独立的组件组成,请使用 9x9 神经元的地图。不过,这完全只是一个试探法。
如果您希望数据更直接地驱动 SOM 的拓扑,请尝试在训练期间更改拓扑的 SOM 变体之一:
不幸的是,这些算法比普通 SOM 涉及更多的参数调整,但它们可能适用于您的应用程序。
【讨论】:
Kohenon 在他的书"MATLAB Implementations and Applications of the Self-Organizing Map" 中写了关于为 SOM 选择参数和映射大小的问题。在某些情况下,他建议可以在测试几种尺寸的 SOM 后得出初始值,以检查集群结构是否具有足够的分辨率和统计准确性。
【讨论】:
我的建议如下
综合起来,根据经验,我建议以下标准至少有 8..10 条记录的绝对数量,但这些记录不应超过所有集群的 5%。 那些 5% 规则当然是一种启发式方法,但是可以通过统计测试中置信水平的一般用法来证明这一点。您可以选择从 1% 到 5% 的任何百分比。
【讨论】: