3

SOM を使用してクラスター分析を実行しようとしている大規模なデータセットがあります。データセットは巨大(~ 数十億レコード) であり、最初にニューロンの数と SOM グリッドのサイズをどうすべきかわかりません。ニューロンの数とグリッド サイズの推定について説明している資料へのポインタは、非常に高く評価されます。

ありがとう!

4

5 に答える 5

6

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

マップ サイズもアプリケーション固有のパラメーターであることに注意してください。つまり、生成されたクラスターで何をしたいかによって異なります。大きなマップは、多数の小さいが「コンパクトな」クラスターを生成します (各クラスターに割り当てられるレコードは非常に似ています)。マップが小さいと生成されるクラスターは少なくなりますが、より一般化されます。特に現実世界のデータセットでは、「適切な数のクラスター」は存在しません。それはすべて、データセットを調べたい詳細に依存します。

于 2013-10-04T08:29:56.757 に答える
3

データセットを入力として、グリッドサイズを返す関数を作成しました。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))) 
}

それが役に立てば幸い...

イバン・バレス=ペレス

于 2014-09-16T18:29:08.513 に答える
2

参照はありませんが、データセットで予想されるクラスごとに約 10 個の SOM ニューロンを使用することから始めることをお勧めします。たとえば、データセットが 8 つの個別のコンポーネントで構成されていると思われる場合は、9x9 ニューロンのマップを使用してください。ただし、これは完全に大まかなヒューリスティックにすぎません。

データで SOM のトポロジをもう少し直接的に動かしたい場合は、トレーニング中にトポロジを変更する SOM バリアントの 1 つを試してください。

残念ながら、これらのアルゴリズムには、単純な SOM よりも多くのパラメーター調整が含まれますが、アプリケーションでは機能する可能性があります。

于 2013-10-04T03:40:22.343 に答える