Main Content

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

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

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

分類モデルの学習

この例では、ionosphereデータ セットを使用します。これには、レーダー反射の品質 (Y) と、34 個の変数の予測子データ (X) が含まれます。レーダー反射の品質は良好 ('g') または不良 ('b') のいずれかです。

ionosphereデータセットを読み込みます。標本サイズを調べます。

loadionospheren = 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 =2x1 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 モデルを含むワークスペース変数の名前です。[更新]ボタンをクリックします。ダイアログボックスの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が列ベクトルでなければなりません。

  • signalsフィールドとdimensionsフィールドが含まれている、入力データを説明する 1 行 1 列の構造体配列。は予測子データの行列、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)に設定。

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

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

sim(SimMdlName);

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

参考

関連するトピック