RegressionKernel Predict ブロックの使用による応答の予測
この例では、RegressionKernel Predictブロックを Simulink® の応答予測に使用する方法を示します。このブロックは、観測値 (予測子データ) を受け入れて、学習済みのガウス カーネル回帰モデルを使用することにより、その観測値の予測された応答を返します。この例を完了するには、用意されている Simulink モデルを使用することも、新しいモデルを作成することもできます。
回帰モデルの学習
carbig データ セットを読み込みます。このデータ セットには、1970 年代と 1980 年代初期に製造された自動車の測定値が格納されています。予測子変数を格納する行列と応答変数のベクトルを作成します。
load carbig
X = [Acceleration,Cylinders,Displacement,Horsepower,Model_Year,Weight];
Y = MPG;配列 X および Y から、それぞれの配列で NaN 値が含まれている行を削除します。NaN 値が含まれている行を削除してからデータを fitrkernel に渡すと、学習が高速化され、メモリ使用量が少なくなります。
R = rmmissing([X Y]); % Data with missing entries removed
X = R(:,1:6);
Y = R(:,end); カーネル回帰モデルに学習をさせます。
rng(0,"twister") % For reproducibility kernelMdl = fitrkernel(X,Y,Standardize=true);
kernelMdl はRegressionKernelモデルです。ドット表記を使用して kernelMdl のプロパティにアクセスできます。たとえば、「kernelMdl.ModelParameters」と入力すると、学習済みモデルのパラメーターについての詳細情報を取得できます。
用意されている Simulink モデルを開く
この例では、RegressionKernel Predictブロックを含む Simulink モデル slexRegressionKernelPredictExample.slx が用意されています。このセクションの以降の説明に従って、この Simulink モデルを開くことも、新しいモデルを作成することもできます。
Simulink モデル slexRegressionKernelPredictExample.slx を開きます。
open_system("slexRegressionKernelPredictExample")
Simulink モデルを開くと、モデルを読み込む前に、ソフトウェアがコールバック関数 PreLoadFcn のコードを実行します。slexRegressionKernelPredictExample のコールバック関数 PreLoadFcn には、学習済みモデルの変数 kernelMdl がワークスペースにあるかどうかをチェックするコードが含まれています。ワークスペースに変数がない場合、PreLoadFcn は標本データを読み込み、カーネル モデルに学習させ、Simulink モデルの入力信号を作成します。コールバック関数を表示するには、[モデル化] タブの [設定] セクションで、[モデル設定] をクリックし、[モデル プロパティ] を選択します。次に、[コールバック] タブで、[モデルのコールバック] ペインのコールバック関数 PreLoadFcn を選択します。
Simulink モデルの作成
新しい Simulink モデルを作成するには、[空のモデル] テンプレートを開き、Statistics and Machine Learning Toolbox™ ライブラリの Classification セクションから RegressionKernel Predict ブロックを追加します。Inport ブロックと Outport ブロックを追加して、それらを RegressionKernel Predict ブロックに接続します。
RegressionKernel Predict ブロックをダブルクリックして、[ブロック パラメーター] ダイアログ ボックスを開きます。[学習済みの機械学習モデルの選択] パラメーターを kernelMdl として指定します。これは、学習済みのカーネル モデルを含むワークスペース変数の名前です。[リフレッシュ] ボタンをクリックします。ダイアログ ボックスの [学習済みの機械学習モデル] に、カーネル モデル kernelMdl の学習に使用されるオプションが表示されます。

RegressionKernel Predict ブロックには、6 個の予測子の値を含む観測値が必要です。Inport ブロックをダブルクリックし、[信号属性] タブで [端子の次元] を 6 に設定します。
コマンド ラインで、Simulink モデルの構造体配列の形式で入力信号を作成します。構造体配列には、次のフィールドが含まれていなければなりません。
time— 観測値がモデルに入力された時点。方向は予測子データ内の観測値に対応しなければなりません。したがって、この例の場合はtimeが列ベクトルでなければなりません。signals—valuesフィールドとdimensionsフィールドが含まれている、入力データを説明する 1 行 1 列の構造体配列。valuesは予測子データの行列、dimensionsは予測子変数の個数です。
carsmall データ セットから、slexRegressionKernelPredictExample モデルに適切な構造体配列を作成します。
load carsmall
testX = [Acceleration,Cylinders,Displacement,Horsepower,Model_Year,Weight];
testX = rmmissing(testX);
carsmallInput.time = (0:size(testX,1)-1)';
carsmallInput.signals(1).values = testX;
carsmallInput.signals(1).dimensions = size(testX,2);ワークスペースから信号データをインポートするには、次を実行します。
[コンフィギュレーション パラメーター] ダイアログ ボックスを開く。[モデル化] タブで、[モデル設定] をクリック。
[データのインポート/エクスポート] ペインで [入力] チェック ボックスをオンにし、隣のテキスト ボックスに
carsmallInputと入力。[ソルバー] ペインの [シミュレーション時間] で、[終了時間] を
carsmallInput.time(end)に設定。[ソルバーの選択] で、[タイプ] をFixed-stepに、[ソルバー] をdiscrete (no continuous states)に設定。これらの設定により、carsmallInputの各クエリ点についてのシミュレーションをモデルで実行できます。[OK] をクリックします。
詳細は、シミュレーションのための信号データの読み込み (Simulink)を参照してください。
モデルを Simulink で slexRegressionKernelPredictExample.slx として保存します。
モデルのシミュレーション
sim("slexRegressionKernelPredictExample");Inport ブロックでは、観測値を検出すると、その観測値を RegressionKernel Predict ブロックに送ります。シミュレーション データ インスペクター (Simulink)を使用して、Outport ブロックのログ データを表示できます。
参考
RegressionKernel Predict | fitrkernel | predict