ゼファーネットのロゴ

自己組織化マップを使用した異常検出の初心者向けガイド

日付:

この記事は、の一部として公開されました データサイエンスブログソン

データに事前定義されたラベルがなく、モデルがパターンを推測し、データから特徴を抽出することによってデータをグループにセグメント化する教師なし学習は、データサイエンスの問題の中心です。 機械学習の世界では、セグメンテーションはデータの特性に基づいてデータをクラスター化するのに役立ちます。

セグメンテーションと同様に、自己組織化マップと呼ばれるディープラーニングの領域に並列手法が存在します。 この記事では、自己組織化マップとは何か、アーキテクチャ、トレーニング方法、アプリケーションとは何か、K-Meansクラスタリングとどのように似ているか、Pythonで実装するなど、この手法について詳しく説明します。

目次

  • 自己組織化マップとは何ですか?
  • 自己組織化マップのアーキテクチャ
  • 自己組織化マップはどのように学習しますか?
  • ベストマッチングユニット(BMU)
  • 自己組織化マップのK-meansクラスタリングへのアナロジー
  • Pythonでの自己組織化マップの実装

自己組織化マップとは何ですか?

Teuvo Kohonen教授によって発明された、Kohonen人工ニューラルネットワークまたはKohonenマップは、別の種類の人工ニューラルネットワーク(ANN)です。 自己組織化マップ(SOM)としてより有名に知られているこのマップは、教師なし学習の非常にまれな側面であり、データ視覚化手法です。

この手法の目標は、次元を削減し、特徴を検出することです。 マップは、高次元データを視覚化するのに役立ちます。 これは、自己組織化ニューラルネットワークを使用してXNUMX次元空間の多次元データを表します。 この手法は、データマイニング、顔認識、パターン認識、音声分析、産業および医療診断、異常検出に使用されます。

SOMの利点は、トレーニングデータセット(または入力)のトポロジ関係を保持することです。 図の形状やサイズを継続的に変更した後でも、入力データの基礎となるプロパティが影響を受けないことを意味します。 SOMは、簡単に識別できない相関関係を明らかにするのに役立ちます。

SOMがどのように構造化されているかを見て、アーキテクチャのニュアンスを理解しましょう…

のアーキテクチャ 自己組織化マップ

自己組織化マップ構造はニューロンの格子です。 グリッドのX座標とY座標では、各ノードは特定のトポロジ位置を持ち、入力変数と同じ次元の重みのベクトルで構成されます。

入力トレーニングデータは、n次元のベクトルのセット:x1、x2、x3…xnであり、各ノードは、n次元の対応する重みベクトルW:w1、w2、w3…wnで構成されます。

次の図では、ノード間の線は単に隣接関係を表しており、他のニューラルネットワークのように接続を示しているわけではありません。

自己組織化マップ

画像1

自己組織化マップは、入力信号のセットを受け入れて応答するニューロン(またはノード)の格子またはグリッドです。 各ニューロンには場所があり、互いに近くにあるニューロンは、同様のプロパティを持つクラスターを表します。 したがって、各ニューロンはトレーニングから学習したクラスターを表します。

SOMでは、応答が比較され、「勝つ」ニューロンが格子から選択されます。 この選択されたニューロンは、近隣のニューロンと一緒にアクティブ化されます。 SOMは、出力ノード間に横方向の接続がない場合、出力として任意の数のインジケーターのXNUMX次元マップを返します。

ここにあなたへの質問があります、あなたはSOMのために計算される必要がある損失関数は何だと思いますか? 教師なし学習手法であるため、ターゲット変数がないため、損失関数も計算されません。したがって、SOMに必要な後方伝播プロセスもありません。

どのように行います 自己組織化マップ 学び?

それでは、自己組織化マップアルゴリズムの学習メカニズムとは何かを理解しましょう。 ベータはどのように推定され、ネットワークはトレーニングされますか?

SOMトレーニングプロセスの基本的な考え方は、すべてのノードを調べて、重みが入力ベクトルに最も似ているXNUMXつのノードを見つけることです。 トレーニングは、いくつかのステップで、多くの反復にわたって実行されます。 これを以下で詳しく見てみましょう。

