Main Content

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

RegressionTree Predict ブロックの使用による応答の予測

この例では、RegressionTree Predictブロックを Simulink® の応答予測に使用する方法を示します。このブロックは、観測値 (予測子データ) を受け入れて、学習済みの回帰木モデルを使用することにより、その観測値の予測された応答を返します。

回帰モデルの学習

carbigデータセットを読み込みます。このデータセットには、1970 年代と 1980 年代初期に製造された自動車の測定値が格納されています。予測子変数を格納する行列と応答変数のベクトルを作成します。

loadcarbigX = [Acceleration,Cylinders,Displacement,Horsepower,Model_Year,Weight]; Y = MPG;

回帰木モデルの学習を行います。

treeMdl = fitrtree(X,Y);

treeMdlRegressionTreeモデルです。

Simulink モデルの作成

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

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

SimMdlName ='slexCarDataRegressionTreePredictExample'; open_system(SimMdlName)

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

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

RegressionTree Predict ブロックをダブルクリックして、[ブロック パラメーター] ダイアログ ボックスを開きます。学習済みのツリー モデルを含むワークスペース変数の名前を指定できます。既定の変数名はtreeMdlです。[更新]ボタンをクリックします。ダイアログ ボックスの[Trained Machine Learning Model]に、ツリー モデルtreeMdlの学習に使用されるオプションが表示されます。

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

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

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

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

carsmallデータ セットから、slexCarDataRegressionTreePredictExampleモデルに適切な構造体配列を作成します。

loadcarsmalltestX = [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)に設定。

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

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

sim(SimMdlName);

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

参考

関連するトピック