問題タブ [self-organizing-maps]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
machine-learning - SOM でデータや重みベクトルを正規化するのは正しいですか?
だから私は(はずの)単純なものに困惑しています:
単純な 'play' 2 次元データ セットの SOM を作成しました。データは次のとおりです。
自分で3つのクラスターを作ることができます。
さて、私を混乱させる2つのことがあります。1 つ目は、私が持っているチュートリアルでは、SOM が作業を開始する前にデータを正規化することです。これは、各データ ベクトルの長さが 1 になるように正規化することを意味します (ユークリッド ノルム)。これを行うと、データは次のようになります。
(これは、すべてのデータが単位円に投影されているためです)。
したがって、私の質問は次のとおりです。
1) これは正しいですか? データを単位円に射影するのは、3 つのクラスターを作ることができなくなるため、うまくいかないようです... これは SOM にとって現実的なことですか? (つまり、それらは単位円でのみ機能します)。
2) 関連する 2 番目の質問は、データが長さ 1 になるように正規化されるだけでなく、反復ごとに各出力ユニットの重みベクトルも正規化されるということです。重みベクトルが「爆発」しないようにこれを行うことは理解していますが、重みベクトルの全体的なポイントは距離情報を保持することであるため、私には間違っているようです。それらを正規化すると、適切に「クラスター化」する能力が失われます。たとえば、SOM は、左下のクラスターと右上のクラスターをどのように区別できますか? 同じように単位円に投影されるためです。
私はこれに非常に混乱しています。データを SOM の単位長に正規化する必要がありますか? 重みベクトルも正規化する必要がありますか?
ありがとう!
編集
これは、 MATLAB の .mat ファイルとして保存されたデータです。シンプルな 2 次元データセットです。
matlab - MATLAB での SOM のメモリ不足
SOM を使用して 80000X10 サンプル (各サンプルはサイズ 10 のベクトル) を学習しようとしています。しかし、10000X1 サンプルで 8x8 ネットを構成することさえできません。「メモリ不足」エラーがスローされます。
これが私のコードです(データは80000X10マトリックスです):
Matlab ヘルプ: 「構成されていないネットワークは、train が初めて呼び出されたときに自動的に構成および初期化されます。」
8000X1 データセットの場合でも、かなりの時間がかかります。numWeightElements: 512000
変数が大きいことに気付きましたnet
(8*8*8000=512000)。重みは 8*8 にする必要があります。SOM トレーニング アルゴリズムは、これほど多くのメモリを使用するべきではありません。なにが問題ですか?
メモリ コマンドの出力:
algorithm - サンプリングされた信号の類似性アルゴリズム (数学)
いくつかの信号をサンプリングし、それぞれのサンプルのベクトルを構築したとしましょう。これらのベクトルの (非) 類似度を計算する最も効率的な方法は何ですか? サンプリングのオフセットはカウントしてはならないことに注意してください。たとえば、sin 信号と cos 信号のサンプル ベクトルは類似していると見なす必要があります。
他のベクトルの単位を「ローリング」し、各ロール ポイントのユークリッド距離を計算し、最終的に最適な一致 (最小距離) を選択することで、これを行う簡単な方法があります。私の唯一の目標は、ベクトルプールからの入力信号の最も類似したサンプルベクトルを見つけることであるため、このソリューションはうまく機能します。
ただし、ベクトルの次元が大きくなると、上記の解決策も非常に非効率的になります。N 次元ベクトルの「非順次ベクトル マッチング」と比較すると、順次マッチングでは N 倍のベクトル距離計算が必要になります。
異なるオフセットを持つ 2 つのシーケンスを比較するためのより高い/より優れた数学/アルゴリズムはありますか?
このユースケースは、SOM を使用したシーケンス類似性の視覚化です。
編集:各ベクトルの積分とエントロピーを比較するのはどうですか? どちらも「シーケンスセーフ」(= 時不変?) であり、計算が非常に高速ですが、考えられるすべての信号を互いに区別するには、それらだけで十分であるとは思えません。これらに加えて使用できるものは他にありますか?
EDIT2: Victor Zamanianの返信は直接の答えではありませんが、そうかもしれないという考えを私に与えました. 解決策は、フーリエ変換係数を計算し、それらをサンプル ベクトルに挿入することによって元の信号をサンプリングすることです。最初の要素 (X_0) は信号の平均または「レベル」であり、次の (X_n) を直接使用して他のサンプル ベクトルとの類似性を比較できます。FT で計算された係数が多いほど、FT された信号がより正確に表現されるため、n が小さいほど、類似度の計算に影響を与えるはずです。これにより、おまけの質問が表示されます。
FT-6 でサンプリングされたベクトルがあるとしましょう (値は空から落ちてきました)
- X = {4、15、10、8、11、7}
- Y = {4、16、9、15、62、7}
これらのベクトルの類似値は次のように計算できます: |16-15| + (|10 - 9| / 2 ) + (|8 - 15| / 3 ) + (|11-62| / 4 ) + (|7-7| / 5 )
それらの太字のものはおまけの質問です。各FT係数が他の係数との関係で類似性にどの程度影響するかを知るための係数/他の方法はありますか?
self-organizing-maps - 自己組織化マップのような軽量な教師なし学習方法
CPU、RAM 使用率などのシステム パラメーターを使用して異常検出システムをトレーニングする教師なし学習方法を使用する軽量システムを開発しようとしています。自己組織化マップ以上のものは考えられませんでした。ここで検討できる他の学習手法はありますか?
artificial-intelligence - SOM (Self Organizing Maps) と K-Means の違いは何ですか?
これに関連する質問は、stackoverflow で 1 つだけあり、どちらが優れているかという問題です。ただ違いがよくわかりません。つまり、どちらもクラスターにランダムに割り当てられたベクトルを操作し、異なるクラスターの重心を操作して、勝者の出力ノードを決定します。つまり、違いは正確にどこにあるのでしょうか?
machine-learning - Kohonen SOM の可視化について
SOM でノードを視覚化する方法を理解 (および実装) しようとしています。高次元データでトレーニングした場合、高次元空間でノード間の距離を計算することしかできません。素敵な散布図やグリッドをプロットしたいのですが、どうすればよいですか?