自己組織化マップによるデータのクラスタリング
データのクラスタリングは、ニューラル ネットワークのもう 1 つの優れた用途です。このプロセスでは、類似性によるデータのグループ化が行われます。たとえば、次のことを実行できます。
購買パターンに応じた消費者のグループ化による市場セグメンテーション
関連するサブセットへのデータの分割によるデータ マイニング
関連する表現パターンを使用した遺伝子のグループ化によるバイオインフォマティクス解析
花弁の長さ、花弁の幅、萼片の長さ、およびがく片の幅に応じて、花の種類をクラスタリングするとします。これらの 4 つの測定値に対する 150 個のサンプル ケースがあります。
関数近似およびパターン認識の場合と同様に、この問題を解くには 2 つの方法があります。
ニューラル ネット クラスタリング アプリを使用したデータのクラスタリングの説明に従って、ニューラル ネット クラスタリング アプリを使用。
コマンド ライン関数を使用したデータのクラスタリングの説明に従って、コマンド ライン関数を使用。
通常、はじめにアプリを使用し、次にアプリを使用してコマンド ライン スクリプトを自動的に生成することをお勧めします。どちらの方法を使用する場合にも、まずデータ セットを選択することによって問題を定義します。それぞれのニューラル ネットワーク アプリからサンプル データ セットにアクセスし、これらを使用してツールボックスを試すことができます (浅層ニューラル ネットワーク用のサンプル データ セットを参照してください)。特定の問題を解く必要がある場合、独自のデータをワークスペースに読み込むことができます。次の節では、データ形式について説明します。
問題の定義
クラスタリング問題を定義するには、入力ベクトル (予測子) が入力行列の列としてクラスタリングされるように配置します。たとえば、次の 10 個の 2 要素ベクトルのセットをクラスタリングする場合が考えられます。
predictors = [7 0 6 2 6 5 6 1 0 1; 6 2 5 0 7 5 5 1 2 2]
次の節では、ニューラル ネット クラスタリング アプリを使用して、データをクラスタリングするようにネットワークに学習させる方法を説明します。この例では、ツールボックスに用意されているサンプル データ セットを使用します。
ニューラル ネット クラスタリング アプリを使用したデータのクラスタリング
この例では、"ニューラル ネット クラスタリング" アプリを使用して、データをクラスタリングするように浅層ニューラル ネットワークに学習させる方法を説明します。
nctool
を使用して、"ニューラル ネット クラスタリング" アプリを開きます。
nctool
データの選択
"ニューラル ネット クラスタリング" アプリには、ニューラル ネットワークの学習を始めるのに役立つサンプル データが用意されています。
サンプルのアヤメの花クラスタリング データをインポートするには、[インポート]、[アヤメの花データ セットのインポート] を選択します。ファイルまたはワークスペースから自分のデータをインポートする場合は、予測子、および観測値が行と列のどちらで与えられるかを指定しなければなりません。
インポートしたデータに関する情報は、[モデルの概要] に表示されます。このデータ セットには、それぞれ 4 個の特徴をもつ 150 個の観測値が含まれています。
ネットワークの作成
クラスタリング問題では、自己組織化特徴マップ (SOM) がネットワークとして最もよく使用されます。このネットワークには 1 つの層と、グリッドに配置されたニューロンがあります 自己組織化マップは、類似性に基づいてデータをクラスタリングするように学習します。SOM の詳細については、自己組織化マップ ニューラル ネットワークによるクラスター化を参照してください。
ネットワークを作成するには、グリッドの行および列の数と対応するように、マップのサイズを指定します。この例では、[マップ サイズ] の値を 10 に設定します。これは、10 行 10 列のグリッドに対応します。ニューロンの総数はグリッド内の点の数と等しくなります。この例では、マップ内のニューロンの数は 100 個になります。ネットワーク アーキテクチャは [ネットワーク] ペインで確認できます。
ネットワークの学習
ネットワークの学習を行うには、[学習] をクリックします。[学習] ペインで学習の進行状況を確認できます。いずれかの停止条件が満たされるまで学習が続行されます。この例では、最大エポック数に達するまで学習が続行されます。
結果の解析
学習結果を解析するには、プロットを生成します。SOM の学習の場合、各ニューロンに関連付けられた重みベクトルが移動して、入力ベクトルのクラスターの中心になります。さらに、トポロジ内で互いに隣接するニューロンが入力空間内で相互に接近して移動するため、2 次元のネットワーク トポロジで高次元の入力空間を可視化できます。SOM の既定のトポロジは六角形です。
SOM サンプル ヒットをプロットするには、[プロット] セクションで [サンプル ヒット] をクリックします。この図は、トポロジ内のニューロンの位置、およびそれぞれのニューロン (クラスター中心) に関連付けられている観測値の数を示しています。トポロジは 10x10 のグリッドであるため、ニューロンの数は 100 個になります。ニューロンに関連付けられている最大のヒット数は 5 です。そのため、そのクラスターには 5 個の入力ベクトルがあります。
重み平面 ("成分平面" とも呼ばれます) をプロットします。[プロット] セクションで [重み平面] をクリックします。この図は、入力の特徴の各要素 (このサンプルでは 4 個) に対する重み平面を示しています。このプロットは、各入力を各ニューロンに結合する重みを示したもので、濃い色ほど重みが大きいことを表しています。2 つの特徴の結合パターンが非常に似ている場合、特徴に高い相関があると想定できます。
ネットワーク性能に満足できない場合、次のいずれかを行うことができます。
ネットワークに再度学習させる。学習を行うたびにネットワークの初期の重みとバイアスが変更されるため、再学習後に改善されたネットワークが生成される可能性があります。
マップのサイズを大きくすることにより、ニューロンの数を増やす。
より大規模な学習データ セットを使用する。
追加のテスト セットでネットワーク性能を評価することもできます。ネットワークを評価するための追加のテスト データを読み込むには、[テスト] セクションで [テスト] をクリックします。プロットを生成して追加のテスト結果を解析します。
コードの生成
[コード生成]、[単純な学習スクリプトを生成] を選択して MATLAB コードを作成することにより、コマンド ラインで以前に実行したステップを再現できます。MATLAB コードの作成は、ツールボックスのコマンド ライン機能を使用して学習プロセスをカスタマイズする方法を学ぶ必要がある場合に便利です。コマンド ライン関数を使用したデータのクラスタリングでは、生成されるスクリプトについてさらに詳しく説明します。
ネットワークのエクスポート
学習済みネットワークをワークスペースまたは Simulink® にエクスポートできます。MATLAB Compiler™ ツールなどの MATLAB コード生成ツールを使用してネットワークを展開することもできます。学習済みネットワークとその結果をエクスポートするには、[モデルのエクスポート]、[ワークスペースにエクスポート] を選択します。
コマンド ライン関数を使用したデータのクラスタリング
ツールボックスのコマンド ライン機能の使用方法を学ぶ最も簡単な方法は、アプリからスクリプトを生成し、これらのスクリプトを変更してネットワークの学習をカスタマイズすることです。例として、前の節で ニューラル ネット クラスタリング アプリを使用して作成した簡単なスクリプトを見てみましょう。
% Solve a Clustering Problem with a Self-Organizing Map % Script generated by Neural Clustering app % Created 21-May-2021 10:15:01 % % This script assumes these variables are defined: % % irisInputs - input data. x = irisInputs; % Create a Self-Organizing Map dimension1 = 10; dimension2 = 10; net = selforgmap([dimension1 dimension2]); % Train the Network [net,tr] = train(net,x); % Test the Network y = net(x); % View the Network view(net) % Plots % Uncomment these lines to enable various plots. %figure, plotsomtop(net) %figure, plotsomnc(net) %figure, plotsomnd(net) %figure, plotsomplanes(net) %figure, plotsomhits(net,x) %figure, plotsompos(net,x)
スクリプトを保存してコマンド ラインから実行すると、前の学習セッションの結果を再現できます。スクリプトを編集して、学習プロセスをカスタマイズすることもできます。この場合、スクリプトの各ステップに従います。
データの選択
このスクリプトは、予測子がワークスペースに読み込み済みであると仮定しています。データが読み込まれていない場合、次のように読み込むことができます。
load iris_dataset
このコマンドは、予測子 irisInputs
をワークスペースに読み込みます。
このデータ セットは、ツールボックスに含まれるサンプル データ セットの 1 つです。使用可能なデータ セットの詳細については、浅層ニューラル ネットワーク用のサンプル データ セットを参照してください。help nndatasets
コマンドを入力することによって、使用可能なすべてのデータ セットの一覧を表示することもできます。独自の変数名を使用して、これらのデータ セットから変数を読み込むことができます。たとえば、次のコマンド
x = irisInputs;
x
に読み込みます。ネットワークの作成
ネットワークを作成します。この例では、自己組織化マップ (SOM) を使用します。このネットワークには、グリッドに配置されたニューロンを含む 1 つの層があります 詳細については、自己組織化マップ ニューラル ネットワークによるクラスター化を参照してください。selforgmap
を使用してネットワークを作成する場合、グリッドの行および列の数を指定します。
dimension1 = 10; dimension2 = 10; net = selforgmap([dimension1 dimension2]);
ネットワークの学習
ネットワークに学習をさせます。SOM ネットワークでは、学習に既定のバッチ SOM アルゴリズムを使用します。
[net,tr] = train(net,x);
学習中は、学習ウィンドウが開き、学習の進行状況が表示されます。停止ボタン をクリックすると、任意の時点で学習を中断できます。
ネットワークのテスト
ネットワークをテストします。ネットワークの学習が終わったら、これを使用してネットワークの出力を計算できます。
y = net(x);
ネットワークの表示
ネットワーク図を表示します。
view(net)
結果の解析
SOM の学習の場合、各ニューロンに関連付けられた重みベクトルが移動して、入力ベクトルのクラスターの中心になります。さらに、トポロジ内で互いに隣接するニューロンが入力空間内で相互に接近して移動するため、2 次元のネットワーク トポロジで高次元の入力空間を可視化できます。既定の SOM トポロジは六角形です。これを表示するには、次のコマンドを入力します。
figure, plotsomtop(net)
この図で、それぞれの六角形はニューロンを表します。グリッドは 10x10 であるため、このネットワークのニューロンの合計数は 100 個になります。各入力ベクトルには 4 つの特徴があるため、入力空間は 4 次元です。重みベクトル (クラスター中心) はこの空間内にあります。
この SOM のトポロジは 2 次元であるため、4 次元のクラスター中心の関係を 2 次元で可視化できます。SOM の可視化ツールの 1 つは、"重み距離行列" です ("U 行列" とも呼ばれます)。
U 行列を表示するには、学習ウィンドウで [SOM 近傍距離] をクリックします。
この図で、青色の六角形はニューロンを表します。赤線は近傍ニューロンを結合する。赤線を含む領域内の色はニューロン間の距離を示す。濃い色は距離が遠いことを表し、薄い色は距離が近いことを表します。濃い色のセグメントの帯域は、マップを横断しています。SOM ネットワークによって、花が 2 つの異なるグループにクラスタリングされているようです。
次のステップ
コマンド ライン操作に慣れるため、次のタスクを試してみましょう。
学習中にプロット ウィンドウ (SOM 重み位置プロットなど) を開き、アニメーションを見る。
plotsomhits
、plotsomnc
、plotsomnd
、plotsomplanes
、plotsompos
、plotsomtop
などの関数を使用して、コマンド ラインからプロットする。
参考
ニューラル ネット フィッティング | ニューラル ネット時系列 | ニューラル ネット パターン認識 | ニューラル ネット クラスタリング | ディープ ネットワーク デザイナー | train