自己組織化マップ
自己組織化マップ(SOM) は、多くの特徴を持つデータをクラスター化するために使用できる教師なし形式の機械学習です。 SOM はデータをクラスター化するだけでなく、クラスターをより簡単に視覚化できるように、データをより低い次元 (通常は 2 次元) に「マッピング」します。
従来、SOM は、特徴が入力でクラスターが出力である人工ニューラル ネットワークの形式として説明されています。 しかし、SOM がどのようにトレーニングされ、構造化されるかに関するほぼすべてのことは、違う一部の用語は同じですが、従来のフィードフォワード ニューラル ネットワークからのものです。 したがって、ニューラル ネットワークに関して白紙の状態から始めている場合でも、これに従うことができます。 
話を簡単にするために、いくつかの用語とその意味を事前に定義しておきます。
ノード。 ニューラル ネットワークから用語を借用しているため、これらをノードと呼びますが、SOM 内のノードは各クラスターの中心を表します。 所有するノードの数は、所有するクラスターの数になります。
重さ。 重みという用語もニューラル ネットワークから借用していますが、SOM の重みは異なります。 重みはノードの空間位置を表します (K-Means でクラスターの中心を取得する方法と同様)。 重みはデータ ベクトルと同じ次元になります。
近所。 ノードの近傍とは、そのノードに十分に近いすべてのノードです。 どの程度「十分に」近いかは、SOM をトレーニングするにつれて変化します。
学習率。 学習率は、各反復でノードの重みをどれだけ変更するかを反映します。 学習率が大きいということは、重みが大きく変動する可能性があることを意味します。 学習率が非常に小さいということは、重みが初期値からあまり変わらないことを意味します。
ラティス/マップ。 マップ内のノードの配置/グリッド。

増分学習 SOM
SOM が何をするのかについてより一般的なアイデアを提供するために、まずトレーニングされた SOM を見ていきます。繰り返し、これにより、SOM 作成の各ステップを 1 つずつ確認できるようになります。 これはその方法ではありませんJMP実装します。 計算効率を高めるために、JMP は SOM を次の方法でトレーニングします。バッチ方式、それについては以下で見ていきます。
概要。 SOM を反復的にトレーニングするには、次の 5 つの主な手順があります。
- 初期化するSOM ノードの重み。 これはランダムに実行することも、特定の開始重みを選択して、考えられるすべての入力値に効率的に分散するようにすることもできます (JMP が実行します)。
- 選ぶランダムなデータポイントデータセットから。
- データポイントがどのノードに最も近いかを計算します。 これは、データ ポイントと各ノードの重みの間の距離を計算することで実行できます。 最も近いノードは と呼ばれます。ベストマッチングユニット( BMU略して)。
- BMU がわかれば、どのノードが BMU の近傍にあるかを計算します。 。 言い換えれば、どのノードがマップ内で BMU に十分に近いかということです。
- 私たちはの重量を更新しますBMU とその近隣すべての重みがデータ ポイントにより近くなるようにします。 基本的に、私たちはクラスターをデータによりよく適合させています。 BMU から遠いノードは、BMU (および BMU 自体) に近いノードよりも変更が少なくなります。
最大反復回数に達するか、ノードの重みの変更が停止するまで、ステップ 2 ~ 5 を繰り返します。
徹底的に。 何が起こっているかをより直観的に理解するために、ステップ 3 ~ 5 を詳しく見てみましょう。
始める前に、計算のせいでこのセクションを読むのを妨げないでください。 数式を紹介しますが、計算のすべてを理解していなくても、背後にある一般的な考え方を知っていれば問題ありません。なぜこの計算を使用します。
BMU を見つける。 2 つの n 次元ベクトル間の距離を計算するには、さまざまな方法があります。 SOM では一般に、ユークリッド距離やコサイン距離などの尺度が表示されることがあります。