1つの入力信号x2、x3、およびx3があります。 この入力ベクトルは、トレーニングデータのセットからランダムに選択され、ラティスに提示されます。 したがって、以下のように3行XNUMX列のXNUMXつのノードを持つXNUMX * XNUMXのXNUMX次元配列の形のニューロンの格子があります。

可視出力ノード| 自己組織化マップ

画像2

理解のために、上記の3 * 3マトリックスを次のように視覚化します。

目に見える入力ノード

画像3

各ノードには、重みとしていくつかのランダムな値があります。 これらの重みは、次のようにニューラルネットワークのものではありません。

重量| 自己組織化マップ

画像4

これらの重みから、ユークリッド距離を次のように計算できます。

距離を計算する| 自己組織化マップ

画像5

SOMのトレーニングプロセスは次のとおりです。

  1. まず、すべての重みをランダムに初期化します。

  2. トレーニングセットから入力ベクトルx = [x1、x2、x3、…、xn]を選択します。

  3. 各ニューロンjのユークリッド距離を計算して、xを重みwjと比較します。 距離が最も短いニューロンが勝者として宣言されます。 勝ったニューロンはベストマッチングユニット(BMU)として知られています

  4. 勝者が入力ベクトルxになり、類似するようにニューロンの重みを更新します。

  5. 隣接するニューロンの重みは、入力ベクトルのように調整されます。 ノードがBMUに近いほど、その重みが変更されます。 調整されるパラメーターは、学習率と近隣関数です。 (近隣関数については以下で詳しく説明します)

  6. 与えられた反復でマップが収束するか、重みに変化が見られなくなるまで、ステップ2から繰り返します。

ベストマッチングユニット(BMU)

上で見たように、各ノード(または生データポイント)の距離は、すべての出力ノードから計算されます。 最短距離で識別されるノードまたはニューロンは、ベストマッチングユニット(BMU)または近隣です。 次の図では、(m)として示されています。

BMU | 自己組織化マップ

画像6

このBMUから、半径(またはシグマ)が定義されます。 BMUの半径に含まれるすべてのノードは、BMUからのそれぞれの距離に応じて更新されます。

したがって、ここで重要なのは、出力マップのニューロンは、多くの異なるベストマッチングユニットの半径の一部である可能性があるということです。 これにより、ニューロンに一定のプッシュおよびプル効果がもたらされますが、ニューロンの動作は、その近くのベストマッチングユニットにより類似しています。

各反復の後、半径が縮小し、BMUがプルするノードが少なくなるため、プロセスがますます正確になり、近傍が縮小して、特定のセグメントに属するデータポイントのセグメントのマッピングが減少します。 これにより、マップはますます具体的になり、最終的には収束を開始し、トレーニングデータ(または入力)のようになります。

クラスタリング

画像7

上の図では、ベストマッチングユニット(BMU)の近傍の半径が計算されています。 これは、パネルの右側のように大きく開始する値であり、通常はラティスの半径に設定されますが、タイムステップごとに減少します。 この半径内で見つかったノードはすべて、BMUの近隣内にあると見なされます。

SOMのK-meansクラスタリングへのアナロジー

K-MeansクラスタリングとSOMはどちらも、高次元のデータを低次元のデータに変換する手段です。 XNUMXつは機械学習アルゴリズムで、もうXNUMXつは深層学習アルゴリズムですが、このXNUMXつには類似点があります。

K-Meansクラスタリングでは、新しいデータポイントが提示されると、重心が更新され、Kの値を見つけるためのエルボー法などの方法があります。一方、自己組織化マップでは、ニューラルネットワークのアーキテクチャが変更されて重みとニューロンの数は調整パラメーターです。

Pythonでの自己組織化マップの実装

Pythonで不正な顧客を検出するために、自己組織化マップ手法を採用します。 データには、クラスラベルとcustomerIDに加えて、690のレコードと16の機能があります。 SOMは教師なし手法であるため、ここではクラス列を使用せず、customerID列も必要ありません。 データセットとコードは私からアクセスできます GitHubの リポジトリ。

