我有一个大型数据集,我正在尝试使用SOM进行聚类分析。数据集是 HUGE (〜数十亿条记录),我不确定神经元的数量和开始的SOM网格大小应该是多少。任何关于估计神经元数量和网格大小的材料的指针都将非常受欢迎。
谢谢!
答案 0 :(得分:6)
从som工具箱的som_make function documentation引用
它使用启发式公式'munits = 5 * dlen ^ 0.54321'。该 'mapsize'参数会影响地图单元的最终数量:'大' map有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
请记住,地图大小也是一个特定于应用程序的参数。即,它取决于您对生成的集群的要求。大型地图产生大量小但“紧凑”的群集(分配给每个群集的记录非常相似)。小地图产生的更少但更通用的群集。 “正确数量的聚类”不存在,尤其是在现实世界数据集中。这一切都取决于您要检查数据集的细节。
答案 1 :(得分:2)
我没有它的参考,但我建议首先在数据集中每个预期的类使用大约10个SOM神经元。例如,如果您认为您的数据集由8个独立的组件组成,请选择具有9x9神经元的地图。这完全只是一个球场启发式。
如果您希望数据更直接地驱动SOM的拓扑结构,请尝试在训练期间更改拓扑的SOM变体之一:
不幸的是,这些算法涉及比普通SOM更多的参数调整,但它们可能适用于您的应用程序。
答案 2 :(得分:2)
我编写了一个函数,以数据集作为输入,返回网格大小。我将它从Matlab的Self Organizing Maps Toolbox的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)))
}
希望它有所帮助...
IvánVallés-Pérez
答案 3 :(得分:1)
Kohenon在他的书"MATLAB Implementations and Applications of the Self-Organizing Map"中写了关于为SOM选择参数和地图大小的问题。在某些情况下,他建议在测试几种尺寸的SOM后,可以得出初始值,以检查群集结构是否具有足够的分辨率和统计精度。
答案 4 :(得分:0)
我的建议如下:
总而言之,根据经验,我建议以下标准至少为绝对数量的8..10记录,但这些记录不应超过所有集群的5%。 那些5%的规则当然是一种启发式方法,然而这可以通过统计测试中置信水平的一般用法来证明。您可以选择1%到5%之间的任何百分比。