自己組織化マップ
自己組織化マップ(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
このアルゴリズムは、JMPWebサイトで説明されているものです。 SOMを一度に1つのデータベクトルでトレーニングする代わりに、すべてのデータベクトルを一度に使用できます。
手順は次のとおりです。
- 初期化SOMノードの重み(これは反復法でも同じです)
- 一斉に、 BMUを計算するトレーニングセットの各データベクトルに対して。
- 新しいノードの重みを計算しますこの式を使用することにより:

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

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