Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

ClassificationSVM Predict ブロックの使用によるクラス ラベルの予測

この例では、ClassificationSVM Predictブロックをラベル予測に使用する方法を示します。このブロックは、観測値 (予測子データ) を受け入れて、学習済みのサポート ベクター マシン (SVM) 分類モデルを使用することにより、その観測値の予測されたクラス ラベルとクラス スコアを返します。

分類モデルの学習

この例では、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);

現在利用できるすべてのデータを使用して SVM モデルに学習をさせます。予測子データを標準化するよう指定します。

svmMdl = fitcsvm(prsntX,prsntY,'Standardize',true);

svmMdlClassificationSVMモデルです。

svmMdlClassNames プロパティを使用して、陰性および陽性のクラス名をチェックします。

svmMdl.ClassNames
ans = 2×1 cell
    {'b'}
    {'g'}

陰性のクラスは 'b' で、陽性のクラスは 'g' です。ClassificationSVM Predict ブロックの [Score] 端子からの出力値は同じ順序です。1 番目および 2 番目の要素が、それぞれ陰性のクラス スコアおよび陽性のクラス スコアに対応します。

Simulink モデルの作成

この例では、ClassificationSVM Predictブロックを含む Simulink モデル slexIonosphereClassificationSVMPredictExample.slx が用意されています。この節の説明に従って、この Simulink モデルを開くことも、新しいモデルを作成することもできます。

Simulink モデル slexIonosphereClassificationSVMPredictExample.slx を開きます。

SimMdlName = 'slexIonosphereClassificationSVMPredictExample'; 
open_system(SimMdlName)

slexIonosphereClassificationSVMPredictExample のコールバック関数 PreLoadFcn には、標本データの読み込み、SVM モデルの学習、および Simulink モデルの入力信号の作成を行うコードが含まれています。Simulink モデルを開くと、Simulink モデルを読み込む前に、ソフトウェアが PreLoadFcn のコードを実行します。コールバック関数を表示するには、[モデル化] タブの [設定] セクションで、[モデル設定][モデル プロパティ] を選択します。次に、[コールバック] タブで、[モデルのコールバック] ペインのコールバック関数 PreLoadFcn を選択します。

新しい Simulink モデルを作成するには、空のモデル テンプレートを開き、ClassificationSVM Predict ブロックを追加します。Inport ブロックと Outport ブロックを追加して、それらを ClassificationSVM Predict ブロックに接続します。

ClassificationSVM Predict ブロックをダブルクリックして、[ブロック パラメーター] ダイアログ ボックスを開きます。Select trained machine learning model パラメーターを svmMdl として指定します。これは、学習済みの SVM モデルを含むワークスペース変数の名前です。アクション ボタン (縦に 3 つ並んだ点) をクリックするか、[モデル化] タブの [モデルの更新] をクリックします。ダイアログ ボックスの [Trained Machine Learning Model] には、分類のタイプと、SVM モデル svmMdl の学習に使用されるオプションが表示されます。[Add output port for predicted class scores] チェック ボックスをオンにして、2 番目の出力端子 [Score] を追加します。

ClassificationSVM Predict ブロックには、34 個の予測子の値を含む観測値が必要です。Inport ブロックをダブルクリックし、[信号属性] タブで [端子の次元] を 34 に設定します。

Simulink モデルの構造体配列の形式で、入力信号データを作成します。構造体配列には、次のフィールドが含まれていなければなりません。

  • time — 観測値がモデルに入力された時点。この例では、期間に 0 ~ 50 の整数を含めます。方向は予測子データ内の観測値に対応しなければなりません。したがって、この場合は time が列ベクトルでなければなりません。

  • signalsvalues フィールドと dimensions フィールドが含まれている、入力データを説明する 1 行 1 列の構造体配列。values は予測子データの行列、dimensions は予測子変数の個数です。

将来のレーダー反射用に適切な構造体配列を作成します。

radarReturnInput.time = (0:50)';
radarReturnInput.signals(1).values = ftrX;
radarReturnInput.signals(1).dimensions = size(ftrX,2);

ワークスペースから信号データをインポートするには、次を実行します。

  • [コンフィギュレーション パラメーター] ダイアログ ボックスを開く。[モデル化] タブで、[モデル設定] をクリック。

  • [データのインポート/エクスポート] ペインで [入力] チェック ボックスをオンにし、隣のテキスト ボックスに carsmallInput と入力。

  • [ソルバー] ペインの [シミュレーション時間] で、[終了時間]radarReturnInput.time(end) に設定。[ソルバーの選択] で、[タイプ]Fixed-step に、[ソルバー]discrete (no continuous states) に設定。

詳細は、シミュレーションのための信号データの読み込み (Simulink)を参照してください。

モデルをシミュレートします。

sim(SimMdlName);

Inport ブロックでは、観測値を検出すると、その観測値を ClassificationSVM Predict ブロックに送ります。シミュレーション データ インスペクター (Simulink)を使用して、Outport ブロックのログ データを表示できます。

参考

|

関連するトピック