# predict

## 構文

``ypred = predict(mdl,Xnew)``
``````[ypred,yci] = predict(mdl,Xnew)``````
``````[ypred,yci] = predict(mdl,Xnew,Name,Value)``````

## 説明

``ypred = predict(mdl,Xnew)` は、`Xnew` 内の点に対して予測した線形回帰モデル `mdl` の応答値を返します。`
``````[ypred,yci] = predict(mdl,Xnew)``` は、`Xnew` における応答の信頼区間も返します。```

``````[ypred,yci] = predict(mdl,Xnew,Name,Value)``` では、1 つ以上の名前と値のペアの引数を使用して追加オプションを指定します。たとえば、信頼区間の信頼度や予測タイプを指定できます。```

## 例

すべて折りたたむ

`carsmall` データセットから、自動車の燃費の 2 次モデルを重量とモデル年の関数として作成します。

```load carsmall X = Weight; y = MPG; mdl = fitlm(X,y,'quadratic');```

データに対する予測された応答を作成します。

`ypred = predict(mdl,X);`

```plot(X,y,'o',X,ypred,'x') legend('Data','Predictions')``` この例では、コマンド ラインで線形回帰モデルの予測を行うためのコード生成ワークフローについて簡単に説明します。詳細は、機械学習モデルの予測をコマンド ラインで行うコードの生成を参照してください。MATLAB Coder アプリを使用してコードを生成することもできます。詳細については、機械学習モデルの予測を MATLAB Coder アプリを使用して行うコードの生成を参照してください。

モデルの学習

`carsmall` データセットを読み込んで、2 次回帰モデルをあてはめます。

```load carsmall X = Weight; y = MPG; mdl = fitlm(X,y,'quadratic');```

モデルの保存

`saveCompactModel`を使用して、あてはめた 2 次モデルを `QLMMdl.mat` というファイルに保存します。

`saveCompactModel(mdl,'QLMMdl');`

エントリポイント関数の定義

• X に対応する測定値と、オプションの有効な名前と値のペアの引数を受け入れる。

• `QLMMdl.mat` 内のあてはめ済み 2 次モデルを読み込む。

• 予測と信頼区間の範囲を返す。

`type mypredictQLM.m % Display contents of mypredictQLM.m`
```function [yhat,ci] = mypredictQLM(x,varargin) %#codegen %MYPREDICTQLM Predict response using linear model % MYPREDICTQLM predicts responses for the n observations in the n-by-1 % vector x using the linear model stored in the MAT-file QLMMdl.mat, and % then returns the predictions in the n-by-1 vector yhat. MYPREDICTQLM % also returns confidence interval bounds for the predictions in the % n-by-2 vector ci. CompactMdl = loadCompactModel('QLMMdl'); [yhat,ci] = predict(CompactMdl,x,varargin{:}); end ```

MATLAB のアルゴリズムについてのコードを生成しようとしていることを指示するため、コンパイラ命令 `%#codegen` (またはプラグマ) をエントリポイント関数のシグネチャの後に追加します。この命令を追加すると、MATLAB Code Analyzer はコード生成時にエラーになる違反の診断と修正を支援します。

メモ: この例の右上にあるボタンをクリックして例を MATLAB® で開くと、例のフォルダーが開きます。このフォルダーには、エントリポイント関数のファイルが含まれています。

コードの生成

`codegen` を使用して、エントリポイント関数のコードを生成します。C および C++ は静的な型の言語なので、エントリポイント関数内のすべての変数のプロパティをコンパイル時に決定しなければなりません。データ型と正確な入力配列のサイズを指定するため、特定のデータ型および配列サイズをもつ一連の値を表す MATLAB® 式を渡します。名前と値のペアの引数の名前に対して`coder.Constant`を使用します。

コンパイル時に観測値の個数が不明である場合、`coder.typeof` を使用して可変サイズの入力を指定することもできます。詳細は、コード生成用の可変サイズ引数の指定エントリポイント関数の入力のプロパティの指定 (MATLAB Coder) を参照してください。

`codegen mypredictQLM -args {X,coder.Constant('Alpha'),0.1,coder.Constant('Simultaneous'),true}`

