5

だから私は(はずの)単純なものに困惑しています:

単純な 'play' 2 次元データ セットの SOM を作成しました。データは次のとおりです。

ここに画像の説明を入力

自分で3つのクラスターを作ることができます。

さて、私を混乱させる2つのことがあります。1 つ目は、私が持っているチュートリアルでは、SOM が作業を開始する前にデータを正規化することです。これは、各データ ベクトルの長さが 1 になるように正規化することを意味します (ユークリッド ノルム)。これを行うと、データは次のようになります。

ここに画像の説明を入力

(これは、すべてのデータが単位円に投影されているためです)。

したがって、私の質問は次のとおりです。

1) これは正しいですか? データを単位円に射影するのは、3 つのクラスターを作ることができなくなるため、うまくいかないようです... これは SOM にとって現実的なことですか? (つまり、それらは単位円でのみ機能します)。

2) 関連する 2 番目の質問は、データが長さ 1 になるように正規化されるだけでなく、反復ごとに各出力ユニットの重みベクトルも正規化されるということです。重みベクトルが「爆発」しないようにこれを行うことは理解していますが、重みベクトルの全体的なポイントは距離情報を保持することであるため、私には間違っているようです。それらを正規化すると、適切に「クラスター化」する能力が失われます。たとえば、SOM は、左下のクラスターと右上のクラスターをどのように区別できますか? 同じように単位円に投影されるためです。

私はこれに非常に混乱しています。データを SOM の単位長に正規化する必要がありますか? 重みベクトルも正規化する必要がありますか?

ありがとう!

編集

これは、 MATLAB の .mat ファイルとして保存されたデータです。シンプルな 2 次元データセットです。

4

2 に答える 2

10

入力データを正規化するかどうかを決定するには、これらのデータが何を表すかによって異なります。各データベクトルが空間ポイントを表す2次元(または3次元)の入力データでクラスタリングを行っているとします。最初の次元はx座標で、2番目の次元はy座標です。この場合、入力フィーチャ(各ディメンション)は相互に比較可能であるため、入力データを正規化しません。

2次元空間で再度クラスタリングを行っているが、各入力ベクトルが人の年齢と年収を表す場合、最初の特徴(次元)は年齢、2番目は年収であるため、入力特徴を正規化する必要があります。それらは、まったく異なるスケールで、異なるもの(異なる測定単位)を表します。これらの入力ベクトルを調べてみましょう:D1(25、30000)、D2(50、30000)およびD3(25、60000)。D2とD3はどちらも、D1と比較して機能の1つを2倍にしています。SOMはユークリッド距離測定を使用することに注意してください。Distance(D1、D2)= 25およびDistance(D1、D3)=30000。これは、最初の入力フィーチャ(年齢)に対して一種の「不公平」です。これは、2倍にすると、2番目の例( D1、D3)。

これも確認してください。これにも同様の例があります

入力データを正規化する場合は、各機能/ディメンション(入力データテーブルの各列)で正規化します。som_normalizeマニュアルからの引用:

「正規化は常に1変数の操作です」

正規化の簡単な説明についてもこれを確認してください。さらに読みたい場合は、これを試してください(第7章が必要です)

編集:

最も一般的な正規化方法は、各ディメンションデータを[0,1]にスケーリングするか、平均と標準偏差がゼロになるように変換することです。1つ目は、各入力からディメンション(列)の最小値を減算し、除算することによって行われます。最大値minun(その次元の)最小値を使用します。

Xi、norm =(Xi-Xmin)/(Xmax-Xmin)

Yi、norm =(Yi-Ymin)/(Ymax-Ymin)

2番目の方法では、各ディメンションの平均値を減算してから、標準偏差で除算します。

Xi、norm =(Xi-Xmean)/(Xsd)

それぞれの方法には長所と短所があります。たとえば、最初の方法はデータの外れ値に非常に敏感です。データセットの統計的特性を調べた後で選択する必要があります。

単位円での投影は、実際には正規化の方法ではなく、より多くの次元の縮小方法です。投影後に、各データポイントを単一の数値(角度など)に置き換えることができるためです。これを行う必要はありません。

于 2012-12-03T23:07:18.293 に答える
3

SOM トレーニング アルゴリズムでは、一連のさまざまな尺度を使用して、ベクトル (パターンと重み) 間の距離を計算します。それらのいくつかを挙げると(おそらく最も広く使用されています):ユークリッド距離と内積。ベクトルと重みを 1 に正規化すると、それらは同等になり、ネットワークが最も効果的な方法で学習できるようになります。たとえば、現在のデータを正規化しない場合、ネットワークは入力空間のさまざまな部分からさまざまなバイアスでポイントを処理します (値が大きいほど効果が大きくなります)。これが、ユニティへの正規化が重要であり、ほとんどの場合に適切なステップと見なされる理由です (具体的には、内積が尺度として使用される場合)。

単位円に正規化する前に、ソース データを準備する必要があります。両方の軸でデータを [-1, 1] 領域にマップする必要があります。これにはいくつかのアルゴリズムがあり、そのうちの 1 つは単純な式を使用します。

mult_factor = 2 / (最大 - 最小);
オフセット係数 = 1 - 2 * 最大 / (最大 - 最小),

ここでmin、 およびmaxは、事前にわかっている場合は、データ セットまたはドメイン境界の最小値と最大値です。すべてのディメンションは個別に処理されます。あなたの場合、これは X 座標と Y 座標になります。

Xnew = Xold * Xmult_factor + Xoffset_factor、i = 1..N
Ynew = Yold * Ymult_factor + Yoffset_factor、i = 1..N

minマッピング前とマッピング前の実際の値max(これは [0,1] または [-3.6, 10] の場合) に関係なく、マッピング後は [-1, 1] の範囲に分類されます。 . 実際、上記の式はデータを範囲 [-1, 1] に変換するためのものです。これは、ある範囲から別の範囲への一般的な変換プロセスの特殊なケースにすぎないためです。

data[i] = (data[i] - old_min) * (new_max - new_min) / (old_max - old_min) + new_min;

マッピングの後、単位円への正規化を進めることができます。このようにして、最終的に中心に [0, 0] を持つ円が得られます。

詳細については、このページを参照してください。このサイトは一般的なニューラル ネットワークに関するものではありませんが、この特定のページでは、データの正規化に関する説明的なグラフなど、SOM について適切に説明しています。

于 2012-12-03T20:09:11.303 に答える