Main Content

predict

一般化加法モデル (GAM) の使用による応答の予測

    説明

    yFit = predict(Mdl,X) は、回帰用の一般化加法モデル Mdl に基づいて、table または行列 X 内の予測子データに対する予測応答のベクトルを返します。学習済みのモデルは、完全でもコンパクトでもかまいません。

    yFit = predict(Mdl,X,Name,Value) では、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、'IncludeInteractions',true は、計算に交互作用項を含めるために指定します。

    [yFit,ySD,yInt] = predict(___) は、前の構文におけるいずれかの入力引数の組み合わせを使用して、予測子データ X 内の各観測値で評価した応答変数の標準偏差と予測区間も返します。この構文は、Mdl の学習に fitrgam'FitStandardDeviation'true として指定し、MdlIsStandardDeviationFit プロパティが true である場合のみ有効です。

    すべて折りたたむ

    学習標本を使用して一般化加法モデルに学習させてから、検定標本応答を予測します。

    patients データセットを読み込みます。

    load patients

    予測子変数 (AgeDiastolicSmokerWeightGenderSelfAssessedHealthStatus) と応答変数 (Systolic) を格納する table を作成します。

    tbl = table(Age,Diastolic,Smoker,Weight,Gender,SelfAssessedHealthStatus,Systolic);

    観測値を学習セットと検定セットに無作為に分割します。検定用に 10% のホールドアウト標本を指定します。

    rng('default') % For reproducibility
    cv = cvpartition(size(tbl,1),'HoldOut',0.10);

    学習インデックスと検定インデックスを抽出します。

    trainInds = training(cv);
    testInds = test(cv);

    tbl 内の予測子の線形項が格納されている一変量の GAM に学習させます。

    Mdl = fitrgam(tbl(trainInds,:),'Systolic')
    Mdl = 
      RegressionGAM
                PredictorNames: {1x6 cell}
                  ResponseName: 'Systolic'
         CategoricalPredictors: [3 5 6]
             ResponseTransform: 'none'
                     Intercept: 122.7444
        IsStandardDeviationFit: 0
               NumObservations: 90
    
    
      Properties, Methods
    
    

    MdlRegressionGAM モデル オブジェクトです。

    検定セットの応答を予測します。

    yFit = predict(Mdl,tbl(testInds,:));

    観測応答値と予測応答値を格納する table を作成します。

    table(tbl.Systolic(testInds),yFit, ...
        'VariableNames',{'Observed Value','Predicted Value'})
    ans=10×2 table
        Observed Value    Predicted Value
        ______________    _______________
    
             124              126.58     
             121              123.95     
             130              116.72     
             115              117.35     
             121              117.45     
             116               118.5     
             123              126.16     
             132              124.14     
             125              127.36     
             124              115.99     
    
    

    予測子の線形項と交互作用項の両方が格納されている一般化加法モデルを使用して、新しい観測値の応答を予測します。メモリ効率の高いモデル オブジェクトを使用し、応答を予測する際に交互作用項を含めるかどうかを指定します。

    carbig データセットを読み込みます。このデータセットには、1970 年代と 1980 年代初期に製造された自動車の測定値が格納されています。

    load carbig

    予測子変数 (X) として AccelerationDisplacementHorsepower および Weight を、応答変数 (Y) として MPG を指定します。

    X = [Acceleration,Displacement,Horsepower,Weight];
    Y = MPG;

    データ セットを 2 つのセットに分割します。1 つは学習データを含め、もう 1 つは新しい未観測の検定データを含めます。新しい検定データ セットの 10 件の観測値を保持します。

    rng('default')
    n = size(X,1);
    newInds = randsample(n,10);
    inds = ~ismember(1:n,newInds);
    XNew = X(newInds,:);
    YNew = Y(newInds);

    X 内の使用可能なすべての線形項と交互作用項が格納されている GAM に学習させます。

    Mdl = fitrgam(X(inds,:),Y(inds),'Interactions','all');

    MdlRegressionGAM モデル オブジェクトです。

    学習させたモデルのサイズを減らし、メモリの消費量を抑えます。

    CMdl = compact(Mdl);
    whos('Mdl','CMdl')
      Name      Size              Bytes  Class                                          Attributes
    
      CMdl      1x1             1228131  classreg.learning.regr.CompactRegressionGAM              
      Mdl       1x1             1262153  RegressionGAM                                            
    

    CMdlCompactRegressionGAM モデル オブジェクトです。

    線形項と交互作用項の両方を使用して応答を予測してから、線形項のみを使用して応答を予測します。交互作用項を除外するには、'IncludeInteractions',false を指定します。

    yFit = predict(CMdl,XNew);
    yFit_nointeraction = predict(CMdl,XNew,'IncludeInteractions',false);

    観測応答値と予測応答値を格納する table を作成します。

    t = table(YNew,yFit,yFit_nointeraction, ...
        'VariableNames',{'Observed Response', ...
        'Predicted Response','Predicted Response Without Interactions'})
    t=10×3 table
        Observed Response    Predicted Response    Predicted Response Without Interactions
        _________________    __________________    _______________________________________
    
              27.9                  23.04                          23.649                 
               NaN                 37.163                          35.779                 
               NaN                 25.876                          21.978                 
                13                 12.786                          14.141                 
                36                 28.889                          27.281                 
              19.9                 22.199                          18.451                 
              24.2                 23.995                          24.885                 
                12                 14.247                          13.982                 
                38                 33.797                          33.528                 
                13                 12.225                          11.127                 
    
    

    一般化加法モデル (GAM) に学習させてから、応答値の予測区間を計算し、プロットします。

    patients データセットを読み込みます。

    load patients

    予測子変数 (AgeDiastolicSmokerWeightGenderSelfAssessedHealthStatus) と応答変数 (Systolic) を格納する table を作成します。

    tbl = table(Age,Diastolic,Smoker,Weight,Gender,SelfAssessedHealthStatus,Systolic);

    tbl 内の予測子の線形項が格納されている一変量の GAM に学習させます。学習済みモデルを使用して予測区間を計算できるように、名前と値の引数 FitStandardDeviationtrue として指定します。標準偏差モデルを標準偏差推定の精度に当てはめる場合、最適なハイパーパラメーターの使用が推奨されます。'all-univariate' として 'OptimizeHyperparameters' を指定します。再現性を得るために、'expected-improvement-plus' の獲得関数を使用します。'ShowPlots'false として、'Verbose' を 0 として指定し、プロットの表示とメッセージの表示をそれぞれ無効にします。

    rng('default') % For reproducibility
    Mdl = fitrgam(tbl,'Systolic','FitStandardDeviation',true, ...
        'OptimizeHyperparameters','all-univariate', ...
        'HyperparameterOptimizationOptions',struct('AcquisitionFunctionName','expected-improvement-plus', ...
        'ShowPlots',false,'Verbose',0))
    Mdl = 
      RegressionGAM
                           PredictorNames: {1x6 cell}
                             ResponseName: 'Systolic'
                    CategoricalPredictors: [3 5 6]
                        ResponseTransform: 'none'
                                Intercept: 122.7800
                   IsStandardDeviationFit: 1
                          NumObservations: 100
        HyperparameterOptimizationResults: [1x1 BayesianOptimization]
    
    
      Properties, Methods
    
    

    Mdl は、最適な推定実行可能点を使用する RegressionGAM モデル オブジェクトです。最適な推定実行可能点は、ベイズ最適化プロセスの基となる目的関数モデルに基づいて目的関数値の信頼限界の上限を最小化するハイパーパラメーターのセットを示します。最適化プロセスの詳細については、OptimizeHyperparameters を使用した GAM の最適化を参照してください。

    tbl 内の学習データの応答を予測し、応答変数の 99% の予測区間を計算します。有意水準 ('Alpha') を 0.01 として指定し、予測区間の信頼度を 99% に設定します。

    [yFit,~,yInt] = predict(Mdl,tbl,'Alpha',0.01);

    並べ替えられた真の応答を予測応答および予測区間と一緒にプロットします。

    figure
    yTrue = tbl.Systolic;
    [sortedYTrue,I] = sort(yTrue); 
    plot(sortedYTrue,'o')
    hold on
    plot(yFit(I))
    plot(yInt(I,1),'k:')
    plot(yInt(I,2),'k:')
    legend('True responses','Predicted responses', ...
        'Prediction interval limits','Location','best')
    hold off

    Figure contains an axes object. The axes object contains 4 objects of type line. These objects represent True responses, Predicted responses, Prediction interval limits.

    入力引数

    すべて折りたたむ

    一般化加法モデル。RegressionGAM または CompactRegressionGAM モデル オブジェクトとして指定します。

    予測子データ。数値行列またはテーブルとして指定します。

    X の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。

    • 数値行列の場合

      • X の列を構成する変数の順序は、Mdl に学習させた予測子変数の順序と同じでなければなりません。

      • table を使用して Mdl に学習をさせた場合、table に含まれている予測子変数がすべて数値変数であれば、X を数値行列にすることができます。

    • テーブルの場合

      • table (たとえば Tbl) を使用して Mdl に学習をさせた場合、X 内のすべての予測子変数は変数名およびデータ型が Tbl 内の変数と同じでなければなりません。ただし、X の列の順序が Tbl の列の順序に対応する必要はありません。

      • 数値行列を使用して Mdl に学習をさせた場合、Mdl.PredictorNames 内の予測子名と X 内の対応する予測子変数名が同じでなければなりません。学習時に予測子の名前を指定するには、名前と値の引数 'PredictorNames' を使用します。X 内の予測子変数はすべて数値ベクトルでなければなりません。

      • X に追加の変数 (応答変数や観測値の重みなど) を含めることができますが、predict はこれらを無視します。

      • predict は、文字ベクトルの cell 配列ではない cell 配列や複数列の変数をサポートしません。

    データ型: table | double | single

    名前と値の引数

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

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

    例: 'Alpha',0.01,'IncludeInteractions',false は信頼度を 99% として指定し、計算から交互作用項を除外します。

    予測区間 yInt の信頼度の有意水準。範囲 [0,1] の数値スカラーとして指定します。yInt の信頼度は 100(1 – Alpha)% と等しくなります。

    この引数は、MdlIsStandardDeviationFit プロパティが true である場合のみ有効です。標準偏差のモデルを当てはめるには、fitrgam の名前と値の引数 'FitStandardDeviation' として true を指定します。

    例: 'Alpha',0.01 は、99% の予測区間を返すように指定します。

    データ型: single | double

    モデルの交互作用項を含むというフラグ。true または false として指定します。

    Mdl に交互作用項が含まれる場合、'IncludeInteractions' の既定値は true です。モデルに交互作用項が含まれない場合、値は false でなければなりません。

    例: 'IncludeInteractions',false

    データ型: logical

    出力引数

    すべて折りたたむ

    予測応答。長さが n の列ベクトルとして返されます。n は、予測子データ X に含まれている観測値の個数です。

    予測子データ X 内の各観測値で評価した応答変数の標準偏差。長さが n の列ベクトルとして返されます。n は、予測子データ X に含まれている観測値の個数です。i 番目の要素 ySD(i) に、Mdl の学習済みの標準偏差モデルを使用して評価した i 番目の観測値 X(i,:) に対する i 番目の応答の標準偏差が格納されます。

    この引数は、MdlIsStandardDeviationFit プロパティが true である場合のみ有効です。標準偏差のモデルを当てはめるには、fitrgam の名前と値の引数 'FitStandardDeviation' として true を指定します。

    予測子データ X 内の各観測値で評価した応答変数の予測区間。n 行 2 列の行列として返されます。n は、予測子データ X に含まれている観測値の個数です。i 番目の行 yInt(i,:) に、i 番目の観測値 X(i,:) に対する i 番目の応答の 100(1–Alpha)% の予測区間が格納されます。Alpha 値は、予測区間に X(i,:) に対する真の応答値が含まれない確率です。yInt の 1 列目には予測区間の下限が、2 列目には上限が格納されます。

    この引数は、MdlIsStandardDeviationFit プロパティが true である場合のみ有効です。標準偏差のモデルを当てはめるには、fitrgam の名前と値の引数 'FitStandardDeviation' として true を指定します。

    アルゴリズム

    すべて折りたたむ

    標準偏差および予測区間

    predict は予測応答 (yFit) を返し、X 内の各観測値で評価した応答変数の標準偏差 (ySD) と予測区間 (yInt) をオプションとして返します。

    回帰用の一般化加法モデル (GAM)は、応答変数 y が平均 μ および標準偏差 σ をもつ正規分布に従うと仮定します。fitrgam'FitStandardDeviation' として false (既定値) を指定した場合、fitrgam は μ についてモデルに学習させます。'FitStandardDeviation' として true を指定した場合、fitrgam は σ について追加のモデルに学習させて、GAM オブジェクトの IsStandardDeviationFit プロパティを true に設定します。出力 yFit および ySD は、それぞれ推定された平均 μ および標準偏差 σ に対応します。

    バージョン履歴

    R2021a で導入