この場合、ユークリッド距離を使用します。 BMU を計算するには、選択したデータ ベクトルとノードの各重みベクトルの間のユークリッド距離を計算します。 BMU の距離は最小です。
近傍の計算。 複数のノード/クラスター センターを更新すると、SOM が K-Means などのより単純な方法から分離されます。 データ ベクトルに近づくように BMU の重みを変更するだけでなく、BMU に十分近いと思われるノードも変更します。
ノードは、BMU の特定の半径内にある場合、BMU の近傍にあるとみなされます。 言い換えると、ノードが半径のある円の中にある場合、 r 、BMU を中心としており、近隣とみなされます。
最初は、大規模な近傍を使用して、多くのノードを変更したいと考えています。 しかし、時間が経つにつれて、SOM をさらに「微調整」できるように、近隣地域を小さくしたいと考えています。 何かを研磨するとき、私たちは多くの場合、大きな粒度のサンドペーパーから始めて、より細かい粒度のサンドペーパーに向かって作業を進めていくことを考えてみてください。
数学的には、近傍半径の公式を使用することでこれを実現できます。 r 、これは時間に依存し、SOM のトレーニングを続けるにつれて小さくなります。 最終的には、近隣は非常に小さくなり、BMU のみが含まれるようになります。
ノードの重みを更新する。 どのノードの重みを更新するかがわかったら、それらをどの程度変更するかを計算します。 BMU に最も近いノードの重みが最も大きく変化し、近傍の端にあるノードはほとんど変化しません。 ただし、すべてのノードの重みは現在のデータ ベクトルに近づけられます。
これは、次の式を使用して行います (心配しないでください。さまざまな部分については後ほど説明します)。

W はノードの重みを表します。 W(t+1) は私たちの更新しました重量、W(t) は当社の現在重さ。 右辺の後半部分を少し単純化してみると、新しく更新された重みは、古い重みにいくらかを掛けたものであることがわかります。調整。

(V(t) - W(t)) は、データ ベクトルと現在のノードの重みの間の距離です。 これは、調整がデータ ベクトルとノードの距離に依存することを示しています。

L(t) は学習率です。 近傍関数と同じように (実際には近傍半径関数とまったく同じです…)、学習率は比較的大きな値から始まります。 、時間の経過とともに小さくなります (指数関数的な部分がそれを行います)。

最初に SOM のトレーニングを開始したときは学習率が高くなりますが、時間の経過とともにノードの重みをより安定させたいため、学習率を下げます。

学習率が低下しているだけではなく、時間ですが、ノードの重みの変化も、ノードが増加するにつれて減少しています。さらに遠く当社のBMUから。
はガウス カーネルであり、この減衰を数学的に表します。 (距離は、変更するノードとマップ内の BMU の間の距離です)。

与えられた半径 r(t) の場合、ガウス カーネルは次の形状になります。
更新しているノードとBMUの間の距離が遠い場合、小さいでしょう。 逆に、更新しているノードが BMU に近い場合、より大きくなります。
ついに公式全体を解体しました!

レビューする:
W(t) はノードの現在の重みです。

BMU から遠いノードが変更されます。少ないBMU (および BMU 自体) に近いノードよりも。
L(t) は減衰する学習率です。 時間が経つにつれて、私たちは「微調整」し、トレーニングの開始時よりも小さな変更を加えています。
V(t) - W(t) は、データ ベクトルとノードの重み (両方とも n 次元) の間の距離です。 距離が離れるほど、変化するものは大きくなります。
ここまでやり遂げたのなら、休憩する価値があります。 SOM が反復的にトレーニングされる方法を確認しました。 これにより、SOM をユニークなものにする一般的なアイデアがわかりました。つまり、ノードの重みに応じて複数のノードの重みを更新する方法です。時間、BMU からの距離、データ ベクトルとノードの重みの間の距離。
SOM についてどこかで読んだことがあれば、人々が興奮しているのは、SOM が「トポロジーを維持する」ということです。これは、多次元空間で近接しているノードが SOM 内でも近接していることを単に派手に表現したものです。トレーニング後のグリッド。 これは、2 次元でグラフを作成するのは簡単ですが、多次元でははるかに難しいため、SOM グリッドを使用してデータを視覚化するのに役立ちます。
反復 SOM トレーニングについて学ぶことは、これらの特性を理解するのに役立ちますが、計算効率が高くありません。 そのため、JMP ではバッチ実際に SOM 計算を行うためのトレーニング方法。
バッチ学習 SOM
このアルゴリズムは、JMP Web サイトで説明されているものです。 SOM を一度に 1 つのデータ ベクトルでトレーニングする代わりに、すべてのデータ ベクトルを一度に使用できます。
手順は次のとおりです。
- 初期化するSOM ノードの重み (これは反復法でも同じです)
- 一斉に、 BMUを計算するトレーニングセット内の各データベクトルに対して。
- 新しいノードの重みを計算するこの式を使用すると、次のようになります。

