Main Content

addInteractions

一変量の一般化加法モデル (GAM) への交互作用項の追加

R2021a 以降

    説明

    UpdatedMdl = addInteractions(Mdl,Interactions) は、一変量の一般化加法モデル MdlInteractions の交互作用項を追加し、更新されたモデル UpdatedMdl を返します。モデル Mdl には予測子の線形項のみが格納されていなければなりません。

    Mdl 内の既存の項の学習を再開する場合は、関数 resume を使用します。

    UpdatedMdl = addInteractions(Mdl,Interactions,Name,Value) では、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、'MaxPValue',0.05 は、p 値が 0.05 以下である交互作用項のみを含めるように指定します。

    すべて折りたたむ

    予測子の線形項が格納されている一変量の GAM に学習させ、学習済みのモデルに関数 addInteractions を使用して交互作用項を追加します。

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

    load carbig

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

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

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

    Mdl = fitrgam(tbl,'MPG');

    学習済みのモデルに上位 5 つの重要な交互作用項を追加します。

    UpdatedMdl = addInteractions(Mdl,5);

    Mdl は一変量の GAM、UpdatedMdlMdl のすべての項と 5 つの追加の交互作用項を格納する更新された GAM です。UpdatedMdl の交互作用項を表示します。

    UpdatedMdl.Interactions
    ans = 5×2
    
         2     3
         1     2
         3     4
         1     4
         1     3
    
    

    Interactions プロパティの各行は 1 つの交互作用項を表し、交互作用項の予測子変数の列インデックスを格納します。Interactions プロパティを使用して、モデル内の交互作用項とそれらが fitrgam でモデルに追加された順序を確認できます。

    予測子の線形項が格納されている一変量の GAM に学習させ、学習済みのモデルに関数 addInteractions を使用して交互作用項を追加します。名前と値の引数 'MaxPValue' を指定して、p 値が 'MaxPValue' の値以下である交互作用項を追加します。

    フィッシャーのアヤメのデータ セットを読み込みます。versicolor と virginica の観測値を格納する table を作成します。

    load fisheriris
    inds = strcmp(species,'versicolor') | strcmp(species,'virginica');
    Tbl = array2table(meas(inds,:),'VariableNames',["x1","x2","x3","x4"]);
    Tbl.Y = species(inds,:);

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

    Mdl = fitcgam(Tbl,'Y');

    学習済みのモデル Mdl に重要な交互作用項を追加します。引数 Interactions'all' を指定し、名前と値の引数 'MaxPValue' を 0.05 に設定します。addInteractions は、利用可能なすべての交互作用項の中から p 値が 'MaxPValue' の値以下であるものを特定し、それらをモデルに追加します。'MaxPValue' の既定値は 1 であり、指定したすべての交互作用項がモデルに追加されます。

    UpdatedMdl = addInteractions(Mdl,'all','MaxPValue',0.05);
    UpdatedMdl.Interactions
    ans = 5×2
    
         3     4
         2     4
         1     4
         2     3
         1     3
    
    

    Mdl は一変量の GAM、UpdatedMdlMdl のすべての項と 5 つの追加の交互作用項を格納する更新された GAM です。UpdatedMdl には、利用可能な 6 組の交互作用項のペアのうち 5 組が含まれます。

    入力引数

    すべて折りたたむ

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

    候補セット S に含める交互作用項の数またはリスト。非負の整数スカラー、logical 行列、または 'all' を指定します。

    • 交互作用項の数を非負の整数として指定 — 指定した数の重要な交互作用項が S に含まれます。含まれる項は項の p 値に基づいて選択されます。

    • 交互作用項のリストを logical 行列として指定 — tp 列の logical 行列で指定した項が S に含まれます。t は交互作用項の数、p はモデルの学習に使用した予測子の数です。たとえば、logical([1 1 0; 0 1 1]) は、最初と 2 番目の予測子のペアと 2 番目と 3 番目の予測子のペアの 2 組の交互作用項を表します。

      addInteractions が入力変数のサブセットを予測子として使用する場合、関数はサブセットのみを使用して予測子にインデックスを作成します。つまり、logical 行列の列インデックスでは、応答変数および観測値の重み変数はカウントされません。また、関数で使用されない変数もインデックスでカウントされません。

    • 'all' — 利用可能なすべての交互作用項のペアが S に含まれます。項の総数は p*(p – 1)/2 になります。

    関数 addInteractions は、S に含まれる交互作用項の中から p 値が 'MaxPValue' の値以下であるものを特定し、それらを使用して一連の交互作用木を構築します。S に含まれるすべての項を使用して交互作用木を構築するには、既定値 ('MaxPValue',1) を使用します。

    データ型: single | double | logical | char | string

    名前と値の引数

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

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

    例: addInteractions(Mdl,'all','MaxPValue',0.05,'Verbose',1,'NumPrints',10) は、p 値が 0.05 以下である利用可能な交互作用項をすべて含め、10 回の反復ごとに診断メッセージを表示するように指定します。

    交互作用項の勾配ブースティングの初期学習率。区間 (0,1] の数値スカラーとして指定します。

    交互作用木に対するそれぞれのブースティング反復において、addInteractions は最初に初期学習率で当てはめを行います。分類の場合、モデルの当てはめが改善される学習率が見つかるまで、学習率を半分にして当てはめが繰り返されます。回帰の場合、学習全体を通じて初期の率が使用されます。

    モデルの学習に使用する学習率を小さくした方が必要な学習反復回数は増えますが、多くの場合は精度が向上します。

    勾配ブースティングの詳細については、勾配ブースティング アルゴリズムを参照してください。

    例: 'InitialLearnRateForInteractions',0.1

    データ型: single | double

    それぞれの交互作用木 (交互作用項のブースティング木) の決定分岐 (枝ノード) の最大数。正の整数スカラーとして指定します。

    例: 'MaxNumSplitsPerInteraction',5

    データ型: single | double

    交互作用項の検出に使用する最大 p 値。区間 [0,1] の数値スカラーとして指定します。

    addInteractions は、最初に Interactions の値から交互作用項の候補セット S を特定します。その後、p 値が 'MaxPValue' の値以下である交互作用項を特定し、それらを使用して一連の交互作用木を構築します。

    既定値 ('MaxPValue',1) では、候補セット S に含まれるすべての交互作用項についての交互作用木が構築されます。

    交互作用項の検出の詳細については、交互作用項の検出を参照してください。

    例: 'MaxPValue',0.05

    データ型: single | double

    診断メッセージ出力の反復回数。非負の整数スカラーとして指定します。この引数は、'Verbose' として 1 を指定した場合のみ有効です。

    'Verbose',1'NumPrint',numPrint を指定すると、numPrint 回の反復ごとに診断メッセージがコマンド ウィンドウに表示されます。

    既定値は Mdl.ModelParameters.NumPrint で、GAM オブジェクト Mdl を作成する際に指定する NumPrint 値です。

    例: 'NumPrint',500

    データ型: single | double

    交互作用項あたりの木の数。正の整数スカラーとして指定します。

    'NumTreesPerInteraction' の値は、予測子の交互作用項に対する勾配ブースティング反復回数と等しくなります。addInteractions は、各反復において、交互作用項ごとに 1 つずつ一連の交互作用木をモデルに追加します。勾配ブースティング アルゴリズムの詳細については、勾配ブースティング アルゴリズムを参照してください。

    当てはめたモデルに指定した数の木が含まれているかどうかについては、'Verbose' が 1 または 2 の場合に表示される診断メッセージ、またはモデル MdlReasonForTermination プロパティの値で確認できます。

    例: 'NumTreesPerInteraction',500

    データ型: single | double

    詳細レベル。01、または 2 を指定します。Verbose の値は、コマンド ウィンドウに表示される情報の量を制御します。

    次の表は、使用できる詳細レベル オプションの一覧です。

    説明
    0いずれの情報も表示されません。
    1numPrint 回の反復ごとに診断メッセージが表示されます。ここで、numPrint'NumPrint' の値です。
    21 回の反復ごとに診断メッセージが表示されます。

    診断メッセージの各行にそれぞれのブースティング反復に関する情報が表示されます。次の列があります。

    • Type — 学習済みの木のタイプ 1D (予測子木、予測子の線形項のブースティング木) または 2D (交互作用木、予測子の交互作用項のブースティング木)

    • NumTreesaddInteractions がそれまでにモデルに追加した線形項または交互作用項あたりの木の数

    • Deviance — モデルの逸脱度

    • RelTol — モデル予測の相対変化 (y^ky^k1)(y^ky^k1)/y^ky^k (y^k は反復 k におけるモデル予測の列ベクトル)

    • LearnRate — 現在の反復で使用されている学習率

    既定値は Mdl.ModelParameters.VerbosityLevel で、GAM オブジェクト Mdl を作成する際に指定する Verbose 値です。

    例: 'Verbose',1

    データ型: single | double

    出力引数

    すべて折りたたむ

    更新された一般化加法モデル。ClassificationGAM または RegressionGAM モデル オブジェクトとして返されます。UpdatedMdl のオブジェクト タイプは入力モデル Mdl と同じになります。

    入力引数 Mdl を上書きするには、addInteractions の出力を Mdl に代入します。

    Mdl = addInteractions(Mdl,Interactions);

    詳細

    すべて折りたたむ

    逸脱度

    逸脱度は、残差二乗和を汎化したものです。飽和モデルと比較した適合度を測定します。

    当てはめたモデルの逸脱度は、そのモデルと飽和モデルの対数尤度の差の 2 倍です。

    -2(logL - logLs),

    L は当てはめたモデルの対数尤度、Ls は飽和モデルの対数尤度です。飽和モデルは、推定可能な最大数のパラメーターを含むモデルです。

    addInteractions は、逸脱度を使用してモデルの適合度を測定し、各反復で逸脱度が小さくなる学習率を探します。コマンド ウィンドウに逸脱度と学習率を表示するには、'Verbose' で 1 または 2 を指定します。

    アルゴリズム

    すべて折りたたむ

    勾配ブースティング アルゴリズム

    addInteractions は、勾配ブースティング アリゴリズム (回帰の場合は最小二乗ブースティング、分類の場合は適応ロジスティック回帰) を使用して、交互作用木 (予測子の交互作用項のブースティング木) のセットを一変量の一般化加法モデルに追加します。このアルゴリズムは、交互作用木に対して最大 'NumTreesPerInteraction' 回まで反復されます。

    それぞれのブースティング反復において、addInteractions は初期学習率 'InitialLearnRateForInteractions' で一連の交互作用木を構築します。

    • 一連の木の構築において、関数は一度に 1 つずつ木に学習させます。応答 (回帰の場合は観測された応答値、分類の場合は観測されたクラスのスコア) とそれまでに学習させたすべての木から集約した予測の差分である残差に木を当てはめます。ブースティングの学習速度を制御するために、木を学習率で縮小し、その木をモデルに追加して残差を更新します。

      • 更新されたモデル = 現在のモデル + (学習率)·(新しい木)

      • 更新された残差 = 現在の残差 – (学習率)·(新しい木で説明される応答)

    • 一連の木を追加してモデルの当てはめが改善されると (つまり、当てはめの逸脱度が許容誤差より大きな値だけ小さくなると)、addInteractions は次の反復に移ります。

    • そうでない場合、分類では addInteractions は学習率を半分にし、それを使用してモデルと残差を更新します。モデルの当てはめが改善される学習率が見つかるまで、学習率を半分にして当てはめが繰り返されます。交互作用木に対してそのような学習率が見つからないと、モデルの当てはめが終了します。回帰では、一連の木を追加しても初期学習率でモデルの当てはめが改善されない場合、モデルの当てはめを終了します。

      学習が停止した原因は、学習済みモデルの ReasonForTermination プロパティで確認できます。

    交互作用項の検出

    交互作用項のペア xixj (Interactions で指定) ごとに、項が統計的に有意であるかどうかを調べる F 検定が実行されます。

    プロセスを高速化するために、addInteractions は最大 8 個の同確率のビンに数値予測子をビン化します。予測子に含まれる一意の値が 8 より少なければ、ビンの数を 8 より少なくすることができます。F 検定では、xi と xj で作成されるビンの応答がそれぞれ等しくなるという帰無仮説が、少なくとも 1 つのビンの応答値が他とは異なるという対立仮説に対して検証されます。p 値が小さい場合、差が有意であることを意味します。これは、対応する交互作用項が有意であり、その項を含めることでモデルの当てはめを改善できることを示します。

    addInteractions は、p 値が 'MaxPValue' の値以下である項を使用して一連の交互作用木を構築します。'MaxPValue' の既定値 1 を使用すると、Interactions で指定したすべての項を使用して交互作用木を構築できます。

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

    バージョン履歴

    R2021a で導入