ClassificationKernel Predict ブロックの使用によるクラス ラベルの予測
この例では、ClassificationKernel Predictブロックを Simulink® のラベル予測に使用する方法を示します。このブロックは、観測値 (予測子データ) を受け入れて、学習済みのガウス カーネル分類モデルを使用することにより、その観測値の予測されたクラス ラベルとクラス スコアを返します。この例を完了するには、用意されている Simulink モデルを使用することも、新しいモデルを作成することもできます。
分類モデルの学習
この例では、ionosphere
データ セットを使用します。これには、レーダー反射の品質 (Y
) と、34 個の変数の予測子データ (X
) が含まれます。レーダー反射の品質は良好 ('g'
) または不良 ('b'
) のいずれかです。
ionosphere
データ セットを読み込みます。標本サイズを調べます。
load ionosphere
n = numel(Y)
n = 351
ガウス カーネル モデルレーダー反射は連続的に検出されるものとし、また、はじめの 300 個の観測値を入手しており、残りの 51 個はまだ入手していないとします。現在の標本と将来の標本にデータを分割します。
prsntX = X(1:300,:); prsntY = Y(1:300); ftrX = X(301:end,:); ftrY = Y(301:end);
現在利用できるすべてのデータを使用してガウス カーネル モデルに学習をさせます。予測子データを標準化するよう指定します。
kernelMdl = fitckernel(prsntX,prsntY,Standardize=true);
kernelMdl
は学習させたClassificationKernel
モデルです。ドット表記を使用して kernelMdl
のプロパティにアクセスできます。たとえば、「kernelMdl.ModelParameters
」と入力すると、学習済みモデルのパラメーターについての詳細情報を取得できます。
kernelMdl
の ClassNames
プロパティを使用して、陰性および陽性のクラス名をチェックします。
kernelMdl.ClassNames
ans = 2×1 cell
{'b'}
{'g'}
陰性のクラスは 'b'
で、陽性のクラスは 'g'
です。ClassificationKernel Predict ブロックの score 端子からの出力値は同じ順序です。1 番目および 2 番目の要素が、それぞれ陰性クラスのスコアおよび陽性クラスのスコアに対応します。
用意されている Simulink モデルを開く
この例では、ClassificationKernel Predictブロックを含む Simulink モデル slexClassificationKernelPredictExample.slx
が用意されています。この Simulink モデルを開くことも、次のセクションの説明に従って新しいモデルを作成することもできます。
Simulink モデル slexClassificationKernelPredictExample.slx
を開きます。
open_system("slexClassificationKernelPredictExample")
Simulink モデルを開くと、Simulink モデルを読み込む前に、ソフトウェアがコールバック関数 PreLoadFcn
のコードを実行します。slexClassificationKernelPredictExample
のコールバック関数 PreLoadFcn
には、学習済みモデルの変数 kernelMdl
がワークスペースにあるかどうかをチェックするコードが含まれています。ワークスペースに変数がない場合、PreLoadFcn
は標本データを読み込み、カーネル モデルに学習させ、Simulink モデルの入力信号を作成します。コールバック関数を表示するには、[モデル化] タブの [設定] セクションで、[モデル設定] をクリックし、[モデル プロパティ] を選択します。次に、[コールバック] タブで、[モデルのコールバック] ペインのコールバック関数 PreLoadFcn
を選択します。
Simulink モデルの作成
新しい Simulink モデルを作成するには、[空のモデル] テンプレートを開き、Statistics and Machine Learning Toolbox ライブラリの Classification セクションから ClassificationKernel Predict ブロックを追加します。Inport ブロックと Outport ブロックを追加して、それらを ClassificationKernel Predict ブロックに接続します。
ClassificationKernel Predict ブロックをダブルクリックして、[ブロック パラメーター] ダイアログ ボックスを開きます。[学習済みの機械学習モデルの選択] パラメーターを kernelMdl
として指定します。これは、学習済みのカーネル モデルを含むワークスペース変数の名前です。[リフレッシュ] ボタンをクリックします。ダイアログ ボックスの [学習済みの機械学習モデル] に、カーネル モデル kernelMdl
の学習に使用されるオプションが表示されます。[Add output port for predicted class scores] チェック ボックスをオンにして、2 番目の出力端子 score を追加します。
Inport ブロックを 1 つと Outport ブロックを 2 つ追加して、それらを ClassificationKernel Predict ブロックに接続します。ブロックには、34 個の予測子の値を含む観測値が必要です。Inport ブロックをダブルクリックし、[信号属性] タブで [端子の次元] を 34 に設定します。出力信号を入力信号と同じ長さに指定するには、[Inport] ダイアログ ボックスの [実行] タブで [サンプル時間] を 1 に設定します。[OK] をクリックします。
コマンド ラインで、Simulink モデルの構造体配列の形式で入力信号を作成します。構造体配列には、次のフィールドが含まれていなければなりません。
time
— 観測値がモデルに入力された時点。この例では、期間に 0 ~ 50 の整数を含めます。方向は予測子データ内の観測値に対応しなければなりません。したがって、この場合はtime
が列ベクトルでなければなりません。signals
—values
フィールドとdimensions
フィールドが含まれている、入力データを説明する 1 行 1 列の構造体配列。values
は予測子データの行列、dimensions
は予測子変数の個数です。
将来のレーダー反射用に適切な構造体配列を作成します。
radarReturnInput.time = (0:50)'; radarReturnInput.signals(1).values = ftrX; radarReturnInput.signals(1).dimensions = size(ftrX,2);
ワークスペースから信号データをインポートするには、次を実行します。
[コンフィギュレーション パラメーター] ダイアログ ボックスを開く。[モデル化] タブで、[モデル設定] をクリック。
[データのインポート/エクスポート] ペインで [入力] チェック ボックスをオンにし、隣のテキスト ボックスに「
radarReturnInput
」と入力。[ソルバー] ペインの [シミュレーション時間] で、[終了時間] を
radarReturnInput.time(end)
に設定。[ソルバーの選択] で、[タイプ] をFixed-step
に、[ソルバー] をdiscrete (no continuous states)
に設定。これらの設定により、radarReturnInput
の各クエリ点についてのシミュレーションをモデルで実行できます。[OK] をクリックします。
詳細は、シミュレーションのための信号データの読み込み (Simulink)を参照してください。
モデルを Simulink で slexClassificationKernelPredictExample.slx
として保存します。
モデルのシミュレーション
Simulink モデルをシミュレートし、シミュレーション出力をワークスペースにエクスポートします。Inport ブロックは、観測値を検出すると、その観測値を ClassificationDiscriminant Predict ブロックに配置します。シミュレーション データ インスペクター (Simulink)を使用して、Outport ブロックのログ データを表示できます。
simOut = sim("slexClassificationKernelPredictExample");
シミュレートされた分類ラベルを調べます。
outputs = simOut.yout;
sim_label = outputs.get("label").Values.Data;
真のラベル (ftrY
) と Simulink モデルによって予測されたラベル (sim_label
) から混同行列チャートを作成します。
confusionchart(string(ftrY),string(sim_label))
対角線上の値が大きい場合は、対応するクラスについての予測が正確であることを示します。
参考
ClassificationKernel Predict | fitckernel
| predict