Main Content

predict

一般化線形回帰モデルの応答予測

説明

ypred = predict(mdl,Xnew) は一般化線形回帰モデル mdl の予測応答値を Xnew 内の点に返します。

[ypred,yci] = predict(mdl,Xnew) は、Xnew における応答の信頼区間も返します。

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

すべて折りたたむ

一般化線形回帰モデルを作成し、新しいデータに対する応答を予測します。

基となる 2 つの予測子 X(:,1) および X(:,2) のポアソン乱数を使って標本データを生成します。

rng('default') % For reproducibility
rndvars = randn(100,2);
X = [2 + rndvars(:,1),rndvars(:,2)];
mu = exp(1 + X*[1;2]);
y = poissrnd(mu);

ポアソン データの一般化線形回帰モデルを作成します。

mdl = fitglm(X,y,'y ~ x1 + x2','Distribution','poisson');

予測に使用するデータ点を作成します。

[Xtest1,Xtest2] = meshgrid(-1:.5:3,-2:.5:2);
Xnew = [Xtest1(:),Xtest2(:)];

データ点で応答を予測します。

ypred = predict(mdl,Xnew);

予測をプロットします。

surf(Xtest1,Xtest2,reshape(ypred,9,9))

Figure contains an axes object. The axes object contains an object of type surface.

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

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

モデルの学習

基となる 2 つの予測子 X(:,1) および X(:,2) のポアソン乱数を使って標本データを生成します。

rng('default') % For reproducibility
rndvars = randn(100,2);
X = [2 + rndvars(:,1),rndvars(:,2)];
mu = exp(1 + X*[1;2]);
y = poissrnd(mu);

一般化線形回帰モデルを作成します。応答のポアソン分布を指定します。

mdl = fitglm(X,y,'y ~ x1 + x2','Distribution','poisson');

モデルの保存

当てはめた一般化線形回帰モデルを saveLearnerForCoder を使用して GLMMdl.mat というファイルに保存します。

saveLearnerForCoder(mdl,'GLMMdl');

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

現在のフォルダーで、以下を行う mypredictGLM.m という名前のエントリポイント関数を定義します。

  • 新しい予測子入力と、有効な名前と値のペアの引数を受け入れます。

  • GLMMdl.mat 内の当てはめた一般化線形回帰モデルを loadLearnerForCoder を使用して読み込みます。

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

function [yhat,ci] = mypredictGLM(x,varargin) %#codegen
%MYPREDICTGLM Predict responses using GLM model 
%   MYPREDICTGLM predicts responses for the n observations in the n-by-1
%   vector x using the GLM model stored in the MAT-file GLMMdl.mat,
%   and then returns the predictions in the n-by-1 vector yhat.
%   MYPREDICTGLM also returns confidence interval bounds for the
%   predictions in the n-by-2 vector ci.
CompactMdl = loadLearnerForCoder('GLMMdl');
narginchk(1,Inf);
[yhat,ci] = predict(CompactMdl,x,varargin{:});
end

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

コードの生成

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

予測に使用する点を作成します。

[Xtest1,Xtest2] = meshgrid(-1:.5:3,-2:.5:2);
Xnew = [Xtest1(:),Xtest2(:)];

コードを生成し、予測に対する 90% の同時信頼区間を返すように指定します。

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

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

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

生成されたコードの確認

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

[yhat1,ci1] = predict(mdl,Xnew,'Alpha',0.1,'Simultaneous',true);
[yhat2,ci2] = mypredictGLM_mex(Xnew,'Alpha',0.1,'Simultaneous',true);

predict から返された値と比較すると、mypredictGLM_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 内で等しいことを確認します。

入力引数

すべて折りたたむ

一般化線形回帰モデル。fitglm または stepwiseglm を使用して作成した GeneralizedLinearModel オブジェクト、または compact を使用して作成した CompactGeneralizedLinearModel オブジェクトとして指定します。

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

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

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

データ型: single | double | table

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: [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

二項分布の試行回数。'BinomialSize' と、応答と同じ長さのスカラーまたはベクトルで構成されるコンマ区切りのペアとして指定します。predict は、応答と同じサイズの定数配列となるようにスカラー入力を拡張します。スカラー入力は、すべての観測が同じ試行回数であることを意味します。

ypred の出力値の意味は、'BinomialSize' の値によって異なります。

  • 'BinomialSize' が 1 (既定) である場合、出力 ypred の各値は成功確率です。

  • 'BinomialSize' が 1 でない場合、出力 ypred の各値は試行時の成功予測回数です。

データ型: single | double

Xnew の各行のオフセット値。'Offset' と、応答と同じ長さのスカラーまたはベクトルで構成されるコンマ区切りのペアとして指定します。predict は、応答と同じサイズの定数配列となるようにスカラー入力を拡張します。

モデルを当てはめるときに名前と値のペアの引数 'Offset' を指定した場合でも、この引数の既定値はゼロのベクトルとなることに注意してください。当てはめるために 'Offset' を指定した場合、ソフトウェアでは 1 で固定した係数値をもつ追加の予測子としてオフセットを扱います。つまり、当てはめのための式は次のようになります

f(μ) = Offset + X*b,

ここで、f はリンク関数、μ は平均応答、X*b は予測子 X の線形結合です。予測子 Offset の係数は 1 です。

データ型: single | double

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

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

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

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

例: 'Simultaneous',true

出力引数

すべて折りたたむ

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

二項モデルの場合、ypred の出力値の意味は、名前と値のペアの引数 'BinomialSize' の値によって異なります。

  • 'BinomialSize' が 1 (既定) である場合、出力 ypred の各値は成功確率です。

  • 'BinomialSize' が 1 でない場合、出力 ypred の各値は試行時の成功予測回数です。

オフセットのあるモデルの場合、名前と値のペアの引数 'Offset' を使用してオフセット値を指定します。それ以外の場合、predict はオフセット値として 0 を使用します。

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

代替機能

  • feval は、predict と同じ予測を返します。関数 feval は、名前と値のペアの引数 'Offset' および 'BinomialSize' をサポートしていません。feval はオフセット値として 0 を使用し、ypred の出力値は予測確率です。関数 feval は、新しい予測子の入力値に複数の入力引数を受け取ることができ、各予測子変数には 1 つの入力が対応します。テーブルまたはデータセット配列から作成したモデルの場合、この関数をより簡単に使用できます。関数 feval は、予測に対する信頼区間は返さないことに注意してください。

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

拡張機能

バージョン履歴

R2012a で導入