SOM を使用してクラスター分析を実行しようとしている大規模なデータセットがあります。データセットは巨大(~ 数十億レコード) であり、最初にニューロンの数と SOM グリッドのサイズをどうすべきかわかりません。ニューロンの数とグリッド サイズの推定について説明している資料へのポインタは、非常に高く評価されます。
ありがとう!
SOM を使用してクラスター分析を実行しようとしている大規模なデータセットがあります。データセットは巨大(~ 数十億レコード) であり、最初にニューロンの数と SOM グリッドのサイズをどうすべきかわかりません。ニューロンの数とグリッド サイズの推定について説明している資料へのポインタは、非常に高く評価されます。
ありがとう!
som ツールボックスのsom_make 関数ドキュメントからの引用
「munits = 5*dlen^0.54321」というヒューリスティックな式を使用します。'mapsize' 引数は、マップ ユニットの最終的な数に影響を与えます。'big' マップはデフォルトのマップ ユニット数の x4 を持ち、'small' マップはデフォルトのマップ ユニット数の 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
マップ サイズもアプリケーション固有のパラメーターであることに注意してください。つまり、生成されたクラスターで何をしたいかによって異なります。大きなマップは、多数の小さいが「コンパクトな」クラスターを生成します (各クラスターに割り当てられるレコードは非常に似ています)。マップが小さいと生成されるクラスターは少なくなりますが、より一般化されます。特に現実世界のデータセットでは、「適切な数のクラスター」は存在しません。それはすべて、データセットを調べたい詳細に依存します。
データセットを入力として、グリッドサイズを返す関数を作成しました。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)))
}
それが役に立てば幸い...
イバン・バレス=ペレス
参照はありませんが、データセットで予想されるクラスごとに約 10 個の SOM ニューロンを使用することから始めることをお勧めします。たとえば、データセットが 8 つの個別のコンポーネントで構成されていると思われる場合は、9x9 ニューロンのマップを使用してください。ただし、これは完全に大まかなヒューリスティックにすぎません。
データで SOM のトポロジをもう少し直接的に動かしたい場合は、トレーニング中にトポロジを変更する SOM バリアントの 1 つを試してください。
残念ながら、これらのアルゴリズムには、単純な SOM よりも多くのパラメーター調整が含まれますが、アプリケーションでは機能する可能性があります。