`codegen` は、プラットフォームに依存する拡張子をもつ MEX 関数 `mypredictQLM_mex` を生成します。

`predict``mypredictQLM_mex` を使用して、予測および信頼区間を比較します。`codegen` を呼び出したときの引数 `-args` と同じ順序で名前と値のペアの引数を指定します。

```Xnew = sort(X); [yhat1,ci1] = predict(mdl,Xnew,'Alpha',0.1,'Simultaneous',true); [yhat2,ci2] = mypredictQLM_mex(Xnew,'Alpha',0.1,'Simultaneous',true);```

`predict` から返された値と比較すると、`mypredictQLM_mex` から返された値には、丸めによる差が含まれている可能性があります。このような場合は、小さい誤差を許容して値を比較します。

`find(abs(yhat1-yhat2) > 1e-6)`
```ans = 0x1 empty double column vector ```
`find(abs(ci1-ci2) > 1e-6)`
```ans = 0x1 empty double column vector ```

この比較により、返された値が許容誤差 `1e–6` 内で等しいことを確認します。

```h1 = plot(X,y,'k.'); hold on h2 = plot(Xnew,yhat1,'ro',Xnew,yhat2,'gx'); h3 = plot(Xnew,ci1,'r-','LineWidth',4); h4 = plot(Xnew,ci2,'g--','LineWidth',2); legend([h1; h2; h3(1); h4(1)], ... {'Data','predict estimates','MEX estimates','predict CIs','MEX CIs'}); xlabel('Weight'); ylabel('MPG');``` ## 入力引数

すべて折りたたむ

• `Xnew` が table またはデータセット配列である場合、`mdl``PredictorNames` プロパティと同じ予測子名をもつ予測子が含まれていなければなりません。

• `Xnew` が行列である場合、`mdl` の作成に使用した予測子入力と同じ個数の変数 (列) が同じ順序で含まれていなければなりません。あてはめたモデルで予測子としては使用しなかった予測子変数も `Xnew` に含めなければならないことに注意してください。また、`mdl` の作成に使用する変数は、すべて数値または logical でなければなりません。数値予測子をカテゴリカルとして扱うには、`mdl` を作成するときに名前と値のペアの引数 `'CategoricalVars'` を使用して予測子を指定します。

データ型: `single` | `double` | `テーブル`

### 名前と値のペアの引数

オプションの `Name,Value` 引数のコンマ区切りペアを指定します。`Name` は引数名で、`Value` は対応する値です。`Name` は引用符で囲まなければなりません。`Name1,Value1,...,NameN,ValueN` のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

データ型: `single` | `double`

y = f(X) + ε

ここで、f はあてはめた回帰関数、ε はランダムなノイズ項です。

• `'Prediction'``'curve'` である場合、`predict``Xnew` であてはめた応答 f(Xnew) に対する信頼限界を予測します。

• `'Prediction'``'observation'` である場合、`predict``Xnew` における応答観測値 y に対する信頼限界を予測します。

ノイズ項により変動性が追加されるので、y の範囲は f(X) の範囲より広くなります。

• `true``predict` は、シェッフェの方法を使用して、`Xnew` 内のすべての予測子の値に対応する応答値の曲線に対して信頼限界を計算します。上限と下限の間の範囲には、真の応答値から構成される曲線が 100(1 – α)% の信頼度で含まれます。

• `false``predict` は、`Xnew` 内の各観測値における応答値に対して信頼限界を計算します。特定の予測子の値における応答値の信頼区間には、真の応答値が 100(1 – α)% の信頼度で含まれます。

## 出力引数

すべて折りたたむ

`Xnew` で予測した応答の値。数値ベクトルとして返されます。

## 代替機能

• `feval` は、`predict` と同じ予測を返します。関数 `feval` は、各予測子変数に 1 つの入力が対応する複数の入力引数を受け入れます。予測に対する信頼区間は返しません。

• `random` は、ノイズを追加した予測を返します。

• 予測した回帰面を通るスライスをそれぞれが表す一連のプロットが含まれている Figure を作成するには、`plotSlice` を使用します。各プロットは、他の予測子変数の値を固定した状態で単一の予測子変数の関数としてあてはめた応答値を示します。