メインコンテンツ

fitcgam

バイナリ分類用の一般化加法モデル (GAM) の当てはめ

R2021a 以降

説明

Mdl = fitcgam(Tbl,ResponseVarName) は、table Tbl に格納されている標本データを使用して学習させた一般化加法モデル Mdl を返します。入力引数 ResponseVarName は、バイナリ分類用のクラス ラベルが含まれている Tbl 内の変数の名前です。

Mdl = fitcgam(Tbl,formula) は、モデル仕様の引数 formula を使用して、Tbl 内のクラス ラベルと予測子変数を指定します。formula を使用して、予測子変数のサブセットと予測子変数の交互作用項を指定できます。

Mdl = fitcgam(Tbl,Y) は、table Tbl 内の予測子変数とベクトル Y 内のクラス ラベルを使用します。

Mdl = fitcgam(X,Y) は、行列 X 内の予測子とベクトル Y 内のクラス ラベルを使用します。

Mdl = fitcgam(___,Name,Value) では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、'Interactions',5 は、モデルに交互作用項を 5 つ含めるように指定します。名前と値の引数 Interactions を使用して、交互作用項のリストを指定することもできます。

[Mdl,AggregateOptimizationResults] = fitcgam(___) は、名前と値の引数 OptimizeHyperparametersHyperparameterOptimizationOptions が指定されている場合に、ハイパーパラメーターの最適化の結果が格納された AggregateOptimizationResults も返します。HyperparameterOptimizationOptionsConstraintType オプションと ConstraintBounds オプションも指定する必要があります。この構文を使用すると、交差検証損失ではなくコンパクトなモデル サイズに基づいて最適化したり、オプションは同じでも制約範囲は異なる複数の一連の最適化問題を実行したりできます。

すべて折りたたむ

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

ionosphere データ セットを読み込みます。このデータ セットには、レーダー反射についての 34 個の予測子と、不良 ('b') または良好 ('g') という 351 個の二項反応が含まれています。

load ionosphere

レーダー反射が不良 ('b') と良好 ('g') のどちらであるかを識別する一変量の GAM に学習させます。

Mdl = fitcgam(X,Y)
Mdl = 
  ClassificationGAM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: 'logit'
                Intercept: 2.2715
          NumObservations: 351


  Properties, Methods

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

classOrder = Mdl.ClassNames
classOrder = 2×1 cell
    {'b'}
    {'g'}

学習データの最初の観測値を分類し、予測に対する Mdl 内の項のローカルな効果をプロットします。

label = predict(Mdl,X(1,:))
label = 1×1 cell array
    {'g'}

