MATLAB:自己組織化マップ (SOM) クラスタリング
-
18-09-2019 - |
質問
身体部分間の角度に応じていくつかの画像をクラスタリングしようとしています。
各画像から抽出される特徴は次のとおりです。
angle1 : torso - torso
angle2 : torso - upper left arm
..
angle10: torso - lower right foot
したがって、入力データはサイズ 1057x10 の行列になります。1057 は画像の数を表し、10 は胴体と身体部分の角度を表します。同様に、testSet は 821x10 の行列です。
入力データのすべての行を 88 個のクラスターでクラスター化したいと考えています。次に、これらのクラスターを使用して、TestData がどのクラスターに分類されるかを見つけます。
前作では使っていましたが、 K-Means クラスタリング それはとても簡単です。K-Means にデータを 88 個のクラスターにクラスター化するように依頼するだけです。さらに、テスト データの各行と各クラスターの中心の間の距離を計算し、最小値を選択する別のメソッドを実装します。これは、対応する入力データ行のクラスターです。
質問が 2 つあります。
これを使用してこれを行うことは可能ですか SOM MATLABで?私の知る限り、SOMは視覚的なクラスタリング用です。ただし、後でどのクラスターに属するかを計算してテスト データにラベルを付けることができるように、各クラスターの実際のクラスを知る必要があります。
もっと良い解決策はありますか?
解決
自己組織化マップ (SOM) の教師なしバリエーションとみなされるクラスタリング手法です。 人工ニューラルネットワーク (ANN). 。それは使用しています 競争学習 ネットワークをトレーニングするための技術 (特定のデータに対して最も強力なアクティベーションを表示するためにノード間で競合します)
SOM は、相互接続されたノードのグリッド (正方形、六角形など) で構成されているかのように考えることができます。各ノードは、重みの N 次元ベクトル (クラスター化するデータ ポイントと同じ次元サイズ) です。
アイデアはシンプルです。SOM への入力としてベクトルが与えられると、ノードが見つかります。 クローゼット 次に、その重みと隣接ノードの重みを更新して、入力ベクトルの重みに近づくようにします (したがって、自己組織化という名前が付けられています)。このプロセスはすべての入力データに対して繰り返されます。
形成されるクラスターは、ノードがどのように組織化され、同様の重みを持つノードのグループを形成するかによって暗黙的に定義されます。視覚的に簡単に確認できます。
SOM はある意味で K 平均法アルゴリズム ただし、固定数のクラスターを課すのではなく、データに適応させたいグリッド内のノードの数と形状を指定する点が異なります。
基本的に、トレーニング済みの SOM があり、新しいテスト入力ベクトルを分類したい場合は、それをグリッド上の最も近い (類似性の尺度としての距離) ノードに割り当てるだけです (ベストマッチングユニット BMU)、その BMU ノードに属するベクトルの [多数派] クラスを予測として与えます。
MATLAB の場合は、SOM を実装するツールボックスが多数あります。
- の ニューラル ネットワーク ツールボックス MathWorks からは、 使用済み のために SOMを使用したクラスタリング (を参照してください。
nctool
クラスタリングツール)。 - また、チェックする価値があるのは、 SOM ツールボックス