SOMは、識別された特定のデータポイントのグループをマップするために色分けが採用されているXNUMX次元マップを返します。

Pythonでは、自己組織化マップの実行に使用されるMinisomというライブラリを使用します。

import numpy as np import matplotlib.pyplot as plt import pandas as pd#Minisomライブラリとモジュールは、minisomから自己組織化マップを実行するために使用されますimport MiniSom
#データの読み込みdata = pd.read_csv( 'Credit_Card_Applications.csv')#X data#データの形状:data.shape#データの情報:data.info()

自己組織化マップの場合、X変数のみが必要です。 この場合、customerIDは一意の変数であり、Y(ターゲット変数)も使用しないため、必要ありません。

ただし、ターゲット変数(Y)を使用して、出力が入力と一致しているかどうかを理解できます。

#SOMの入力用のX変数の定義
X = data.iloc [:、1:14] .values y = data.iloc [:、-1] .values#X変数:
pd.DataFrame(X)

X変数のスケーリング:

sklearn.preprocessingからインポートMinMaxScalersc = MinMaxScaler(feature_range =(0、1))X = sc.fit_transform(X)pd.DataFrame(X)

SOMは、ニューロンのXNUMX次元配列です。 したがって、SOMを定義するには、x次元とy次元の順に必要な行と列およびニューロンの数を知る必要があります。 SOMのパラメーターは次のとおりです。

  • x:som_grid_rowsは、行数です
  • y:som_grid_columnsは、列の数です
  • シグマは近傍半径です
  • Learning_rate

xとyはSOMの次元であるため、これらは小さくするべきではなく、すべての反復でこれらの値が調整されるため、Sigmaとlearning_rateはより高い値を取ることができます。 半径の初期値は1ですが。

#ハイパーパラメータを設定しますsom_grid_rows = 10 som_grid_columns = 10反復= 20000シグマ= 1 Learning_rate = 0.5

x = 10およびy = 10をそれぞれの行数および列数(次元)として使用すると、10 * 10は100セグメントを意味します。 反復を実行するために、任意の順序ではなく、ランダムに観測を行います。

#SOMを定義します:som = MiniSom(x = som_grid_rows、y = som_grid_columns、input_len = 13、sigma = sigma、learning_rate = learning_rate)#重みを初期化するsom.random_weights_init(X)#トレーニングsom.train_random(X、反復)

重みと重みからの距離マップは次のとおりです。

#重みは次のとおりです。wts= som.weights#重みの形状は次のとおりです。wts.shape#重みから距離マップを返します:som.distance_map()

平均介在ニューロン距離(MID)を計算します。これは、メインニューロンとその近傍の平均ユークリッド距離です。

  • MIDが高いほど、近隣から勝者ノードが離れます。
  • 近隣から遠く離れたベストマッチングユニットは、通常、クラスターから遠く離れています。
  • 一部の値の距離がより類似している場合、つまりMIDに関して距離が小さい場合、それらの値はより近く、互いに類似しています。

Pcolor()はすべてのMIDに色を付けるために使用され、ウィンドウはbone()です。

from pylab import plot、axis、show、pcolor、colorbar、bone bone()pcolor(som.distance_map()。T)#背景としての距離マップcolorbar()show()

病気の患者を識別するために、ラベルごとに異なる色とマーカーを使用します。 SOMの原則を説明するために使用される最も一般的な例は、赤、緑、青のXNUMX次元からXNUMX次元への色のマッピングです。 ヒートマップに示されている外れ値が実際の詐欺の顧客と一致しているかどうかにかかわらず、次の方法でクロスチェックできます。

