Main Content

RegressionGAM

回帰用の一般化加法モデル (GAM)

R2021a 以降

    説明

    RegressionGAM オブジェクトは、回帰用の一般化加法モデル (GAM) オブジェクトです。これは、一変量および二変量の形状関数の和を使用して応答変数を説明する解釈可能なモデルです。

    関数 predict を使用して新しい観測値の応答を予測し、関数 plotLocalEffects を使用して観測値の予測 (応答値) に対する各形状関数の効果をプロットできます。RegressionGAM のオブジェクト関数の完全な一覧については、オブジェクト関数を参照してください。

    作成

    RegressionGAM オブジェクトの作成には fitrgam を使用します。予測子の線形項と交互作用項の両方を指定して、学習済みモデルに一変量の形状関数 (予測子木) と二変量の形状関数 (交互作用木) をそれぞれ含めることができます。

    学習済みモデルは resume または addInteractions を使用して更新できます。

    • 関数 resume は、モデル内の既存の項の学習を再開します。

    • 関数 addInteractions は、線形項のみを含むモデルに交互作用項を追加します。

    プロパティ

    すべて展開する

    GAM のプロパティ

    この プロパティ は読み取り専用です。

    数値予測子のビンのエッジ。p 個の数値ベクトルが含まれている cell 配列を指定します。p は予測子の個数です。各ベクトルには、数値予測子のビンのエッジを含めます。カテゴリカル予測子はビン化されないので、カテゴリカル予測子の場合は、この cell 配列の要素を空にします。

    数値予測子がビン化されるのは、木学習器を使用してモデルに学習をさせるときに名前と値の引数 'NumBins' として正の整数スカラーを指定した場合だけです。'NumBins' の値が空 (既定) である場合、BinEdges プロパティは空になります。

    学習済みモデル mdlBinEdges プロパティを使用することにより、ビン化された予測子データ Xbinned を再現できます。

    X = mdl.X; % Predictor data
    Xbinned = zeros(size(X));
    edges = mdl.BinEdges;
    % Find indices of binned predictors.
    idxNumeric = find(~cellfun(@isempty,edges));
    if iscolumn(idxNumeric)
        idxNumeric = idxNumeric';
    end
    for j = idxNumeric 
        x = X(:,j);
        % Convert x to array if x is a table.
        if istable(x) 
            x = table2array(x);
        end
        % Group x into bins by using the discretize function.
        xbinned = discretize(x,[-inf; edges{j}; inf]); 
        Xbinned(:,j) = xbinned;
    end
    数値予測子の場合、1 からビンの個数までの範囲にあるビンのインデックスが Xbinned に格納されます。カテゴリカル予測子の場合、Xbinned の値は 0 になります。XNaN が含まれている場合、対応する Xbinned の値は NaN になります。

    データ型: cell

    この プロパティ は読み取り専用です。

    交互作用項のインデックス。正の整数の t 行 2 列の行列を指定します。ここで、t はモデル内の交互作用項の数です。行列の各行は 1 つの交互作用項を表し、交互作用項の予測子データ X の列インデックスを格納します。モデルに交互作用項が含まれない場合、このプロパティは空 ([]) になります。

    交互作用項は、p 値に基づく重要度の順序でモデルに追加されます。交互作用項がモデルに追加される順序を確認するには、このプロパティを使用します。

    データ型: double

    この プロパティ は読み取り専用です。

    モデルの切片 (定数) 項。予測子木と交互作用木における切片項の和です。数値スカラーを指定します。

    データ型: single | double

    応答変数の標準偏差のモデルを当てはめるかどうかを示すフラグ。false または true を指定します。標準偏差のモデルを当てはめるには、fitrgam の名前と値の引数 'FitStandardDeviation' として true を指定します。

    IsStandardDeviationFittrue の場合は、predict または resubPredict を使用して、それぞれ新しい観測値または予測子値の学習観測値で標準偏差を評価できます。これらの関数は、特定の観測値で評価した応答変数の予測区間も返します。

    データ型: logical

    この プロパティ は読み取り専用です。

    モデルの学習に使用されたパラメーター。モデル パラメーター オブジェクトとして指定されます。ModelParameters には、モデルの学習に使用された名前と値の引数の値などのパラメーター値が格納されます。推定パラメーターは ModelParameters に格納されません。

    ModelParameters のフィールドにアクセスするには、ドット表記を使用します。たとえば、交互作用木あたりの決定分岐の最大数にアクセスするには Mdl.ModelParameters.MaxNumSplitsPerInteraction を使用します。

    この プロパティ は読み取り専用です。

    数値予測子の交互作用項を検出するためのビンのエッジ。p 個の数値ベクトルの cell 配列として指定されます。p は予測子の個数です。各ベクトルには、数値予測子のビンのエッジを含めます。カテゴリカル予測子はビン化されないので、カテゴリカル予測子の場合は、この cell 配列の要素を空にします。

    交互作用項の検出プロセスを高速化するために、最大 8 個の同確率のビンに数値予測子がビン化されます。予測子に含まれる一意の値が 8 より少なければ、ビンの数を 8 より少なくすることができます。

    データ型: cell

    この プロパティ は読み取り専用です。

    モデルの学習が停止した理由。PredictorTreesInteractionTrees の 2 つのフィールドをもつ構造体として指定されます。

    このプロパティは、指定した数の木がモデルに含まれているかどうかを線形項 ('NumTreesPerPredictor') と交互作用項 ('NumTreesPerInteraction') のそれぞれについて確認する場合に使用します。関数 fitrgam で指定した数の木を追加する前に学習が終了した場合、このプロパティに終了理由が格納されます。

    データ型: struct

    他の回帰のプロパティ

    この プロパティ は読み取り専用です。

    カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictors には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p です。p はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。

    データ型: double

    この プロパティ は読み取り専用です。

    展開された予測子名。文字ベクトルの cell 配列を指定します。

    ExpandedPredictorNames は、一般化加法モデルの PredictorNames と同じです。

    データ型: cell

    この プロパティ は読み取り専用です。

    X および Y に格納されている学習データ内の観測値の個数。数値スカラーを指定します。

    データ型: double

    この プロパティ は読み取り専用です。

    予測子変数の名前。文字ベクトルの cell 配列を指定します。PredictorNames の要素の順序は、予測子名が学習データに現れる順序に対応します。

    データ型: cell

    この プロパティ は読み取り専用です。

    応答変数名。文字ベクトルを指定します。

    データ型: char

    応答変換関数。'none' または関数ハンドルを指定します。ResponseTransform は、生の応答値を変換する方法を表します。

    MATLAB® 関数やユーザー定義関数の場合は、関数ハンドルを入力します。たとえば、Mdl.ResponseTransform = @function を入力できます。ここで function は、元の応答の数値ベクトルを受け入れ、変換した応答が格納されている同じサイズの数値ベクトルを返します。

    データ型: char | function_handle

    この プロパティ は読み取り専用です。

    RegressionGAM モデルの当てはめに使用した元の学習データの行。logical ベクトルを指定します。すべての行を使用した場合、このプロパティは空になります。

    データ型: logical

    この プロパティ は読み取り専用です。

    モデルの学習に使用された観測値の重み。n 行 1 列の数値ベクトルとして指定されます。n は観測値の個数 (NumObservations) です。

    W の要素の合計が 1 になるように、名前と値の引数 'Weights' で指定された観測値の重みが正規化されます。

    データ型: double

    この プロパティ は読み取り専用です。

    モデルの学習に使用された予測子。数値行列または table として指定されます。

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

    データ型: single | double | table

    この プロパティ は読み取り専用です。

    応答。数値ベクトルを指定します。

    Y の各行は、X の対応する行の観測された応答を表します。

    データ型: single | double

    ハイパーパラメーター最適化のプロパティ

    この プロパティ は読み取り専用です。

    ハイパーパラメーターの交差検証最適化の説明。BayesianOptimization オブジェクト、またはハイパーパラメーターおよび関連する値が含まれているテーブルを指定します。オブジェクトの作成時に fitrgam の名前と値の引数 'OptimizeHyperparameters''none' (既定値) 以外であった場合、このプロパティは空以外になります。HyperparameterOptimizationResults の値は、オブジェクト作成時の fitrgam の構造体 HyperparameterOptimizationOptions における Optimizer フィールドの設定によって変化します。

    Optimizer フィールドの値HyperparameterOptimizationResults の値
    'bayesopt' (既定の設定)BayesianOptimization クラスのオブジェクト
    'gridsearch' または 'randomsearch'使用したハイパーパラメーター、観測された目的関数の値 (交差検証損失)、および最低 (最良) から最高 (最悪) までの観測値の順位が格納されているテーブル

    オブジェクト関数

    すべて展開する

    compact機械学習モデルのサイズの縮小
    crossval機械学習モデルの交差検証
    addInteractions一変量の一般化加法モデル (GAM) への交互作用項の追加
    resume一般化加法モデル (GAM) の学習の再開
    limeLocal Interpretable Model-agnostic Explanations (LIME)
    partialDependence部分依存の計算
    plotLocalEffects一般化加法モデル (GAM) 内の項の局所的効果のプロット
    plotPartialDependence部分依存プロット (PDP) および個別条件付き期待値 (ICE) プロットの作成
    shapleyシャープレイ値
    predict一般化加法モデル (GAM) の使用による応答の予測
    loss一般化加法モデル (GAM) の回帰損失
    resubPredict学習済み回帰モデルを使用した学習データについての応答の予測
    resubLoss再代入回帰損失

    すべて折りたたむ

    予測子の線形項が格納されている一変量の GAM に学習させます。その後、関数plotLocalEffectsを使用して指定のデータ インスタンスについての予測を解釈します。

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

    load NYCHousing2015

    データ セットには、2015 年のニューヨーク市における不動産の売上に関する情報を持つ 10 の変数が含まれます。この例では、これらの変数を使用して売価 (SALEPRICE) を解析します。

    データ セットを前処理します。外れ値を削除し、datetime 配列 (SALEDATE) を月番号に変換して、応答変数 (SALEPRICE) を最後の列に移動します。

    idx = isoutlier(NYCHousing2015.SALEPRICE);
    NYCHousing2015(idx,:) = [];
    NYCHousing2015.SALEDATE = month(NYCHousing2015.SALEDATE);
    NYCHousing2015 = movevars(NYCHousing2015,'SALEPRICE','After','SALEDATE');

    テーブルの最初の 3 行を表示します。

    head(NYCHousing2015,3)
        BOROUGH    NEIGHBORHOOD       BUILDINGCLASSCATEGORY        RESIDENTIALUNITS    COMMERCIALUNITS    LANDSQUAREFEET    GROSSSQUAREFEET    YEARBUILT    SALEDATE    SALEPRICE
        _______    ____________    ____________________________    ________________    _______________    ______________    _______________    _________    ________    _________
    
           2       {'BATHGATE'}    {'01  ONE FAMILY DWELLINGS'}           1                   0                4750              2619            1899           8           0    
           2       {'BATHGATE'}    {'01  ONE FAMILY DWELLINGS'}           1                   0                4750              2619            1899           8           0    
           2       {'BATHGATE'}    {'01  ONE FAMILY DWELLINGS'}           1                   1                1287              2528            1899          12           0    
    

    売価の一変量の GAM に学習させます。BOROUGHNEIGHBORHOODBUILDINGCLASSCATEGORY および SALEDATE の変数をカテゴリカル予測子として指定します。

    Mdl = fitrgam(NYCHousing2015,'SALEPRICE','CategoricalPredictors',[1 2 3 9])
    Mdl = 
      RegressionGAM
                PredictorNames: {'BOROUGH'  'NEIGHBORHOOD'  'BUILDINGCLASSCATEGORY'  'RESIDENTIALUNITS'  'COMMERCIALUNITS'  'LANDSQUAREFEET'  'GROSSSQUAREFEET'  'YEARBUILT'  'SALEDATE'}
                  ResponseName: 'SALEPRICE'
         CategoricalPredictors: [1 2 3 9]
             ResponseTransform: 'none'
                     Intercept: 3.7518e+05
        IsStandardDeviationFit: 0
               NumObservations: 83517
    
    
    

    MdlRegressionGAM モデル オブジェクトです。モデル表示には、モデルのプロパティの一部のみが表示されます。プロパティの完全な一覧を表示するには、ワークスペースで変数名 Mdl をダブルクリックします。Mdl の変数エディターが開きます。あるいは、コマンド ウィンドウでドット表記を使用してプロパティを表示できます。たとえば、Mdl の推定された切片 (定数) 項を表示します。

    Mdl.Intercept
    ans = 3.7518e+05
    

    学習データの最初の観測値について売価を予測し、予測に対する Mdl 内の項の局所的効果をプロットします。

    yFit = predict(Mdl,NYCHousing2015(1,:))
    yFit = 4.4421e+05
    
    plotLocalEffects(Mdl,NYCHousing2015(1,:))

    Figure contains an axes object. The axes object with title Local Effects Plot, xlabel Local Effect, ylabel Term contains an object of type bar.

    関数predictで、最初の観測値の売価を 4.4421e5 として予測します。関数plotLocalEffectsで、予測に対する Mdl 内の項の局所的効果を示す横棒グラフを作成します。局所的効果の各値は、予測売価への各項の寄与を示します。

    3 つの異なる方法で、予測子の線形項と交互作用項が格納された一般化加法モデルに学習させます。

    • 入力引数 formula を使用して交互作用項を指定します。

    • 名前と値の引数 'Interactions' を指定します。

    • 線形項をもつモデルを構築してから、そのモデルに関数 addInteractions を使用して交互作用項を追加します。

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

    load carbig

    予測子変数 (AccelerationDisplacementHorsepower、および Weight) と応答変数 (MPG) を格納する table を作成します。

    tbl = table(Acceleration,Displacement,Horsepower,Weight,MPG);

    formula の指定

    4 つの線形項 (AccelerationDisplacementHorsepower、および Weight) と 2 つの交互作用項 (Acceleration*Displacement および Displacement*Horsepower) が格納された GAM に学習させます。'Y ~ terms' という形式の式を使用して項を指定します。

    Mdl1 = fitrgam(tbl,'MPG ~ Acceleration + Displacement + Horsepower + Weight + Acceleration:Displacement + Displacement:Horsepower');

    交互作用項は重要度の順序でモデルに追加されます。Interactions プロパティを使用して、モデル内の交互作用項とそれらが fitrgam でモデルに追加された順序を確認できます。Interactions プロパティを表示します。

    Mdl1.Interactions
    ans = 2×2
    
         2     3
         1     2
    
    

    Interactions の各行は 1 つの交互作用項を表し、交互作用項の予測子変数の列インデックスを格納します。

    'Interactions' の指定

    学習データ (tbl) と tbl 内の応答変数の名前を fitrgam に渡し、それ以外のすべての変数の線形項が予測子として含まれるようにします。logical 行列を使用して名前と値の引数 'Interactions' を指定して、2 つの交互作用項 x1*x2x2*x3 を含めます。

    Mdl2 = fitrgam(tbl,'MPG','Interactions',logical([1 1 0 0; 0 1 1 0]));
    Mdl2.Interactions
    ans = 2×2
    
         2     3
         1     2
    
    

    'Interactions' では、交互作用項の数を指定したり、'all' を指定して利用可能なすべての交互作用項を含めることもできます。fitrgam は、指定された交互作用項の中から p 値が 'MaxPValue' の値以下であるものを特定し、それらをモデルに追加します。'MaxPValue' の既定値は 1 であり、指定したすべての交互作用項がモデルに追加されます。

    'Interactions','all' を指定し、名前と値の引数 'MaxPValue' を 0.05 に設定します。

    Mdl3 = fitrgam(tbl,'MPG','Interactions','all','MaxPValue',0.05);
    Warning: Model does not include interaction terms because all interaction terms have p-values greater than the 'MaxPValue' value, or the software was unable to improve the model fit.
    
    Mdl3.Interactions
    ans =
    
      0x2 empty double matrix
    

    Mdl3 には交互作用項が含まれていません。これは、すべての交互作用項に 0.05 より大きな p 値があるか、または交互作用項を追加してもモデルの当てはめが改善されないことを示します。

    関数 addInteractions の使用

    予測子の線形項が格納されている一変量の GAM に学習させ、学習済みのモデルに関数addInteractionsを使用して交互作用項を追加します。addInteractions の 2 番目の入力引数を fitrgam の名前と値の引数 'Interactions' と同じ方法で指定します。交互作用項のリスト (logical 行列を使用)、交互作用項の数、または 'all' を指定できます。

    交互作用項の数を 3 と指定して、学習済みのモデルに上位 3 つの重要な交互作用項を追加します。

    Mdl4 = fitrgam(tbl,'MPG');
    UpdatedMdl4 = addInteractions(Mdl4,3);
    UpdatedMdl4.Interactions
    ans = 3×2
    
         2     3
         1     2
         3     4
    
    

    Mdl4 は一変量の GAM、UpdatedMdl4Mdl4 のすべての項と 3 つの追加の交互作用項を格納する更新された GAM です。

    線形項と交互作用項の両方が格納されている回帰 GAM に学習させます。反復回数を少なくして交互作用項に学習させるように指定します。反復回数を増やして交互作用項に追加で学習させてから、再代入損失を比較します。

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

    load carbig

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

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

    X 内の使用可能なすべての線形項と交互作用項が格納されている GAM に学習させます。交互作用項あたりの木の数を 2 と指定します。fitrgam は、線形項についてはブースティング アルゴリズムを 300 回 (既定) 反復し、交互作用項については反復回数の指定に従ってアルゴリズムを反復します。それぞれのブースティング反復において、線形項ごとに 1 つの木または交互作用項ごとに 1 つの木が追加されます。'Verbose' を 1 と指定して、10 回の反復ごとに診断メッセージを表示します。

    Mdl = fitrgam(X,Y,'Interactions','all','NumTreesPerInteraction',2,'Verbose',1);
    |========================================================|
    | Type | NumTrees |  Deviance  |   RelTol   | LearnRate  |
    |========================================================|
    |    1D|         0|  2.4432e+05|      -     |      -     |
    |    1D|         1|      9507.4|         Inf|           1|
    |    1D|        10|      4470.6|  0.00025206|           1|
    |    1D|        20|      3895.3|  0.00011448|           1|
    |    1D|        30|      3617.7|  3.5365e-05|           1|
    |    1D|        40|      3402.5|  3.7992e-05|           1|
    |    1D|        50|      3257.1|  2.4983e-05|           1|
    |    1D|        60|      3131.8|  2.3873e-05|           1|
    |    1D|        70|      3019.8|  2.2967e-05|           1|
    |    1D|        80|      2925.9|  2.8071e-05|           1|
    |    1D|        90|      2845.3|  1.6811e-05|           1|
    |    1D|       100|      2772.7|   1.852e-05|           1|
    |    1D|       110|      2707.8|  1.6754e-05|           1|
    |    1D|       120|      2649.8|   1.651e-05|           1|
    |    1D|       130|      2596.6|  1.1723e-05|           1|
    |    1D|       140|      2547.4|   1.813e-05|           1|
    |    1D|       150|      2501.1|  1.8659e-05|           1|
    |    1D|       160|      2455.7|   1.386e-05|           1|
    |    1D|       170|      2416.9|  1.0615e-05|           1|
    |    1D|       180|      2377.2|   8.534e-06|           1|
    |    1D|       190|        2339|  7.6771e-06|           1|
    |    1D|       200|      2303.3|  9.5866e-06|           1|
    |    1D|       210|      2270.7|  8.4276e-06|           1|
    |    1D|       220|      2240.1|  8.5778e-06|           1|
    |    1D|       230|      2209.2|  9.6761e-06|           1|
    |    1D|       240|      2178.7|  7.0622e-06|           1|
    |    1D|       250|      2150.3|  8.3082e-06|           1|
    |    1D|       260|      2122.3|  7.9542e-06|           1|
    |    1D|       270|      2097.7|  7.6328e-06|           1|
    |    1D|       280|      2070.4|  9.4322e-06|           1|
    |    1D|       290|      2044.3|  7.5722e-06|           1|
    |    1D|       300|      2019.7|  6.6719e-06|           1|
    |========================================================|
    | Type | NumTrees |  Deviance  |   RelTol   | LearnRate  |
    |========================================================|
    |    2D|         0|      2019.7|      -     |      -     |
    |    2D|         1|      1795.5|   0.0005975|           1|
    |    2D|         2|      1523.4|   0.0010079|           1|
    

    fitrgam で指定した数の木の学習が実行されたかどうかを確認するには、学習済みモデルの ReasonForTermination プロパティを表示し、表示されるメッセージを確認します。

    Mdl.ReasonForTermination
    ans = struct with fields:
          PredictorTrees: 'Terminated after training the requested number of trees.'
        InteractionTrees: 'Terminated after training the requested number of trees.'
    
    

    学習データの回帰損失を計算します。

    resubLoss(Mdl)
    ans = 3.8277
    

    モデルの学習を再開し、100 回の反復を追加で実行します。Mdl には線形項と交互作用項の両方が格納されているため、関数 resume は交互作用項の学習を再開し、それらについての木 (交互作用木) を追加します。

    UpdatedMdl = resume(Mdl,100);
    |========================================================|
    | Type | NumTrees |  Deviance  |   RelTol   | LearnRate  |
    |========================================================|
    |    2D|         0|      1523.4|      -     |      -     |
    |    2D|         1|      1363.9|  0.00039695|           1|
    |    2D|        10|      594.04|  8.0295e-05|           1|
    |    2D|        20|      359.44|  4.3201e-05|           1|
    |    2D|        30|      238.51|  2.6869e-05|           1|
    |    2D|        40|      153.98|  2.6271e-05|           1|
    |    2D|        50|      91.464|  8.0936e-06|           1|
    |    2D|        60|      61.882|  3.8528e-06|           1|
    |    2D|        70|      43.206|  5.9888e-06|           1|
    
    UpdatedMdl.ReasonForTermination
    ans = struct with fields:
          PredictorTrees: 'Terminated after training the requested number of trees.'
        InteractionTrees: 'Unable to improve the model fit.'
    
    

    resume は、木を追加してもモデルの当てはめの逸脱度が改善されなくなると学習を終了します。

    更新されたモデルを使用して回帰損失を計算します。

    resubLoss(UpdatedMdl)
    ans = 0.0944
    

    反復回数を増やして resume でモデルを更新すると、回帰損失が減少します。

    詳細

    すべて展開する

    参照

    [1] Lou, Yin, Rich Caruana, and Johannes Gehrke. "Intelligible Models for Classification and Regression." Proceedings of the 18th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD ’12). Beijing, China: ACM Press, 2012, pp. 150–158.

    [2] Lou, Yin, Rich Caruana, Johannes Gehrke, and Giles Hooker. "Accurate Intelligible Models with Pairwise Interactions." Proceedings of the 19th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD ’13) Chicago, Illinois, USA: ACM Press, 2013, pp. 623–631.

    バージョン履歴

    R2021a で導入