BMU がノード j であるデータ ベクトルの数です。
はそれらすべてのデータベクトルの平均であり、は、どのノードがどの程度変更されるかを決定する近傍関数です。 それは、
私たちの増分トレーニングアルゴリズムで。
4. SOM が収束するまで 2 と 3 を繰り返します。
一度に計算が行われると、計算を追うのが難しくなる可能性がありますが、バッチ学習アルゴリズムの基本前提は、次のようなことに応じてノードを更新するのではなく、 1つデータ ベクトルに応じて更新します。全てデータ ベクトルを一度に (K 平均法のようなものです…)。 ありがたいことに、この方法により、JMP による SOM のトレーニングにかかる時間が短縮されることがよくあります。
JMPで
JMP では、SOM オプションは K-Means メニューにあります。 SOM を使用して、さまざまなアメリカのレストランのファストフード ハンバーガーをクラスター化してみましょう。 に行く分析 > クラスタリング > K 平均法。 [K-Means クラスター] ウィンドウが表示されます。 使用するすべての変数をクリックして、 Yボックスをクリックしてわかりました。
コントロール パネル内には、メソッドのドロップダウン メニューがあります。 選ぶ自己組織化マップ。 ここから、グリッドのサイズを選択できます。 2x2 を実行すると、長方形に配置された 4 つのノードが得られます。 クリック行く。
出力には、4 つのクラスターそれぞれの平均が自動的に表示されます。 これらのクラスターの割り当てを保存するには、SOM グリッド メニューの下の赤い三角形に移動し、「」を選択します。クラスターの保存”。 同じメニューで、「バイプロット」を参照して、SOM の視覚的表現を確認してください。 JMP は、最初の 2 つの主成分によってノード/クラスターをプロットします。 ここでは、クラスター 1 (上部) が他の 3 つからかなり離れているように見えます。 これは後でグラフ ビルダーで確認できます。

いくつかの変数を調べるだけでも、クラスター 1 がなぜこれほど異なっていたのかがわかり始めます。 タンパク質はまったく含まれていません。 データセットを見ると、クラスター 1 の品目はデザートである傾向があることがわかります。 
一方、クラスター 2 はカロリー、タンパク質、脂肪が豊富です。 それらの食品を食べた後、長時間起きていたい場合は、これらの食品に注意した方がよいかもしれません。
結論
自己組織化マップは、潜在的に高次元のデータを取得するマップを構築し、それをより管理しやすい 2D 形式にマッピングすることにより、データをクラスター化するのに便利なツールです。 でJMP , SOM は、K 平均法と同じくらい簡単に実装できます (たとえその背後にある計算がはるかに複雑であっても)。では、SOM を試すことで失うものは何でしょうか?
自己組織化マップ(SOM) は、多くの特徴を持つデータをクラスター化するために使用できる教師なし形式の機械学習です。 SOM はデータをクラスター化するだけでなく、クラスターをより簡単に視覚化できるように、データをより低い次元 (通常は 2 次元) に「マッピング」します。
Re: 自己組織化マップこんにちは、チェルシー
次元削減のために JMP で SOM を使用する方法の例はありますか?
私は通常、クラスタリングに SOM を使用しますが、予測変数の数を減らすためにも使用できることを知っています。
ありがとう
フェリーチェ