bone()pcolor(som.distance_map()。T)colorbar()#凡例マーカーを与える= ['o'、 's']#観測が不正の場合は赤い円形、そうでない場合は緑の正方形の色= ['r' 、 'g'] for i、x in enumerate(X):w = som.winner(x)plot(w [0] + 0.5、w [1] + 0.5、markers [y [i]]、markeredgecolor = colors [y [i]]、markerfacecolor = 'なし'、markersize = 10、markeredgewidth = 2)show()
  • 詐欺を区別するために使用されるマーカーは次のとおりです。
    • レッドサーキュラーは詐欺の顧客としてクラス0です
    • グリーンスクエアは詐欺の顧客ではないためクラス1です
  • iはインデックス、xは各値のベクトルであり、各xについて最初に勝者ノードを取得します
  • 勝者ノードの座標はw [0]とw [1]で、マーカーを中央に配置するために0.5が追加されます
  • sは正方形で、マーカーの面の色はマーカーの内側の色です

上記のマッピングを持たない顧客がいるため、それらはセグメントの一部ではありません。 セグメントの一部を形成する値を表示するには:

マッピング= som.win_map(data)マッピングmappings.keys()len(mappings.keys())マッピング[(9,8)] ヒートマップから赤いサーキュラーの一部を取得し、詐欺としてマッピングします。
frauds = np.concatenate((mappings [(0,9)]、mappings [(8,9)])、axis = 0)frauds#詐欺である顧客のリスト:frauds1 = sc.inverse_transform(frauds)pd。 DataFrame(frauds1)

残念

以下の概略図は、自己組織化マップの動作を示しています。

画像8

  • 自己組織化マップアルゴリズムは、データのトポロジを保持しながら、高次元データをXNUMX次元マップに投影し、同様のデータポイントがマップ上の近くの場所にマップされるようにします。

  • この手法では、監視なしでデータを分類します。ターゲットベクトルがないため、逆方向の伝播もありません。

  • SOMの出力はXNUMX次元マップであり、色分けを使用してデータポイントの特定のグループを識別します。

この記事がお役に立てば幸いです。あなたは何か新しいことを学びました。 記事を読んでネットワークと共有するのを手伝ってくれてありがとう🙂

ハッピーラーニング! 🙂

私について

やあ! ネハセスです。 私は五大湖経営研究所でデータサイエンスとエンジニアリングの大学院プログラムを、統計学の学士号を取得しています。 私はとして紹介されています 10年に最も人気のあるゲスト作家トップ2020 Analytics Vidhya(AV)について。

私の興味のある分野は、NLPとディープラーニングです。 私もCFAプログラムに合格しました。 あなたは私に連絡することができます LinkedIn 私の他のブログを読むことができます AV。

参考文献

https://en.wikipedia.org/wiki/Teuvo_Kohonen

画像ソース

  1. Image 1: https://static-01.hindawi.com/articles/cin/volume-2016/2476256/figures/2476256.fig.002.svgz
  2. 画像2:63_blog_image_2.png(671×663)(sds-platform-private.s3-us-east-2.amazonaws.com)
  3. 画像3:63_blog_image_3.png(671×663)(sds-platform-private.s3-us-east-2.amazonaws.com)
  4. 画像4:63_blog_image_4.png(671×663)(sds-platform-private.s3-us-east-2.amazonaws.com)
  5. 画像5:63_blog_image_5.png(671×663)(sds-platform-private.s3-us-east-2.amazonaws.com)
  6. 画像6:https://www.researchgate.net/publication/350552111/figure/fig2/AS:[メール保護]/ベストマッチングユニットインザセルフオーガナイズマップSOM.png
  7. 画像7:mathworks.com
  8. 画像8:https://www.researchgate.net/profile/Bruno-Senzio/publication/313160273/figure/fig2/AS:[メール保護]/SOM-Structure-and-Update-of-Best-Matching-Uni​​t-19.png

この記事に示されているメディアは、Analytics Vidhyaが所有しておらず、作成者の裁量で使用されています。

PlatoAi。 Web3の再考。 増幅されたデータインテリジェンス。
アクセスするには、ここをクリックしてください。

出典:https://www.analyticsvidhya.com/blog/2021/09/beginners-guide-to-anomaly-detection-using-self-organizing-maps/

スポット画像

最新のインテリジェンス

スポット画像

私たちとチャット

やあ! どんな御用でしょうか?