Main Content

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

predict

線形回帰モデルの応答を予測

説明

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')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Data, Predictions.

線形回帰モデルをあてはめてから、saveLearnerForCoderを使用してモデルを保存します。loadLearnerForCoderを使用してモデルを読み込み、あてはめたモデルの関数 predict を呼び出す、エントリポイント関数を定義します。その後、codegen (MATLAB Coder) を使用して C/C++ コードを生成します。C/C++ コードの生成には MATLAB® Coder™ が必要であることに注意してください。

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

モデルの学習

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

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

モデルの保存

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

saveLearnerForCoder(mdl,'QLMMdl');

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

以下を行う mypredictQLM という名前のエントリポイント関数を定義します。

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

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

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

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 = loadLearnerForCoder('QLMMdl');
[yhat,ci] = predict(CompactMdl,x,varargin{:});
end

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

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

コードの生成

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

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

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

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

生成されたコードの確認

predictmypredictQLM_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');

Figure contains an axes. The axes contains 7 objects of type line. These objects represent Data, predict estimates, MEX estimates, predict CIs, MEX CIs.

入力引数

すべて折りたたむ

線形回帰モデル オブジェクト。fitlm または stepwiselm を使用して作成した LinearModel オブジェクト、または compact を使用して作成した CompactLinearModel オブジェクトとして指定します。

新しい予測子の入力値。table、データセット配列または行列を指定します。Xnew の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。

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

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

データ型: single | double | table

名前と値のペアの引数

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

例: [ypred,yci] = predict(Mdl,Xnew,'Alpha',0.01,'Simultaneous',true) は、すべての予測子の値について同時に計算した、信頼度が 99% である信頼区間 yci を返します。

信頼区間の有意水準。'Alpha' と範囲 [0,1] の数値から構成されるコンマ区切りのペアとして指定します。yci の信頼度は 100(1 – Alpha)% に等しい値です。Alpha は、真の値が信頼区間に含まれない確率です。

例: 'Alpha',0.01

データ型: single | double

予測タイプ。'Prediction''curve' または 'observation' から構成されるコンマ区切りのペアとして指定します。

予測子変数 X と応答変数 y に対する回帰モデルは、次の形式になります。

y = f(X) + ε,

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

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

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

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

例: 'Prediction','observation'

同時信頼限界を計算するためのフラグ。'Simultaneous' と true または false から構成されるコンマ区切りのペアとして指定します。

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

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

応答値の曲線全体を範囲内に含める方が、単一の予測子の値における応答値を範囲内に含める場合より条件が厳しいので、同時区間は個別の区間より広くなります。

例: 'Simultaneous',true

出力引数

すべて折りたたむ

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

応答の信頼区間。各行が 1 つの区間に対応する 2 列の行列として返されます。信頼区間の意味は、名前と値のペアの引数 'Alpha''Prediction' および 'Simultaneous' の設定によって異なります。

代替機能

  • feval は、predict と同じ予測を返します。関数 feval は、複数の入力引数を受け取ることができ、各予測子変数には 1 つの入力が対応します。テーブルまたはデータセット配列から作成したモデルの場合、この関数をより簡単に使用できます。関数 feval は、予測に対する信頼区間は返さないことに注意してください。

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

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

拡張機能

R2012a で導入