plotLocalEffects(Mdl,X(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で、最初の観測値 X(1,:)'g' として分類します。関数plotLocalEffectsで、予測に対する上位 10 個の重要な項のローカルな効果を示す横棒グラフを作成します。ローカルな効果の各値は、'g' の分類スコアへの各項の寄与を示します。これは、観測値の分類が 'g' となる事後確率のロジットです。

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

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

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

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

フィッシャーのアヤメのデータ セットを読み込みます。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,:);

formula の指定

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

Mdl1 = fitcgam(tbl,'Y ~ x1 + x2 + x3 + x4 + x1:x2 + x2:x3');

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

Mdl1.Interactions
ans = 2×2

     2     3
     1     2

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

'Interactions' の指定

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

Mdl2 = fitcgam(tbl,'Y','Interactions',logical([1 1 0 0; 0 1 1 0]));
Mdl2.Interactions
ans = 2×2

     2     3
     1     2

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

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

Mdl3 = fitcgam(tbl,'Y','Interactions','all','MaxPValue',0.01);
Mdl3.Interactions
ans = 5×2

     3     4
     2     4
     1     4
     2     3
     1     3

Mdl3 には、利用可能な 6 組の交互作用項のペアのうち 5 組が含まれます。

関数 addInteractions の使用

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

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

Mdl4 = fitcgam(tbl,'Y');
UpdatedMdl4 = addInteractions(Mdl4,5);
UpdatedMdl4.Interactions
ans = 5×2

     3     4
     2     4
     1     4
     2     3
     1     3

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

fitcgam を使用して、交差検証済みの 10 分割 (既定の交差検証オプション) の GAM に学習させます。その後、kfoldPredict を使用し、学習分割観測値に対して学習させたモデルを使用して、検証分割観測値のクラス ラベルを予測します。

ionosphere データ セットを読み込みます。このデータ セットには、レーダー反射についての 34 個の予測子と、不良 ('b') または良好 ('g') という 351 個の二項反応が含まれています。

load ionosphere

既定の交差検証オプションを使用して交差検証済み GAM を作成します。名前と値の引数 'CrossVal''on' として指定します。

rng('default') % For reproducibility
CVMdl = fitcgam(X,Y,'CrossVal','on')
CVMdl = 
  ClassificationPartitionedGAM
    CrossValidatedModel: 'GAM'
         PredictorNames: {'x1'  'x2'  'x3'  'x4'  'x5'  'x6'  'x7'  'x8'  'x9'  'x10'  'x11'  'x12'  'x13'  'x14'  'x15'  'x16'  'x17'  'x18'  'x19'  'x20'  'x21'  'x22'  'x23'  'x24'  'x25'  'x26'  'x27'  'x28'  'x29'  'x30'  'x31'  'x32'  'x33'  'x34'}
           ResponseName: 'Y'
        NumObservations: 351
                  KFold: 10
              Partition: [1×1 cvpartition]
      NumTrainedPerFold: [1×1 struct]
             ClassNames: {'b'  'g'}
         ScoreTransform: 'logit'


  Properties, Methods

関数 fitcgam で 10 分割の ClassificationPartitionedGAM モデル オブジェクト CVMdl が作成されます。交差検証時は、以下の手順が実行されます。

  1. データを 10 個のセットに無作為に分割する。

  2. 各セットについて、そのセットを検証データとして予約し、他の 9 個のセットを使用してモデルに学習させる。

  3. 10 個のコンパクトな学習済みモデルを交差検証済みモデル オブジェクト ClassificationPartitionedGAMTrained プロパティに 10 行 1 列の cell ベクトルとして格納する。

既定の交差検証の設定は、名前と値の引数 'CVPartition''Holdout''KFold''Leaveout' を使用してオーバーライドできます。

kfoldPredict を使用して X の観測値を分類します。それぞれの観測値に対するクラス ラベルが、その観測値を使用せずに学習させたモデルを使用して予測されます。

label = kfoldPredict(CVMdl);

混同行列を作成して、観測値の真のクラスを予測されたラベルと比較します。

C = confusionchart(Y,label);

Figure contains an object of type ConfusionMatrixChart.

分類誤差を計算します。

L = kfoldLoss(CVMdl)
L = 
0.0712

10 個の分割の平均誤分類率は約 7%です。

名前と値の引数 OptimizeHyperparameters を使用して、GAM のハイパーパラメーターを交差検証損失に関して最適化します。

census1994.mat に保存されている 1994 年の国勢調査データを読み込みます。このデータ セットは、個人の年収が $50,000 を超えるかどうかを予測するための、米国勢調査局の人口統計データから構成されます。この分類タスクでは、年齢、労働階級、教育レベル、婚姻区分、人種などが与えられた人の給与カテゴリを予測するモデルを当てはめます。

load census1994

census1994 には学習データ セット adultdata およびテスト データ セット adulttest が含まれています。この例では、実行時間を短縮するために、関数datasampleを使用して 500 の学習観測値と 500 のテスト観測値をサブサンプリングします。

rng('default')
NumSamples = 5e2;
adultdata = datasample(adultdata,NumSamples,'Replace',false);
adulttest = datasample(adulttest,NumSamples,'Replace',false);

学習データ adultdata を関数 fitcgam に渡して GAM 分類器に学習させ、OptimizeHyperparameters 引数を含めます。InitialLearnRateForPredictorsNumTreesPerPredictorInteractionsInitialLearnRateForInteractions、および NumTreesPerInteraction の最適な値を fitcgam で求めるため、'auto' として OptimizeHyperparameters を指定します。再現性を得るために、'expected-improvement-plus' の獲得関数を選択します。既定の獲得関数は実行時に決定されるので、結果が異なる場合があります。

Mdl = fitcgam(adultdata,'salary','OptimizeHyperparameters','auto', ...
    'HyperparameterOptimizationOptions', ...
    struct('AcquisitionFunctionName','expected-improvement-plus'))
|==========================================================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | InitialLearnRate-| NumTreesPerP-| Interactions | InitialLearnRate-| NumTreesPerI-|
|      | result |             | runtime     | (observed)  | (estim.)    | ForPredictors    | redictor     |              | ForInteractions  | nteraction   |
|==========================================================================================================================================================|
|    1 | Best   |       0.148 |      11.721 |       0.148 |       0.148 |         0.001555 |          356 |            5 |         0.068117 |           16 |
|    2 | Accept |       0.182 |     0.88258 |       0.148 |     0.14977 |          0.94993 |           25 |            0 |                - |            - |
|    3 | Accept |       0.174 |      0.5938 |       0.148 |       0.148 |         0.016784 |           11 |            3 |          0.12025 |           12 |
|    4 | Accept |       0.176 |      10.466 |       0.148 |       0.148 |          0.14207 |          179 |           71 |        0.0020629 |           22 |
|    5 | Accept |       0.176 |      9.6859 |       0.148 |      0.1502 |        0.0010025 |          104 |           12 |        0.0052651 |          178 |
|    6 | Accept |       0.152 |       9.212 |       0.148 |     0.15035 |        0.0017566 |          323 |            4 |         0.079281 |           16 |
|    7 | Accept |       0.166 |      16.319 |       0.148 |     0.14801 |        0.0011656 |          497 |           10 |          0.17479 |           92 |
|    8 | Accept |       0.172 |       10.99 |       0.148 |     0.14914 |        0.0014435 |          397 |            0 |                - |            - |
|    9 | Accept |        0.16 |        11.9 |       0.148 |     0.14801 |        0.0016398 |          432 |            2 |         0.045129 |           11 |
|   10 | Accept |       0.172 |       4.414 |       0.148 |     0.14855 |        0.0013589 |          146 |            9 |         0.065204 |           12 |
|   11 | Accept |       0.156 |      10.724 |       0.148 |     0.14911 |         0.002082 |          368 |            7 |        0.0011513 |           12 |
|   12 | Accept |       0.178 |      11.031 |       0.148 |     0.14801 |          0.13309 |          360 |            6 |          0.67104 |           13 |
|   13 | Accept |       0.154 |      11.475 |       0.148 |     0.15192 |        0.0014287 |          380 |            5 |         0.027919 |           18 |
|   14 | Accept |       0.164 |      10.497 |       0.148 |     0.15151 |        0.0015368 |          318 |            5 |         0.022401 |           93 |
|   15 | Best   |       0.144 |      9.6966 |       0.144 |     0.14515 |        0.0020403 |          331 |            8 |          0.12167 |           11 |
|   16 | Accept |       0.168 |      9.6039 |       0.144 |     0.14401 |        0.0016201 |          329 |           10 |          0.74319 |           12 |
|   17 | Accept |        0.16 |      9.0822 |       0.144 |      0.1526 |         0.002317 |          313 |            9 |         0.093554 |           18 |
|   18 | Accept |       0.158 |      9.8266 |       0.144 |     0.15425 |        0.0016865 |          331 |            5 |         0.023535 |           11 |
|   19 | Accept |       0.146 |      11.464 |       0.144 |     0.15096 |        0.0019238 |          386 |            6 |         0.043578 |           14 |
|   20 | Accept |       0.156 |      11.165 |       0.144 |     0.15234 |        0.0023502 |          385 |            6 |         0.063029 |           11 |
|==========================================================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | InitialLearnRate-| NumTreesPerP-| Interactions | InitialLearnRate-| NumTreesPerI-|
|      | result |             | runtime     | (observed)  | (estim.)    | ForPredictors    | redictor     |              | ForInteractions  | nteraction   |
|==========================================================================================================================================================|
|   21 | Accept |       0.146 |      11.203 |       0.144 |     0.15105 |        0.0023381 |          383 |            6 |         0.042149 |           21 |
|   22 | Best   |       0.142 |      11.922 |       0.142 |     0.14959 |        0.0024173 |          400 |            7 |         0.022884 |           18 |
|   23 | Accept |       0.152 |      13.325 |       0.142 |     0.14972 |        0.0017718 |          443 |            8 |         0.022974 |           18 |
|   24 | Best   |        0.14 |      12.785 |        0.14 |     0.14681 |        0.0032302 |          417 |            7 |          0.01295 |           23 |
|   25 | Accept |       0.148 |      11.121 |        0.14 |     0.14672 |        0.0043102 |          371 |            6 |         0.016624 |           27 |
|   26 | Accept |        0.14 |      11.871 |        0.14 |     0.14433 |        0.0029528 |          410 |            6 |         0.011766 |           25 |
|   27 | Accept |        0.15 |      13.058 |        0.14 |     0.14441 |        0.0038288 |          455 |            6 |         0.038686 |           14 |
|   28 | Accept |       0.144 |      13.992 |        0.14 |     0.14374 |        0.0030969 |          471 |            7 |        0.0093565 |           39 |
|   29 | Accept |       0.144 |      14.149 |        0.14 |     0.14331 |        0.0033063 |          487 |            5 |        0.0033831 |           26 |
|   30 | Best   |       0.138 |      12.442 |       0.138 |     0.14213 |        0.0031221 |          420 |            5 |        0.0035267 |           26 |

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 326.2596 seconds
Total objective function evaluation time: 316.6185

Best observed feasible point:
    InitialLearnRateForPredictors    NumTreesPerPredictor    Interactions    InitialLearnRateForInteractions    NumTreesPerInteraction
    _____________________________    ____________________    ____________    _______________________________    ______________________

              0.0031221                      420                  5                     0.0035267                         26          

Observed objective function value = 0.138
Estimated objective function value = 0.14267
Function evaluation time = 12.4417

Best estimated feasible point (according to models):
    InitialLearnRateForPredictors    NumTreesPerPredictor    Interactions    InitialLearnRateForInteractions    NumTreesPerInteraction
    _____________________________    ____________________    ____________    _______________________________    ______________________

              0.0029528                      410                  6                     0.011766                          25          

Estimated objective function value = 0.14213
Estimated function evaluation time = 12.2594
Mdl = 
  ClassificationGAM
                       PredictorNames: {'age'  'workClass'  'fnlwgt'  'education'  'education_num'  'marital_status'  'occupation'  'relationship'  'race'  'sex'  'capital_gain'  'capital_loss'  'hours_per_week'  'native_country'}
                         ResponseName: 'salary'
                CategoricalPredictors: [2 4 6 7 8 9 10 14]
                           ClassNames: [<=50K    >50K]
                       ScoreTransform: 'logit'
                            Intercept: -1.3924
                         Interactions: [6×2 double]
                      NumObservations: 500
    HyperparameterOptimizationResults: [1×1 BayesianOptimization]


  Properties, Methods

fitcgam は、最適な推定実行可能点を使用する ClassificationGAM モデル オブジェクトを返します。最適な推定実行可能点は、ベイズ最適化プロセスの基となるガウス過程モデルに基づいて交差検証損失の信頼限界の上限を最小化するハイパーパラメーターのセットです。

ベイズ最適化プロセスは、目的関数のガウス過程モデルを内部に保持します。目的関数は、分類の場合は交差検証済み誤分類率です。各反復において、最適化プロセスによってガウス過程モデルが更新され、そのモデルを使用して新しいハイパーパラメーターのセットが求められます。反復表示の各行には、新しいハイパーパラメーターのセットと次の列の値が表示されます。

  • Objective — 新しいハイパーパラメーターのセットにおいて計算された目的関数値。

  • Objective runtime — 目的関数の評価時間。

  • Eval resultAcceptBest または Error として指定される結果レポート。Accept は目的関数が有限値を返すことを示し、Error は目的関数が有限の実数スカラーではない値を返すことを示します。Best は、目的関数が以前に計算された目的関数値より小さい有限値を返すことを示します。

  • BestSoFar(observed) — それまでに計算された最小の目的関数値。この値は、現在の反復の目的関数値 (現在の反復における Eval result の値が Best である場合)、または前回の Best 反復の値です。

  • BestSoFar(estim.) — 各反復で、更新されたガウス過程モデルを使用して、それまでに試行されたすべてのハイパーパラメーターのセットにおける目的関数値の信頼限界の上限が推定されます。次に、信頼限界の上限が最小になる点が選択されます。BestSoFar(estim.) の値は、最小点において関数predictObjectiveによって返される目的関数値です。

反復表示の下のプロットは、BestSoFar(observed)BestSoFar(estim.) の値をそれぞれ青と緑で示しています。

返されるオブジェクト Mdl は、最適な推定実行可能点、つまり、最終的なガウス過程モデルに基づく最後の反復で BestSoFar(estim.) の値を生成するハイパーパラメーターのセットを使用します。

HyperparameterOptimizationResults プロパティの Mdl から最適な推定実行可能点を取得します。

Mdl.HyperparameterOptimizationResults.XAtMinEstimatedObjective
ans=1×5 table
    InitialLearnRateForPredictors    NumTreesPerPredictor    Interactions    InitialLearnRateForInteractions    NumTreesPerInteraction
    _____________________________    ____________________    ____________    _______________________________    ______________________

              0.0029528                      410                  6                     0.011766                          25          

代わりに、関数 bestPoint を使用することもできます。既定では、関数 bestPoint は基準 'min-visited-upper-confidence-interval' を使用します。

[x,CriterionValue,iteration] = bestPoint(Mdl.HyperparameterOptimizationResults)
x=1×5 table
    InitialLearnRateForPredictors    NumTreesPerPredictor    Interactions    InitialLearnRateForInteractions    NumTreesPerInteraction
    _____________________________    ____________________    ____________    _______________________________    ______________________

              0.0029528                      410                  6                     0.011766                          25          

CriterionValue = 0.1464
iteration = 26

基準 'min-visited-upper-confidence-interval' では、26 番目の反復から取得されたハイパーパラメーターが最適な点として選択されます。CriterionValue は、最終的なガウス過程モデルによって計算された交差検証損失の上限です。

また、HyperparameterOptimizationResults プロパティから、または Criterion として 'min-observed' を指定して、最適な観測実行可能点 (つまり、反復表示内の最後の Best 点) を抽出できます。

Mdl.HyperparameterOptimizationResults.XAtMinObjective
ans=1×5 table
    InitialLearnRateForPredictors    NumTreesPerPredictor    Interactions    InitialLearnRateForInteractions    NumTreesPerInteraction
    _____________________________    ____________________    ____________    _______________________________    ______________________

              0.0031221                      420                  5                     0.0035267                         26          

[x_observed,CriterionValue_observed,iteration_observed] = bestPoint(Mdl.HyperparameterOptimizationResults,'Criterion','min-observed')
x_observed=1×5 table
    InitialLearnRateForPredictors    NumTreesPerPredictor    Interactions    InitialLearnRateForInteractions    NumTreesPerInteraction
    _____________________________    ____________________    ____________    _______________________________    ______________________

              0.0031221                      420                  5                     0.0035267                         26          

CriterionValue_observed = 0.1380
iteration_observed = 30

基準 'min-observed' では、30 番目の反復から取得されたハイパーパラメーターが最適な点として選択されます。CriterionValue_observed は、選択されたハイパーパラメーターを使用して計算された実際の交差検証損失です。詳細については、bestPoint の名前と値の引数Criterionを参照してください。

テスト セットの分類誤差を計算して、テスト セットで分類器の性能を評価します。

L = loss(Mdl,adulttest,'salary')
L = 0.1564

関数bayesoptを使用して、GAM のパラメーターを交差検証に関して最適化します。

代わりに、名前と値の引数OptimizeHyperparametersを使用して fitcgam の名前と値の引数の最適な値を特定することもできます。例については、OptimizeHyperparameters を使用した GAM の最適化を参照してください。

census1994.mat に保存されている 1994 年の国勢調査データを読み込みます。このデータ セットは、個人の年収が $50,000 を超えるかどうかを予測するための、米国勢調査局の人口統計データから構成されます。この分類タスクでは、年齢、労働階級、教育レベル、婚姻区分、人種などが与えられた人の給与カテゴリを予測するモデルを当てはめます。

load census1994

census1994 には学習データ セット adultdata およびテスト データ セット adulttest が含まれています。この例では、実行時間を短縮するために、関数datasampleを使用して adultdata から 500 の学習観測値をサブサンプリングします。

rng('default')
NumSamples = 5e2;
adultdata = datasample(adultdata,NumSamples,'Replace',false);

交差検証用の分割を設定します。これにより、各ステップで最適化に使用される交差検証セットが決まります。

c = cvpartition(adultdata.salary,'KFold',5);

ベイズ最適化を使用して最適化する名前と値の引数に合わせてoptimizableVariableオブジェクトを準備します。この例では、fitcgam の引数 MaxNumSplitsPerPredictorNumTreesPerPredictor の最適な値を調べます。

maxNumSplits = optimizableVariable('maxNumSplits',[1,10],'Type','integer');
numTrees = optimizableVariable('numTrees',[1,500],'Type','integer');

入力として z = [maxNumSplits,numTrees] を受け入れ z の交差検証損失値を返す目的関数を作成します。

minfun = @(z)kfoldLoss(fitcgam(adultdata,'salary','CVPartition',c, ...
    'MaxNumSplitsPerPredictor',z.maxNumSplits, ...
    'NumTreesPerPredictor',z.numTrees)); 

交差検証オプションを指定した場合、関数 fitcgam は交差検証済みモデル オブジェクト ClassificationPartitionedGAM を返します。関数kfoldLossは、交差検証済みモデルで取得した分類損失を返します。そのため、関数ハンドル minfun は、z のパラメーターで交差検証損失を計算します。

bayesopt を使用して最適なパラメーター [maxNumSplits,numTrees] を求めます。再現性を得るために、'expected-improvement-plus' の獲得関数を選択します。既定の獲得関数は実行時に決定されるので、結果が異なる場合があります。

results = bayesopt(minfun,[maxNumSplits,numTrees],'Verbose',0, ...
    'IsObjectiveDeterministic',true, ...
    'AcquisitionFunctionName','expected-improvement-plus');

results から最適な点を取得します。

zbest = bestPoint(results)
zbest=1×2 table
    maxNumSplits    numTrees
    ____________    ________

         1             5    

zbest の値を使用して最適化された GAM に学習させます。

Mdl = fitcgam(adultdata,'salary', ...
    'MaxNumSplitsPerPredictor',zbest.maxNumSplits, ...
    'NumTreesPerPredictor',zbest.numTrees);

入力引数

すべて折りたたむ

モデルを学習させるために使用する標本データ。table として指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。

必要に応じて、Tbl に応答変数用の列と観測値の重み用の列を含めることができます。

  • 応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。

    • fitcgam はバイナリ分類のみをサポートします。応答変数に正確に 2 つの異なるクラスを含めるか、名前と値の引数 ClassNames を使用して学習用の 2 つのクラスを指定しなければなりません。

    • 名前と値の引数 ClassNames を使用して応答変数におけるクラスの順序を指定することをお勧めします。

  • 重みの列は数値ベクトルでなければなりません。

  • Tbl 内の応答変数は ResponseVarName または formula を使用して指定し、Tbl 内の観測値の重みは Weights を使用して指定しなければなりません。

    • ResponseVarName を使用して応答変数を指定 — fitcgam は、残りの変数を予測子として使用します。Tbl 内の残りの変数のサブセットを予測子として使用するには、PredictorNames を使用して予測子変数を指定します。

    • formula を使用してモデル仕様を定義 — fitcgam は、formula の指定に従って、Tbl 内の変数のサブセットを予測子変数および応答変数として使用します。

Tbl に応答変数が含まれていない場合は、Y を使用して応答変数を指定します。応答変数 Y の長さと Tbl の行数は等しくなければなりません。Tbl 内の変数のサブセットを予測子として使用するには、PredictorNames を使用して予測子変数を指定します。

fitcgam は、Tbl に含まれている NaN'' (空の文字ベクトル)、"" (空の string)、<missing>、および <undefined> の値を欠損値と見なします。

  • fitcgam は、すべての値が欠損値である観測値は当てはめに使用しません。

  • fitcgam は、応答の値が欠損値である観測値は当てはめに使用しません。

  • fitcgam は、一部の値が欠損値である観測値を予測子に使用し、これらの観測値が有効な値をもつ、変数上の分岐を特定します。

データ型: table

応答変数名。Tbl 内の応答変数の名前を含む文字ベクトルまたは string スカラーとして指定します。たとえば、応答変数 YTbl.Y に格納されている場合、'Y' として指定します。

データ型: char | string

モデル仕様。'Y ~ terms' という形式の文字ベクトルまたは string スカラーとして指定します。引数 formula では、応答変数および予測子変数の線形項と交互作用項を指定します。formula は、モデルに学習させるための予測子として Tbl 内の変数のサブセットを指定する場合に使用します。式を指定した場合、formula に現れない Tbl 内の変数は使用されません。

たとえば、'Y~x1+x2+x3+x1:x2' のように指定します。この形式では、Y は応答変数を表し、x1x2、および x3 は予測子変数の線形項を表します。x1:x2x1x2 の交互作用項を表します。

式の変数名は Tbl の変数名 (Tbl.Properties.VariableNames) であり、有効な MATLAB® 識別子でなければなりません。関数 isvarname を使用して Tbl の変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName を使用してそれらを変換できます。

代わりに、formula を使用して応答変数と予測子の線形項を指定し、'Interactions' を使用して予測子の交互作用項を指定することもできます。

fitcgam は、p 値が 'MaxPValue' の値以下である項のみを使用して一連の交互作用木を構築します。

例: 'Y~x1+x2+x3+x1:x2'

データ型: char | string

クラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。

  • fitcgam はバイナリ分類のみをサポートします。Y に正確に 2 つの異なるクラスを含めるか、名前と値の引数 ClassNames を使用して学習用の 2 つのクラスを指定しなければなりません。

  • Y の長さは X または Tbl の観測値の数と等しくなければなりません。

  • Y が文字配列の場合、各ラベルは配列の 1 つの行に対応しなければなりません。

  • 名前と値のペアの引数 ClassNames を使用してクラスの順序を指定することをお勧めします。

  • fitcgam は、Y に含まれている NaN'' (空の文字ベクトル)、"" (空の string)、<missing>、および <undefined> の値を欠損値と見なします。fitcgam は、応答の値が欠損値である観測値は当てはめに使用しません。

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

予測子データ。数値行列として指定します。X の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。

fitcgam は、X に含まれている NaN の値を欠損値と見なします。すべての値が欠損値である観測値は当てはめに使用されません。fitcgam は、一部の値が欠損値である観測値は X に使用し、それらの観測値が有効な値をもつ変数の分岐を特定します。

データ型: single | double

名前と値の引数

すべて展開する

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

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

例: 'Interactions','all','MaxPValue',0.05 は、p 値が 0.05 以下である利用可能な交互作用項をすべて含めるように指定します。

GAM のオプション

すべて展開する

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

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

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

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

例: 'InitialLearnRateForInteractions',0.1

データ型: single | double

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

予測子木に対するそれぞれのブースティング反復において、fitcgam は最初に初期学習率で当てはめを行います。モデルの当てはめが改善される学習率が見つかるまで、学習率を半分にして当てはめが繰り返されます。

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

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

例: 'InitialLearnRateForPredictors',0.1

データ型: single | double

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

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

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

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

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

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

例: 'Interactions','all'

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

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

例: 'MaxNumSplitsPerInteraction',5

データ型: single | double

それぞれの予測子木 (線形項のブースティング木) の決定分岐 (枝ノード) の最大数。正の整数スカラーとして指定します。既定では、fitcgam は予測子木に木の切り株を使用します。

例: 'MaxNumSplitsPerPredictor',5

データ型: single | double

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

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

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

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

例: 'MaxPValue',0.05

データ型: single | double

数値予測子のビンの個数。正の整数スカラーまたは [] (空) として指定します。

  • 'NumBins' の値として正の整数スカラー (numBins) を指定した場合、fitcgam は最大 numBins 個の同確率のビンにすべての数値予測子をビン化し、元のデータではなくビンのインデックスに対して木が成長します。

    • 予測子に含まれる一意の値が numBins より少なければ、ビンの数を numBins より少なくすることができます。

    • fitcgam は、カテゴリカル予測子をビン化しません。

  • 'NumBins' の値が空 ([]) である場合、fitcgam はどの予測子もビン化しません。

大規模な学習データ セットを使用する場合、このビン化オプションを使用すると学習を高速化できますが、精度が低下する可能性があります。最初は 'NumBins' の既定値を使用し、精度や学習速度に応じて後から値を変更できます。

学習済みのモデル Mdl では、ビンのエッジは BinEdges プロパティに格納されます。

例: 'NumBins',50

データ型: single | double

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

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

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

例: 'NumTreesPerInteraction',500

データ型: single | double

線形項あたりの木の数。正の整数スカラーとして指定します。

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

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

例: 'NumTreesPerPredictor',500

データ型: single | double

その他の分類オプション

すべて展開する

カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。

説明
正の整数のベクトル

ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~ p です。p はモデルの学習に使用した予測子の数です。

fitcgam が入力変数のサブセットを予測子として使用する場合、関数はサブセットのみを使用して予測子にインデックスを作成します。応答変数、観測値の重みの変数、または関数で使用されないその他の変数は、いずれも CategoricalPredictors 値でカウントされません。

logical ベクトル

true というエントリは、対応する予測子がカテゴリカルであることを意味します。ベクトルの長さは p です。

文字行列行列の各行は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。
文字ベクトルの cell 配列または string 配列配列の各要素は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。
"all"すべての予測子がカテゴリカルです。

既定では、予測子データが table (Tbl) の場合、fitcgam は、その変数が logical ベクトル、順序付けのない categorical ベクトル、文字配列、string 配列、または文字ベクトルの cell 配列のいずれかである場合に、変数を categorical であると見なします。予測子データが行列 (X) である場合、fitcgam はすべての予測子が連続的であると見なします。他の予測子をカテゴリカル予測子として指定するには、名前と値の引数 CategoricalPredictors を使用してそれらを指定します。

例: 'CategoricalPredictors','all'

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

学習に使用するクラスの名前。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列として指定します。ClassNames のデータ型は Tbl 内の応答変数または Y と同じでなければなりません。

ClassNames が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。

ClassNames の使用目的は次のとおりです。

  • 学習時のクラスの順序を指定する。

  • クラスの順序に対応する入力または出力引数の次元の順序を指定する。たとえば、Cost の次元の順序や predict によって返される分類スコアの列の順序を指定するために ClassNames を使用します。

  • 学習用にクラスのサブセットを選択する。たとえば、Y に含まれているすべての異なるクラス名の集合が ["a","b","c"] であるとします。クラス "a" および "c" のみの観測値を使用してモデルに学習をさせるには、ClassNames=["a","c"] を指定します。

ClassNames の既定値は、Tbl 内の応答変数または Y に含まれているすべての異なるクラス名の集合です。

例: ClassNames=["b","g"]

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

点の誤分類のコスト。次のいずれかとして指定します。

  • 2 行 2 列の数値行列。Cost(i,j) は真のクラスが i である場合に点をクラス j に分類するコストです (行は真のクラス、列は予測したクラスに対応します)。Cost の対応する行と列についてクラスの順序を指定するには、名前と値の引数 'ClassNames' を設定します。

  • 構造体 S には 2 つのフィールドがあり、Tbl または Y の応答変数と同じデータ型のグループ名を表す変数が格納されている S.ClassNames と、コスト行列が格納されている S.ClassificationCosts です。

例: 'Cost',[0 2; 1 0]

データ型: single | double | struct

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

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

例: 'NumPrint',500

データ型: single | double

予測子変数名。一意な名前の string 配列または一意な文字ベクトルの cell 配列として指定します。PredictorNames の機能は、学習データの提供方法によって決まります。

  • XY を指定した場合、PredictorNames を使用して X 内の予測子変数に名前を割り当てることができます。

    • PredictorNames 内の名前の順序は、X の列の順序に一致しなければなりません。つまり、PredictorNames{1}X(:,1) の名前、PredictorNames{2}X(:,2) の名前であり、他も同様です。また、size(X,2)numel(PredictorNames) は等しくなければなりません。

    • 既定では PredictorNames{'x1','x2',...} です。

  • Tbl を指定する場合、PredictorNames を使用して学習に使用する予測子変数を選択できます。つまり、fitcgam は、学習中に PredictorNames の予測子変数と応答変数のみを使用します。

    • PredictorNamesTbl.Properties.VariableNames のサブセットでなければならず、応答変数の名前を含めることはできません。

    • 既定では、すべての予測子変数の名前が PredictorNames に格納されます。

    • PredictorNamesformula の両方ではなく、いずれか一方を使用して学習用の予測子を指定することをお勧めします。

例: "PredictorNames",["SepalLength","SepalWidth","PetalLength","PetalWidth"]

データ型: string | cell

各クラスの事前確率。次のいずれかとして指定します。

  • 文字ベクトルまたは string スカラー。

    • 'empirical'Y または Tbl の応答変数のクラスの頻度からクラス確率を決定します。観測値の重みを渡す場合、fitcgam はこの重みを使用してクラス確率を計算します。

    • 'uniform' はすべてのクラス確率を均等に設定します。

  • ベクトル (クラスごとに 1 つのスカラー値)。'Prior' の対応する要素についてクラスの順序を指定するには、名前と値の引数 'ClassNames' を設定します。

  • 次の 2 つのフィールドがある構造体 S

    • S.ClassNames には、Y または Tbl の応答変数と同じ型の変数のクラス名が格納されます。

    • S.ClassProbs には、対応する確率のベクトルが格納されます。

fitcgam は、合計がクラスの事前確率の値になるように各クラスの重み ('Weights') を正規化します。

例: 'Prior','uniform'

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

応答変数名。文字ベクトルまたは string スカラーとして指定します。

  • Y を指定した場合、ResponseName を使用して応答変数の名前を指定できます。

  • ResponseVarName または formula を指定した場合、ResponseName を使用できません。

例: ResponseName="response"

データ型: char | string

スコア変換。組み込みの変換関数の名前または関数ハンドルとして指定します。

次の表は、使用可能なスコア変換をまとめたものです。対応する文字ベクトルまたは string スカラーを使用して、いずれかを指定します。

説明
"doublelogit"1/(1 + e–2x)
"invlogit"log(x / (1 – x))
"ismax"最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを 0 に設定する
"logit"1/(1 + ex)
"none" または "identity"x (変換なし)
"sign"x < 0 のとき –1
x = 0 のとき 0
x > 0 のとき 1
"symmetric"2x – 1
"symmetricismax"最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを –1 に設定する
"symmetriclogit"2/(1 + ex) – 1

MATLAB 関数またはユーザー定義関数の場合は、スコア変換用の関数ハンドルを使用します。関数ハンドルは、行列 (元のスコア) を受け入れて同じサイズの行列 (変換したスコア) を返さなければなりません。

この引数によって、predictmarginedge などのオブジェクト関数で使用する出力スコアの計算が決まります。事後確率の計算には 'logit' (既定)、事後確率のロジットの計算には 'none' を使用します。

例: 'ScoreTransform','none'

データ型: char | string | function_handle

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

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

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

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

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

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

  • Deviance — モデルの逸脱度

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

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

例: 'Verbose',1

データ型: single | double

観測値の重み。スカラー値のベクトルまたは Tbl 内の変数の名前として指定します。X または Tbl の各行に含まれている観測値には、Weights の対応する値で重みが付けられます。Weights のサイズは、X または Tbl の行数と同じでなければなりません。

入力データを table Tbl として指定した場合、Weights は数値ベクトルが含まれている Tbl 内の変数の名前にすることができます。この場合、Weights には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、重みのベクトル WTbl.W に格納されている場合、'W' として指定します。

fitcgam は、合計がクラスの事前確率の値になるように各クラスの重みを正規化します。Inf の重みはサポートされません。

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

メモ

交差検証の名前と値の引数は、名前と値の引数 OptimizeHyperparameters と一緒には使用できません。OptimizeHyperparameters の場合の交差検証は、名前と値の引数 HyperparameterOptimizationOptions を使用することのみによって変更できます。

交差検証オプション

すべて展開する

交差検証済みモデルに学習させるためのフラグ。'on' または 'off' として指定します。

'on' を指定すると、10 の分割を使用して交差検証済みモデルの学習が実行されます。

名前と値の引数 'CVPartition''Holdout''KFold'、または 'Leaveout' を使用すると、この交差検証の設定をオーバーライドできます。交差検証済みモデルを作成するときに使用できる交差検証の名前と値の引数は、一度に 1 つだけです。

または、モデルの作成後に Mdlcrossval に渡して交差検証を実行します。

例: 'Crossval','on'

交差検証分割。交差検証のタイプと学習セットおよび検証セットのインデックス付けを指定する cvpartition オブジェクトとして指定します。

交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

例: cvp = cvpartition(500,KFold=5) を使用して、500 個の観測値に対する 5 分割交差検証について無作為な分割を作成するとします。この場合、CVPartition=cvp を設定して交差検証分割を指定できます。

ホールドアウト検証に使用するデータの比率。範囲 (0,1) のスカラー値として指定します。Holdout=p を指定した場合、以下の手順が実行されます。

  1. p*100% のデータを無作為に選択して検証データとして確保し、残りのデータを使用してモデルに学習をさせる。

  2. コンパクトな学習済みモデルを交差検証済みモデルの Trained プロパティに格納する。

交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

例: Holdout=0.1

データ型: double | single

交差検証済みモデルで使用する分割の数。1 より大きい正の整数値として指定します。KFold=k を指定した場合、以下の手順が実行されます。

  1. データを無作為に k 個のセットに分割する。

  2. 各セットについて、そのセットを検証データとして確保し、他の k – 1 個のセットを使用してモデルに学習をさせる。

  3. k 個のコンパクトな学習済みモデルを、交差検証済みモデルの Trained プロパティに含まれている k 行 1 列の cell ベクトルに格納する。

交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

例: KFold=5

データ型: single | double

Leave-one-out 法の交差検証のフラグ。"on" または "off" として指定します。Leaveout="on" を指定した場合、n 個の観測値 (n は、モデルの NumObservations プロパティで指定される、欠損観測値を除外した観測値の個数) のそれぞれについて以下の手順が実行されます。

  1. いずれかの観測値を検証データとして確保し、他の n - 1 個の観測値を使用してモデルに学習をさせる。

  2. n 個のコンパクトな学習済みモデルを、交差検証済みモデルの Trained プロパティに含まれている n 行 1 列の cell ベクトルに格納する。

交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

例: Leaveout="on"

データ型: char | string

ハイパーパラメーター最適化オプション

すべて展開する

最適化するパラメーター。次の値のいずれかを指定します。

  • 'none' — 最適化を行いません。

  • 'auto'InitialLearnRateForPredictorsNumTreesPerPredictorInteractionsInitialLearnRateForInteractions、および NumTreesPerInteraction を最適化します。

  • 'auto-univariate'InitialLearnRateForPredictors および NumTreesPerPredictor を最適化します。

  • 'auto-bivariate'InteractionsInitialLearnRateForInteractions および NumTreesPerInteraction を最適化します。

  • 'all' — すべての使用可能パラメーターを最適化します。

  • 'all-univariate' — すべての使用可能な一変量パラメーターを最適化します。

  • 'all-bivariate' — すべての使用可能な二変量パラメーターを最適化します。

  • 使用可能パラメーター名の string 配列または cell 配列。

  • optimizableVariable オブジェクトのベクトル。通常は hyperparameters の出力です。

fitcgam では、以下のパラメーターを使用できます。

  • 一変量のハイパーパラメーター

    • InitialLearnRateForPredictorsfitcgam は範囲 [1e-3,1] の対数スケールで実数値を探索します。

    • MaxNumSplitsPerPredictorfitcgam は範囲 [1,maxNumSplits] で整数を探索します。ここで、maxNumSplitsmin(30,max(2,NumObservations–1)) です。NumObservations は、返されたモデル MdlNumObservations プロパティに格納されている観測値の数 (欠損観測値を除く) です。

    • NumTreesPerPredictorfitcgam は、範囲 [10,500] の対数スケールで整数を探索します。

  • 二変量のハイパーパラメーター

    • Interactionsfitcgam は、範囲 [0,MaxNumInteractions] の対数スケールで整数を探索します。ここで、MaxNumInteractionsNumPredictors*(NumPredictors – 1)/2NumPredictors はモデルの学習に使用した予測子の数です。

    • InitialLearnRateForInteractionsfitcgam は範囲 [1e-3,1] の対数スケールで実数値を探索します。

    • MaxNumSplitsPerInteractionfitcgam は、範囲 [1,maxNumSplits] の整数値を探索します。

    • NumTreesPerInteractionfitcgam は、範囲 [10,500] の対数スケールで整数を探索します。

'auto' または 'all' を使用して、一変量パラメーターおよび二変量パラメーター両方に最適なハイパーパラメーター値を求めます。あるいは、'auto-univariate' または 'all-univariate' を使用して一変量パラメーターに最適な値を求めてから、'auto-bivariate' または 'all-bivariate' を使用して二変量パラメーターに最適な値を求めることもできます。例については、OptimizeHyperparameters を使用した GAM の最適化バイナリ分類用の一般化加法モデルの学習を参照してください。

最適化では、パラメーターを変化させることにより、fitcgam の交差検証損失 (誤差) を最小化しようとします。交差検証のタイプおよびその他の最適化の側面を制御するには、名前と値の引数 HyperparameterOptimizationOptions を使用します。HyperparameterOptimizationOptions を使用すると、ConstraintType オプションと ConstraintBounds オプションを設定することにより、交差検証損失の代わりに (コンパクトな) モデル サイズを最適化の目的として使用できます。

メモ

OptimizeHyperparameters の値は、他の名前と値の引数を使用して指定した値より優先されます。たとえば、OptimizeHyperparameters"auto" に設定すると、fitcgam"auto" オプションに対応するハイパーパラメーターを最適化して、ハイパーパラメーターに指定された値を無視します。

既定以外のパラメーターを設定するには、既定以外の値が含まれている optimizableVariable オブジェクトのベクトルを渡します。以下に例を示します。

load fisheriris
params = hyperparameters('fitcgam',meas,species);
params(1).Range = [1e-4,1e6];

OptimizeHyperparameters の値として params を渡します。

既定では、コマンド ラインに反復表示が表示され、最適化のハイパーパラメーターの個数に従ってプロットが表示されます。最適化とプロットにおける目的関数は誤分類率です。反復表示を制御するには、名前と値の引数 HyperparameterOptimizationOptionsVerbose オプションを設定します。プロットを制御するには、名前と値の引数 HyperparameterOptimizationOptionsShowPlots フィールドを設定します。

例: 'OptimizeHyperparameters','auto'

最適化のオプション。HyperparameterOptimizationOptions オブジェクトまたは構造体として指定します。この引数を指定すると、名前と値の引数 OptimizeHyperparameters の効果が変化します。HyperparameterOptimizationOptions を指定する場合、OptimizeHyperparameters も指定しなければなりません。オプションはいずれも任意です。ただし、AggregateOptimizationResults を返すには ConstraintBoundsConstraintType を設定しなければなりません。構造体で設定できるオプションは HyperparameterOptimizationOptions オブジェクトと同じです。

オプション既定の設定
Optimizer
  • "bayesopt" — ベイズ最適化を使用。内部的には bayesopt が呼び出されます。

  • "gridsearch" — 次元ごとに NumGridDivisions の値があるグリッド探索を使用。"gridsearch" では、グリッドからの一様な非復元抽出により、無作為な順序で探索します。最適化後、sortrows(Mdl.HyperparameterOptimizationResults) コマンドを使用してグリッド順の table を取得できます。

  • "randomsearch"MaxObjectiveEvaluations 個の点で無作為に探索。

"bayesopt"
ConstraintBounds

N 個の最適化問題の制約範囲。N 行 2 列の数値行列または [] として指定します。ConstraintBounds の列には最適化問題の下限と上限の値が含まれます。ConstraintBounds を数値ベクトルとして指定すると、ConstraintBounds の 2 列目に値が代入され、1 列目にはゼロが代入されます。ConstraintBounds を指定する場合、ConstraintType も指定しなければなりません。

[]
ConstraintTarget

最適化問題の制約ターゲット。"matlab" または "coder" として指定します。ConstraintBoundsConstraintType[] の場合に ConstraintTarget を設定すると、ConstraintTarget[] に設定されます。ConstraintTargetConstraintType の値により、目的関数と制約関数が決まります。詳細については、HyperparameterOptimizationOptions を参照してください。

ConstraintBoundsConstraintType を指定する場合の既定値は "matlab" です。そうでない場合、既定値は [] となります。
ConstraintType

最適化問題の制約タイプ。"size" または "loss" として指定します。ConstraintType を指定する場合、ConstraintBounds も指定しなければなりません。ConstraintTargetConstraintType の値により、目的関数と制約関数が決まります。詳細については、HyperparameterOptimizationOptions を参照してください。

[]
AcquisitionFunctionName

獲得関数のタイプ:

  • "expected-improvement-per-second-plus"

  • "expected-improvement"

  • "expected-improvement-plus"

  • "expected-improvement-per-second"

  • "lower-confidence-bound"

  • "probability-of-improvement"

目的関数の実行時に最適化が決まるので、名前に per-second が含まれている獲得関数は、再現性がある結果を生成しません。名前に plus が含まれている獲得関数は、領域を過剰利用している場合に動作を変更します。詳細は、獲得関数のタイプを参照してください。

"expected-improvement-per-second-plus"
MaxObjectiveEvaluations目的関数評価の最大数。ConstraintBounds を使用して最適化問題を複数指定する場合、MaxObjectiveEvaluations の値は各最適化問題に個別に適用されます。"bayesopt" および "randomsearch" の場合は 30"gridsearch" の場合はグリッド全体
MaxTime

最適化の制限時間。非負の実数スカラーとして指定します。制限時間の単位は、tictoc によって測定される秒です。MaxTime の値にかかわらず、少なくとも 1 回は最適化反復が実行されます。MaxTime は関数評価を中断させないため、実行時間が MaxTime を超える可能性があります。ConstraintBounds を使用して最適化問題を複数指定する場合、制限時間は各最適化問題に個別に適用されます。

Inf
NumGridDivisionsOptimizer="gridsearch" における各次元の値の個数。値は、各次元の値の個数を表す正の整数のベクトル、またはすべての次元に適用されるスカラーが可能です。カテゴリカル変数の場合、このオプションは無視されます。10
ShowPlots最適化の進行状況のプロットを表示するかどうかを示す logical 値。このオプションが true の場合、最適な観測された目的関数値が反復回数に対してプロットされます。ベイズ最適化を使用する場合 (Optimizer="bayesopt")、最適な推定された目的関数値もプロットされます。最適な観測された目的関数値および最適な推定された目的関数値は、反復表示の BestSoFar (observed) 列および BestSoFar (estim.) 列の値にそれぞれ対応しています。これらの値は、Mdl.HyperparameterOptimizationResults のプロパティ ObjectiveMinimumTrace および EstimatedObjectiveMinimumTrace で確認できます。問題にベイズ最適化の最適化パラメーターが 1 つまたは 2 つある場合、ShowPlots はパラメーターに対する目的関数のモデルもプロットします。true
SaveIntermediateResults最適化の結果を保存するかどうかを示す logical 値。このオプションが true の場合、"BayesoptResults" という名前のワークスペース変数が反復ごとに上書きされます。この変数は BayesianOptimization オブジェクトです。ConstraintBounds を使用して最適化問題を複数指定する場合、ワークスペース変数は "AggregateBayesoptResults" という名前の AggregateBayesianOptimization オブジェクトになります。false
Verbose

コマンド ラインにおける表示レベル:

  • 0 — 反復表示なし

  • 1 — 反復表示あり

  • 2 — 反復表示と追加情報

詳細については、bayesopt の名前と値の引数 Verbose およびベイズ最適化の使用による分類器の当てはめの最適化の例を参照してください。

1
UseParallelベイズ最適化を並列実行するかどうかを示す logical 値。並列実行には Parallel Computing Toolbox™ が必要です。並列でのタイミングに再現性がないため、並列ベイズ最適化で再現性のある結果が生成されるとは限りません。詳細については、並列ベイズ最適化を参照してください。false
Repartition

反復ごとに交差検証を再分割するかどうかを示す論理値。このオプションが false の場合、オプティマイザーは単一の分割を最適化に使用します。

分割ノイズが考慮されるので、通常は値を true にすると最も確実な結果が得られます。ただし、true で最適な結果を得るには、2 倍以上の関数評価が必要になります。

false
次の 3 つのオプションのいずれか 1 つのみを指定してください。
CVPartitioncvpartition によって作成された cvpartition オブジェクト交差検証オプションが指定されていない場合は KFold=5
Holdoutホールドアウトの比率を表す範囲 (0,1) のスカラー
KFold1 より大きい整数

例: HyperparameterOptimizationOptions=struct(UseParallel=true)

出力引数

すべて折りたたむ

学習済みの一般化加法モデル。次の表のモデル オブジェクトのいずれかとして返されます。

モデル オブジェクトモデル オブジェクトの学習用の交差検証オプションモデル オブジェクトを使用した観測値の分類方法
ClassificationGAMなしpredict を使用して新しい観測値を分類し、resubPredict を使用して学習観測値を分類します。
ClassificationPartitionedGAMKFoldHoldoutLeaveoutCrossVal、または CVPartition を指定kfoldPredict を使用して、学習時に fitcgam がホールドアウトした観測値を分類します。kfoldPredict は、各観測値のクラス ラベルをその観測値を使用せずに学習させたモデルを使用して予測します。

Mdl のプロパティを参照するには、ドット表記を使用します。たとえば、Mdl の交互作用項を表示するには、コマンド ウィンドウに「Mdl.Interactions」と入力します。

OptimizeHyperparameters を指定して HyperparameterOptimizationOptionsConstraintType オプションと ConstraintBounds オプションを設定している場合、Mdl はモデル オブジェクトの N 行 1 列の cell 配列になります。ここで、NConstraintBounds の行数と等しくなります。いずれの最適化問題からも実行可能なモデルが得られない場合、cell 配列の各値が [] になります。

複数の最適化問題についての最適化の結果の集計。AggregateBayesianOptimization オブジェクトとして返されます。AggregateOptimizationResults を返すには、OptimizeHyperparametersHyperparameterOptimizationOptions を指定しなければなりません。HyperparameterOptimizationOptionsConstraintType オプションと ConstraintBounds オプションも指定する必要があります。この出力の生成方法を示す例については、Hyperparameter Optimization with Multiple Constraint Boundsを参照してください。

詳細

すべて折りたたむ

アルゴリズム

すべて折りたたむ

参照

[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 で導入

すべて展開する