predict
一般化線形回帰モデルの応答予測
構文
説明
例
一般化線形回帰モデルを作成し、新しいデータに対する応答を予測します。
基となる 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))
一般化線形回帰モデルを当てはめてから、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) を参照してください。
生成されたコードの確認
predict
と mypredictGLM_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 = 0×1 empty double column vector
find(abs(ci1-ci2) > 1e-6)
ans = 0×1 empty double column vector
この比較により、返された値が許容誤差 1e–6
内で等しいことを確認します。
入力引数
一般化線形回帰モデル。fitglm
または stepwiseglm
を使用して作成した GeneralizedLinearModel
オブジェクト、または compact
を使用して作成した CompactGeneralizedLinearModel
オブジェクトとして指定します。
新しい予測子の入力値。table または行列として指定します。Xnew
の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。
Xnew
が table である場合、mdl
のPredictorNames
プロパティの予測子と同じ名前の予測子が含まれていなければなりません。Xnew
が行列である場合、mdl
の作成に使用した予測子入力と同じ個数の変数 (列) が同じ順序で含まれていなければなりません。mdl
の作成に使用する変数は、すべて数値でなければなりません。数値予測子をカテゴリカルとして扱うには、mdl
を作成するときに名前と値の引数CategoricalVars
を使用して予測子を指定します。
当てはめたモデルで予測子として使用されない予測子変数も Xnew
にすべて含めなければならないことに注意してください。
データ型: single
| double
| table
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: [ypred,yci] = predict(Mdl,Xnew,'Alpha',0.01,'Simultaneous',true)
は、すべての予測子の値について同時に計算した、信頼水準が 99% である信頼区間 yci
を返します。
信頼区間の有意水準。範囲 [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
同時信頼限界を計算するフラグ。数値または logical の 1
(true
) または 0
(false
) として指定します。
true
—predict
は、シェッフェの方法を使用して、Xnew
内のすべての予測子の値に対応する応答値の曲線に対して信頼限界を計算します。上限と下限の間の範囲には、真の応答値から構成される曲線が 100(1 – α)% の信頼度で含まれます。false
—predict
は、Xnew
内の各観測値における応答値に対して信頼限界を計算します。特定の予測子の値における応答値の信頼区間には、真の応答値が 100(1 – α)% の信頼度で含まれます。
同時区間では、真の応答値の曲線全体が高い信頼度で範囲内に収まります。一方、非同時区間では、高い信頼度で範囲内に収まる必要があるのは単一の予測子の値における応答値だけです。したがって、同時区間の方が非同時区間より広くなります。
例: Simultaneous=true
出力引数
応答の信頼区間。各行が 1 つの区間に対応する 2 列の行列として返されます。信頼区間の意味は、名前と値のペアの引数 'Alpha'
および 'Simultaneous'
の設定によって異なります。
代替機能
feval
は、predict
と同じ予測を返します。関数feval
は、名前と値のペアの引数'Offset'
および'BinomialSize'
をサポートしていません。feval
はオフセット値として 0 を使用し、ypred
の出力値は予測確率です。関数feval
は、新しい予測子の入力値に複数の入力引数を受け取ることができ、各予測子変数には 1 つの入力が対応します。table またはデータセット配列から作成したモデルの場合、この関数をより簡単に使用できます。関数feval
は、予測に対する信頼区間は返さないことに注意してください。random
は、ノイズを追加した予測を返します。
拡張機能
使用上の注意および制限:
saveLearnerForCoder
、loadLearnerForCoder
およびcodegen
(MATLAB Coder) を使用して、関数predict
のコードを生成します。saveLearnerForCoder
を使用して、学習済みモデルを保存します。loadLearnerForCoder
を使用して保存済みモデルを読み込んで関数predict
を呼び出す、エントリポイント関数を定義します。次に、codegen
を使用して、エントリポイント関数のコードを生成します。predict
の単精度の C/C++ コードを生成するには、loadLearnerForCoder
関数を呼び出すときにDataType="single"
を指定します。次の表は、
predict
の引数に関する注意です。この表に含まれていない引数は、完全にサポートされています。引数 注意と制限 mdl
モデル オブジェクトの使用上の注意および制限については、
CompactGeneralizedLinearModel
オブジェクトのコード生成を参照してください。Xnew
Xnew
は、単精度または倍精度の行列か、数値変数、カテゴリカル変数、またはその両方を含む table でなければなりません。Xnew
の行数、または観測値の数は可変サイズにすることができますが、Xnew
の列数は固定でなければなりません。Xnew
を table として指定する場合、モデルは table を使用して学習させたものでなければならず、かつ予測のためのエントリポイント関数が次を行うようにしなければなりません。データを配列として受け入れる
データ入力の引数から table を作成し、その table 内で変数名を指定する
table を
predict
に渡す
この table のワークフローの例については、table のデータを分類するためのコードの生成を参照してください。コード生成における table の使用の詳細については、table のコード生成 (MATLAB Coder)およびコード生成における table の制限事項 (MATLAB Coder)を参照してください。
名前と値のペアの引数 名前と値の引数に含まれる名前はコンパイル時の定数でなければなりません。たとえば、生成されたコードでユーザー定義の有意水準を可能にするには、
{coder.Constant('Alpha'),0}
をcodegen
(MATLAB Coder) の-args
の値に含めます。
詳細は、コード生成の紹介を参照してください。
この関数は、GPU 配列を完全にサポートします。詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2012a で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)