fitrgam
構文
説明
は、table Mdl
= fitrgam(Tbl
,ResponseVarName
)Tbl
に格納されている標本データを使用して学習させた一般化加法モデル Mdl
を返します。入力引数 ResponseVarName
は、回帰用の応答値が含まれている Tbl
内の変数の名前です。
では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、Mdl
= fitrgam(___,Name,Value
)'Interactions',5
は、モデルに交互作用項を 5 つ含めるように指定します。名前と値の引数 'Interactions'
を使用して、交互作用項のリストを指定することもできます。
例
一般化加法モデルの学習
予測子の線形項が格納されている一変量の 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 に学習させます。BOROUGH
、NEIGHBORHOOD
、BUILDINGCLASSCATEGORY
および 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
Mdl
は RegressionGAM
モデル オブジェクトです。モデル表示には、モデルのプロパティの一部のみが表示されます。プロパティの完全な一覧を表示するには、ワークスペースで変数名 Mdl
をダブルクリックします。Mdl
の変数エディターが開きます。あるいは、コマンド ウィンドウでドット表記を使用してプロパティを表示できます。たとえば、Mdl
の推定された切片 (定数) 項を表示します。
Mdl.Intercept
ans = 3.7518e+05
学習データの最初の観測値について売価を予測し、予測に対する Mdl
内の項のローカルな効果をプロットします。
yFit = predict(Mdl,NYCHousing2015(1,:))
yFit = 4.4421e+05
plotLocalEffects(Mdl,NYCHousing2015(1,:))
関数predict
で、最初の観測値の売価を 4.4421e5
として予測します。関数plotLocalEffects
で、予測に対する Mdl
内の項のローカルな効果を示す横棒グラフを作成します。ローカルな効果の各値は、予測売価への各項の寄与を示します。
交互作用項をもつ GAM の学習
3 つの異なる方法で、予測子の線形項と交互作用項が格納された一般化加法モデルに学習させます。
入力引数
formula
を使用して交互作用項を指定します。名前と値の引数
'Interactions'
を指定します。線形項をもつモデルを構築してから、そのモデルに関数
addInteractions
を使用して交互作用項を追加します。
carbig
データ セットを読み込みます。このデータ セットには、1970 年代と 1980 年代初期に製造された自動車の測定値が格納されています。
load carbig
予測子変数 (Acceleration
、Displacement
、Horsepower
、および Weight
) と応答変数 (MPG
) を格納する table を作成します。
tbl = table(Acceleration,Displacement,Horsepower,Weight,MPG);
formula
の指定
4 つの線形項 (Acceleration
、Displacement
、Horsepower
、および 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*x2
と x2*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、UpdatedMdl4
は Mdl4
のすべての項と 3 つの追加の交互作用項を格納する更新された GAM です。
fitrgam
を使用した交差検証済みの GAM の作成
fitrgam
を使用して、交差検証済みの 10 分割 (既定の交差検証オプション) の GAM に学習させます。その後、kfoldPredict
を使用し、学習分割観測値に対して学習をさせたモデルを使用して、検証分割観測値の応答を予測します。
carbig
データ セットを読み込みます。このデータ セットには、1970 年代と 1980 年代初期に製造された自動車の測定値が格納されています。
load carbig
予測子変数 (Acceleration
、Displacement
、Horsepower
、および Weight
) と応答変数 (MPG
) を格納する table を作成します。
tbl = table(Acceleration,Displacement,Horsepower,Weight,MPG);
既定の交差検証オプションを使用して交差検証済み GAM を作成します。名前と値の引数 'CrossVal'
を 'on'
として指定します。
rng('default') % For reproducibility CVMdl = fitrgam(tbl,'MPG','CrossVal','on')
CVMdl = RegressionPartitionedGAM CrossValidatedModel: 'GAM' PredictorNames: {'Acceleration' 'Displacement' 'Horsepower' 'Weight'} ResponseName: 'MPG' NumObservations: 398 KFold: 10 Partition: [1x1 cvpartition] NumTrainedPerFold: [1x1 struct] ResponseTransform: 'none' IsStandardDeviationFit: 0
関数 fitrgam
で 10 分割の RegressionPartitionedGAM
モデル オブジェクト CVMdl
が作成されます。交差検証時は、以下の手順が実行されます。
データを 10 個のセットに無作為に分割する。
各セットについて、そのセットを検証データとして予約し、他の 9 個のセットを使用してモデルに学習させる。
10 個のコンパクトな学習済みモデルを交差検証済みモデル オブジェクト
RegressionPartitionedGAM
のTrained
プロパティに 10 行 1 列の cell ベクトルとして格納する。
既定の交差検証の設定は、名前と値の引数 'CVPartition'
、'Holdout'
、'KFold'
、'Leaveout'
を使用してオーバーライドできます。
kfoldPredict
を使用して tbl
の観測値の応答を予測します。それぞれの観測値に対する応答が、その観測値を使用せずに学習させたモデルを使用して予測されます。
yHat = kfoldPredict(CVMdl);
yHat
は数値ベクトルです。最初の 5 つの予測応答を表示します。
yHat(1:5)
ans = 5×1
19.4848
15.7203
15.5742
15.3185
17.8223
回帰損失 (平均二乗誤差) を計算します。
L = kfoldLoss(CVMdl)
L = 17.7248
kfoldLoss
から 10 個の分割についての平均二乗誤差の平均が返されます。
OptimizeHyperparameters
を使用した GAM の最適化
名前と値の引数 OptimizeHyperparameters を使用して、GAM のハイパーパラメーターを交差検証に関して最適化します。
carbig
データ セットを読み込みます。このデータ セットには、1970 年代と 1980 年代初期に製造された自動車の測定値が格納されています。
load carbig
予測子変数 (X
) として Acceleration
、Displacement
、Horsepower
および Weight
を、応答変数 (Y
) として MPG
を指定します。
X = [Acceleration,Displacement,Horsepower,Weight]; Y = MPG;
データを学習セットとテスト セットに分割します。観測値の約 80% をモデルの学習に使用し、観測値の約 20% を学習済みモデルの新しいデータでの性能のテストに使用します。cvpartition
を使用してデータを分割します。
rng('default') % For reproducibility cvp = cvpartition(length(MPG),'Holdout',0.20); XTrain = X(training(cvp),:); YTrain = Y(training(cvp)); XTest = X(test(cvp),:); YTest = Y(test(cvp));
学習データを関数 fitrgam
に渡して回帰用の GAM に学習させ、OptimizeHyperparameters
引数を含めます。InitialLearnRateForPredictors
、NumTreesPerPredictor
、Interactions
、InitialLearnRateForInteractions
、および NumTreesPerInteraction
の最適な値を fitrgam
で求めるため、'auto'
として 'OptimizeHyperparameters'
を指定します。再現性を得るために、'expected-improvement-plus'
の獲得関数を選択します。既定の獲得関数は実行時に決定されるので、結果が異なる場合があります。
rng('default') Mdl = fitrgam(XTrain,YTrain,'OptimizeHyperparameters','auto', ... 'HyperparameterOptimizationOptions', ... struct('AcquisitionFunctionName','expected-improvement-plus'))
|==========================================================================================================================================================| | Iter | Eval | Objective: | Objective | BestSoFar | BestSoFar | InitialLearnRate-| NumTreesPerP-| Interactions | InitialLearnRate-| NumTreesPerI-| | | result | log(1+loss) | runtime | (observed) | (estim.) | ForPredictors | redictor | | ForInteractions | nteraction | |==========================================================================================================================================================| | 1 | Best | 2.874 | 4.6069 | 2.874 | 2.874 | 0.21533 | 500 | 1 | 0.35042 | 13 | | 2 | Accept | 2.89 | 0.20809 | 2.874 | 2.8748 | 0.062841 | 14 | 1 | 0.014907 | 10 | | 3 | Accept | 3.3298 | 1.796 | 2.874 | 2.8746 | 0.001387 | 222 | 0 | - | - | | 4 | Best | 2.8562 | 5.8182 | 2.8562 | 2.8564 | 0.08216 | 434 | 4 | 0.14875 | 283 | | 5 | Accept | 2.976 | 1.8052 | 2.8562 | 2.8564 | 0.99942 | 217 | 1 | 0.0017491 | 34 | | 6 | Best | 2.8195 | 1.382 | 2.8195 | 2.8198 | 0.13778 | 152 | 6 | 0.012566 | 13 | | 7 | Best | 2.7519 | 0.90985 | 2.7519 | 2.752 | 0.12531 | 42 | 4 | 0.27647 | 53 | | 8 | Best | 2.7301 | 3.565 | 2.7301 | 2.7301 | 0.18671 | 10 | 3 | 0.0063418 | 487 | | 9 | Best | 2.7196 | 0.46532 | 2.7196 | 2.7196 | 0.13792 | 10 | 5 | 0.1663 | 27 | | 10 | Accept | 2.8281 | 2.9027 | 2.7196 | 2.7196 | 0.23324 | 10 | 4 | 0.75904 | 314 | | 11 | Accept | 2.7864 | 0.25131 | 2.7196 | 2.7196 | 0.13035 | 10 | 1 | 0.30171 | 476 | | 12 | Accept | 2.7993 | 0.61803 | 2.7196 | 2.7647 | 0.16476 | 10 | 6 | 0.015498 | 32 | | 13 | Accept | 2.7847 | 4.5171 | 2.7196 | 2.7197 | 0.0090953 | 499 | 5 | 0.027878 | 40 | | 14 | Accept | 3.5847 | 0.27508 | 2.7196 | 2.7592 | 0.0035123 | 11 | 3 | 0.011127 | 11 | | 15 | Accept | 2.7237 | 4.9018 | 2.7196 | 2.759 | 0.015848 | 498 | 3 | 0.14359 | 238 | | 16 | Accept | 2.779 | 1.569 | 2.7196 | 2.7588 | 0.012829 | 10 | 3 | 0.028814 | 217 | | 17 | Accept | 2.7761 | 4.7776 | 2.7196 | 2.7272 | 0.023165 | 488 | 1 | 0.32642 | 302 | | 18 | Accept | 2.8604 | 4.1417 | 2.7196 | 2.7677 | 0.013548 | 495 | 2 | 0.97963 | 141 | | 19 | Accept | 3.5466 | 0.12735 | 2.7196 | 2.7196 | 0.019794 | 10 | 0 | - | - | | 20 | Accept | 2.7513 | 7.3431 | 2.7196 | 2.7196 | 0.02408 | 62 | 6 | 0.023502 | 490 | |==========================================================================================================================================================| | Iter | Eval | Objective: | Objective | BestSoFar | BestSoFar | InitialLearnRate-| NumTreesPerP-| Interactions | InitialLearnRate-| NumTreesPerI-| | | result | log(1+loss) | runtime | (observed) | (estim.) | ForPredictors | redictor | | ForInteractions | nteraction | |==========================================================================================================================================================| | 21 | Accept | 2.7243 | 0.92354 | 2.7196 | 2.7196 | 0.040761 | 11 | 3 | 0.10556 | 120 | | 22 | Best | 2.6969 | 5.0161 | 2.6969 | 2.697 | 0.0032557 | 494 | 2 | 0.039381 | 487 | | 23 | Accept | 2.8184 | 3.8034 | 2.6969 | 2.697 | 0.0072249 | 19 | 3 | 0.27653 | 494 | | 24 | Accept | 2.7788 | 4.3989 | 2.6969 | 2.697 | 0.0064015 | 482 | 1 | 0.013479 | 479 | | 25 | Accept | 2.7646 | 4.4343 | 2.6969 | 2.6971 | 0.0013222 | 473 | 2 | 0.17272 | 436 | | 26 | Accept | 2.8368 | 0.28304 | 2.6969 | 2.6971 | 0.93418 | 11 | 5 | 0.16983 | 11 | | 27 | Accept | 2.7724 | 1.7205 | 2.6969 | 2.6971 | 0.039216 | 11 | 2 | 0.037865 | 480 | | 28 | Accept | 2.8795 | 0.87918 | 2.6969 | 2.6971 | 0.73103 | 11 | 1 | 0.014567 | 480 | | 29 | Accept | 2.782 | 4.0221 | 2.6969 | 2.7267 | 0.0047632 | 493 | 1 | 0.069346 | 247 | | 30 | Accept | 2.7734 | 0.98578 | 2.6969 | 2.7297 | 0.038679 | 103 | 1 | 0.052986 | 68 |
__________________________________________________________ Optimization completed. MaxObjectiveEvaluations of 30 reached. Total function evaluations: 30 Total elapsed time: 88.0979 seconds Total objective function evaluation time: 78.4482 Best observed feasible point: InitialLearnRateForPredictors NumTreesPerPredictor Interactions InitialLearnRateForInteractions NumTreesPerInteraction _____________________________ ____________________ ____________ _______________________________ ______________________ 0.0032557 494 2 0.039381 487 Observed objective function value = 2.6969 Estimated objective function value = 2.7297 Function evaluation time = 5.0161 Best estimated feasible point (according to models): InitialLearnRateForPredictors NumTreesPerPredictor Interactions InitialLearnRateForInteractions NumTreesPerInteraction _____________________________ ____________________ ____________ _______________________________ ______________________ 0.0032557 494 2 0.039381 487 Estimated objective function value = 2.7297 Estimated function evaluation time = 5.009
Mdl = RegressionGAM ResponseName: 'Y' CategoricalPredictors: [] ResponseTransform: 'none' Intercept: 23.7405 Interactions: [2×2 double] IsStandardDeviationFit: 0 NumObservations: 318 HyperparameterOptimizationResults: [1×1 BayesianOptimization] Properties, Methods
fitrgam
は、最適な推定実行可能点を使用する RegressionGAM
モデル オブジェクトを返します。最適な推定実行可能点は、ベイズ最適化プロセスの基となるガウス過程モデルに基づいて交差検証損失 (平均二乗誤差 MSE) の信頼限界の上限を最小化するハイパーパラメーターのセットです。
ベイズ最適化プロセスは、目的関数のガウス過程モデルを内部に保持します。目的関数は、回帰の場合、log
(1 + 交差検証 MSE) です。各反復において、最適化プロセスによってガウス過程モデルが更新され、そのモデルを使用して新しいハイパーパラメーターのセットが求められます。反復表示の各行には、新しいハイパーパラメーターのセットと次の列の値が表示されます。
Objective
— 新しいハイパーパラメーターのセットにおいて計算された目的関数値。Objective runtime
— 目的関数の評価時間。Eval result
—Accept
、Best
または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.0032557 494 2 0.039381 487
代わりに、関数 bestPoint
を使用することもできます。既定では、関数 bestPoint
は基準 'min-visited-upper-confidence-interval'
を使用します。
[x,CriterionValue,iteration] = bestPoint(Mdl.HyperparameterOptimizationResults)
x=1×5 table
InitialLearnRateForPredictors NumTreesPerPredictor Interactions InitialLearnRateForInteractions NumTreesPerInteraction
_____________________________ ____________________ ____________ _______________________________ ______________________
0.0032557 494 2 0.039381 487
CriterionValue = 2.7908
iteration = 22
また、HyperparameterOptimizationResults
プロパティから、または Criterion
として 'min-observed'
を指定して、最適な観測実行可能点 (つまり、反復表示内の最後の Best
点) を抽出できます。
Mdl.HyperparameterOptimizationResults.XAtMinObjective
ans=1×5 table
InitialLearnRateForPredictors NumTreesPerPredictor Interactions InitialLearnRateForInteractions NumTreesPerInteraction
_____________________________ ____________________ ____________ _______________________________ ______________________
0.0032557 494 2 0.039381 487
[x_observed,CriterionValue_observed,iteration_observed] = bestPoint(Mdl.HyperparameterOptimizationResults,'Criterion','min-observed')
x_observed=1×5 table
InitialLearnRateForPredictors NumTreesPerPredictor Interactions InitialLearnRateForInteractions NumTreesPerInteraction
_____________________________ ____________________ ____________ _______________________________ ______________________
0.0032557 494 2 0.039381 487
CriterionValue_observed = 2.6969
iteration_observed = 22
この例では、2 つの基準がハイパーパラメーターの同じセット (22 回目の反復) を最良の点として選択しています。それぞれの基準値が異なるのは、CriterionValue
は最終的なガウス過程モデルによって計算された目的関数値の上限であり、CriterionValue_observed
は選択されたハイパーパラメーターを使用して計算された実際の目的関数値であるためです。詳細については、bestPoint
の名前と値の引数Criterionを参照してください。
平均二乗誤差 (MSE) を計算して、学習セットおよびテスト セットで回帰モデルの性能を評価します。MSE の値が小さいほど、パフォーマンスが優れていることを示します。
LTraining = resubLoss(Mdl)
LTraining = 6.2224
LTest = loss(Mdl,XTest,YTest)
LTest = 18.5724
bayesopt
を使用した交差検証済みの GAM の最適化
関数bayesopt
を使用して、GAM のパラメーターを交差検証に関して最適化します。
代わりに、名前と値の引数OptimizeHyperparametersを使用して fitrgam
の名前と値の引数の最適な値を特定することもできます。例については、OptimizeHyperparameters を使用した GAM の最適化を参照してください。
carbig
データ セットを読み込みます。このデータ セットには、1970 年代と 1980 年代初期に製造された自動車の測定値が格納されています。
load carbig
予測子変数 (X
) として Acceleration
、Displacement
、Horsepower
および Weight
を、応答変数 (Y
) として MPG
を指定します。
X = [Acceleration,Displacement,Horsepower,Weight]; Y = MPG;
最適化のプロセスのために交差検証セットを決めるには、応答値が欠損している観測値を削除する必要があります。応答変数から欠損値を削除し、予測子変数の対応する観測値を削除します。
[Y,TF] = rmmissing(Y); X = X(~TF);
交差検証用の分割を設定します。これにより、各ステップで最適化に使用される交差検証セットが決まります。
c = cvpartition(length(Y),'KFold',5);
ベイズ最適化を使用して最適化する名前と値の引数に合わせてoptimizableVariable
オブジェクトを準備します。この例では、fitrgam
の引数 MaxNumSplitsPerPredictor
と NumTreesPerPredictor
の最適な値を調べます。
maxNumSplits = optimizableVariable('maxNumSplits',[1,10],'Type','integer'); numTrees = optimizableVariable('numTrees',[1,500],'Type','integer');
入力として z = [maxNumSplits,numTrees]
を受け入れ z
の交差検証損失値を返す目的関数を作成します。
minfun = @(z)kfoldLoss(fitrgam(X,Y,'CVPartition',c, ... 'MaxNumSplitsPerPredictor',z.maxNumSplits, ... 'NumTreesPerPredictor',z.numTrees));
交差検証オプションを指定した場合、関数 fitrgam
は交差検証済みモデル オブジェクト RegressionPartitionedGAM
を返します。関数kfoldLoss
は、交差検証済みモデルで取得した回帰損失 (平均二乗誤差) を返します。そのため、関数ハンドル minfun
は、z
のパラメーターで交差検証損失を計算します。
bayesopt
を使用して最良のパラメーター [maxNumSplits,numTrees]
を求めます。再現性を得るために、'expected-improvement-plus'
の獲得関数を選択します。既定の獲得関数は実行時に決定されるので、結果が異なる場合があります。
rng('default') results = bayesopt(minfun,[maxNumSplits,numTrees],'Verbose',0, ... 'IsObjectiveDeterministic',true, ... 'AcquisitionFunctionName','expected-improvement-plus');
results
から最良の点を取得します。
zbest = bestPoint(results)
zbest=1×2 table
maxNumSplits numTrees
____________ ________
1 8
zbest
の値を使用して最適化された GAM に学習させます。
Mdl = fitrgam(X,Y, ... 'MaxNumSplitsPerPredictor',zbest.maxNumSplits, ... 'NumTreesPerPredictor',zbest.numTrees);
入力引数
Tbl
— 標本データ
テーブル
モデルを学習させるために使用する標本データ。テーブルとして指定します。Tbl
の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
必要に応じて、
Tbl
に応答変数用の列と観測値の重み用の列を含めることができます。応答変数と重みの値は数値ベクトルでなければなりません。Tbl
内の応答変数はResponseVarName
またはformula
を使用して指定し、Tbl
内の観測値の重みは'Weights'
を使用して指定しなければなりません。ResponseVarName
を使用して応答変数を指定 —fitrgam
は、残りの変数を予測子として使用します。Tbl
内の残りの変数のサブセットを予測子として使用するには、'PredictorNames'
を使用して予測子変数を指定します。formula
を使用してモデル仕様を定義 —fitrgam
は、formula
の指定に従って、Tbl
内の変数のサブセットを予測子変数および応答変数として使用します。
Tbl
に応答変数が含まれていない場合は、Y
を使用して応答変数を指定します。応答変数Y
の長さとTbl
の行数は等しくなければなりません。Tbl
内の変数のサブセットを予測子として使用するには、'PredictorNames'
を使用して予測子変数を指定します。
fitrgam
は、Tbl
に含まれている NaN
、''
(空の文字ベクトル)、""
(空の string)、<missing>
、および <undefined>
の値を欠損値と見なします。
fitrgam
は、すべての値が欠損値である観測値は当てはめに使用しません。fitrgam
は、応答の値が欠損値である観測値は当てはめに使用しません。fitrgam
は、一部の値が欠損値である観測値を予測子に使用し、これらの観測値が有効な値をもつ、変数上の分岐を特定します。
データ型: table
ResponseVarName
— 応答変数名
Tbl
内の変数の名前
応答変数名。Tbl
内の応答変数の名前を含む文字ベクトルまたは string スカラーとして指定します。たとえば、応答変数 Y
が Tbl.Y
に格納されている場合、'Y'
として指定します。
データ型: char
| string
formula
— モデル仕様
文字ベクトル | string スカラー
モデル仕様。'Y ~ terms'
という形式の文字ベクトルまたは string スカラーとして指定します。引数 formula
では、応答変数および予測子変数の線形項と交互作用項を指定します。formula
は、モデルに学習させるための予測子として Tbl
内の変数のサブセットを指定する場合に使用します。式を指定した場合、formula
に現れない Tbl
内の変数は使用されません。
たとえば、'Y~x1+x2+x3+x1:x2'
のように指定します。この形式では、Y
は応答変数を表し、x1
、x2
、および x3
は予測子変数の線形項を表します。x1:x2
は x1
と x2
の交互作用項を表します。
式の変数名は Tbl
の変数名 (Tbl.Properties.VariableNames
) であり、有効な MATLAB® 識別子でなければなりません。関数 isvarname
を使用して Tbl
の変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName
を使用してそれらを変換できます。
代わりに、formula
を使用して応答変数と予測子の線形項を指定し、'Interactions'
を使用して予測子の交互作用項を指定することもできます。
fitrgam
は、p 値が 'MaxPValue'
の値以下である項のみを使用して一連の交互作用木を構築します。
例: 'Y~x1+x2+x3+x1:x2'
データ型: char
| string
X
— 予測子データ
数値行列
予測子データ。数値行列として指定します。X
の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。
fitrgam
は、X
に含まれている NaN
の値を欠損値と見なします。すべての値が欠損値である観測値は当てはめに使用されません。fitrgam
は、一部の値が欠損値である観測値は X
に使用し、それらの観測値が有効な値をもつ変数の分岐を特定します。
データ型: single
| double
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: 'Interactions','all','MaxPValue',0.05
は、p 値が 0.05 以下である利用可能な交互作用項をすべて含めるように指定します。
FitStandardDeviation
— 標準偏差にモデルを当てはめるためのフラグ
false
または 0
(既定値) | true
または 1
応答変数の標準偏差にモデルを当てはめるためのフラグ。logical 0
(false
) または 1
(true
) を指定します。
'FitStandardDeviation'
として true
を指定した場合、fitrgam
は応答変数の標準偏差について追加のモデルに学習させて、出力 GAM オブジェクト Mdl
の IsStandardDeviationFit
プロパティを true
に設定します。
与えられた観測値の標準偏差値を計算するには、predict
、resubPredict
、または kfoldPredict
を使用します。これらの関数は、応答変数の予測区間も返します。
標準偏差モデルを標準偏差推定の精度に当てはめる場合、最適なハイパーパラメーターの使用が推奨されます。OptimizeHyperparameters
を 'all-univariate'
(一変量の GAM の場合) または 'all'
(二変量の GAM の場合) として、'FitStandardDeviation',true
と一緒に指定します。
例: 'FitStandardDeviation',true
データ型: logical
InitialLearnRateForInteractions
— 交互作用項の勾配ブースティングの学習率
1
(既定値) | (0,1] の数値スカラー
交互作用項の勾配ブースティングの学習率。区間 (0,1] の数値スカラーとして指定します。fitrgam
は、交互作用項の学習全体を通じてこの率を使用します。
モデルの学習に使用する学習率を小さくした方が必要な学習反復回数は増えますが、多くの場合は精度が向上します。
勾配ブースティングの詳細については、勾配ブースティング アルゴリズムを参照してください。
例: 'InitialLearnRateForInteractions',0.1
データ型: single
| double
InitialLearnRateForPredictors
— 線形項の勾配ブースティングの学習率
1
(既定値) | (0,1] の数値スカラー
線形項の勾配ブースティングの学習率。区間 (0,1] の数値スカラーとして指定します。fitrgam
は、線形項の学習全体を通じてこの率を使用します。
モデルの学習に使用する学習率を小さくした方が必要な学習反復回数は増えますが、多くの場合は精度が向上します。
勾配ブースティングの詳細については、勾配ブースティング アルゴリズムを参照してください。
例: 'InitialLearnRateForPredictors',0.1
データ型: single
| double
Interactions
— 交互作用項の数またはリスト
0
(既定値) | 非負の整数スカラー | logical 行列 | 'all'
候補セット S に含める交互作用項の数またはリスト。非負の整数スカラー、logical 行列、または 'all'
を指定します。
交互作用項の数を非負の整数として指定 — 指定した数の重要な交互作用項が S に含まれます。含まれる項は項の p 値に基づいて選択されます。
交互作用項のリストを logical 行列として指定 —
t
行p
列の logical 行列で指定した項が S に含まれます。t
は交互作用項の数、p
はモデルの学習に使用した予測子の数です。たとえば、logical([1 1 0; 0 1 1])
は、最初と 2 番目の予測子のペアと 2 番目と 3 番目の予測子のペアの 2 組の交互作用項を表します。fitrgam
が入力変数のサブセットを予測子として使用する場合、関数はサブセットのみを使用して予測子にインデックスを作成します。つまり、logical 行列の列インデックスでは、応答変数および観測値の重み変数はカウントされません。また、関数で使用されない変数もインデックスでカウントされません。'all'
— 利用可能なすべての交互作用項のペアが S に含まれます。項の総数はp*(p – 1)/2
になります。
関数 fitrgam
は、S に含まれる交互作用項の中から p 値が 'MaxPValue'
の値以下であるものを特定し、それらを使用して一連の交互作用木を構築します。S に含まれるすべての項を使用して交互作用木を構築するには、既定値 ('MaxPValue'
,1) を使用します。
例: 'Interactions','all'
データ型: single
| double
| logical
| char
| string
MaxNumSplitsPerInteraction
— 交互作用木あたりの決定分岐の最大数
4 (既定値) | 正の整数スカラー
それぞれの交互作用木 (交互作用項のブースティング木) の決定分岐 (枝ノード) の最大数。正の整数スカラーとして指定します。
例: 'MaxNumSplitsPerInteraction',5
データ型: single
| double
MaxNumSplitsPerPredictor
— 予測子木あたりの決定分岐の最大数
1 (既定値) | 正の整数スカラー
それぞれの予測子木 (線形項のブースティング木) の決定分岐 (枝ノード) の最大数。正の整数スカラーとして指定します。既定では、fitrgam
は予測子木に木の切り株を使用します。
例: 'MaxNumSplitsPerPredictor',5
データ型: single
| double
MaxPValue
— 交互作用項の検出に使用する最大 p 値
1 (既定値) | [0,1] の数値スカラー
交互作用項の検出に使用する最大 p 値。区間 [0,1] の数値スカラーとして指定します。
fitrgam
は、最初に formula
または 'Interactions'
から交互作用項の候補セット S を特定します。その後、p 値が 'MaxPValue'
の値以下である交互作用項を特定し、それらを使用して一連の交互作用木を構築します。
既定値 ('MaxPValue',1
) では、候補セット S に含まれるすべての交互作用項についての交互作用木が構築されます。
交互作用項の検出の詳細については、交互作用項の検出を参照してください。
例: 'MaxPValue',0.05
データ型: single
| double
NumBins
— 数値予測子のビンの個数
256
(既定値) | 正の整数スカラー | []
(空)
数値予測子のビンの個数。正の整数スカラーまたは []
(空) として指定します。
'NumBins'
の値として正の整数スカラー (numBins
) を指定した場合、fitrgam
は最大numBins
個の同確率のビンにすべての数値予測子をビン化し、元のデータではなくビンのインデックスに対して木が成長します。予測子に含まれる一意の値が
numBins
より少なければ、ビンの数をnumBins
より少なくすることができます。fitrgam
は、カテゴリカル予測子をビン化しません。
'NumBins'
の値が空 ([]
) である場合、fitrgam
はどの予測子もビン化しません。
大規模な学習データ セットを使用する場合、このビン化オプションを使用すると学習を高速化できますが、精度が低下する可能性があります。最初は 'NumBins'
の既定値を使用し、精度や学習速度に応じて後から値を変更できます。
学習済みのモデル Mdl
では、ビンのエッジは BinEdges
プロパティに格納されます。
例: 'NumBins',50
データ型: single
| double
NumTreesPerInteraction
— 交互作用項あたりの木の数
100 (既定値) | 正の整数スカラー
交互作用項あたりの木の数。正の整数スカラーとして指定します。
'NumTreesPerInteraction'
の値は、予測子の交互作用項に対する勾配ブースティング反復回数と等しくなります。fitrgam
は、各反復において、交互作用項ごとに 1 つずつ一連の交互作用木をモデルに追加します。勾配ブースティング アルゴリズムの詳細については、勾配ブースティング アルゴリズムを参照してください。
当てはめたモデルに指定した数の木が含まれているかどうかについては、'Verbose'
が 1 または 2 の場合に表示される診断メッセージ、またはモデル Mdl
の ReasonForTermination
プロパティの値で確認できます。
例: 'NumTreesPerInteraction',500
データ型: single
| double
NumTreesPerPredictor
— 線形項あたりの木の数
300 (既定値) | 正の整数スカラー
線形項あたりの木の数。正の整数スカラーとして指定します。
'NumTreesPerPredictor'
の値は、予測子の線形項に対する勾配ブースティング反復回数と等しくなります。fitrgam
は、各反復において、予測子ごとに 1 つずつ一連の予測子木をモデルに追加します。勾配ブースティング アルゴリズムの詳細については、勾配ブースティング アルゴリズムを参照してください。
当てはめたモデルに指定した数の木が含まれているかどうかについては、'Verbose'
が 1 または 2 の場合に表示される診断メッセージ、またはモデル Mdl
の ReasonForTermination
プロパティの値で確認できます。
例: 'NumTreesPerPredictor',500
データ型: single
| double
CategoricalPredictors
— カテゴリカル予測子のリスト
正の整数のベクトル | logical ベクトル | 文字行列 | string 配列 | 文字ベクトルの cell 配列 | 'all'
カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。
値 | 説明 |
---|---|
正の整数のベクトル | ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~
|
logical ベクトル |
|
文字行列 | 行列の各行は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。 |
文字ベクトルの cell 配列または string 配列 | 配列の各要素は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。 |
"all" | すべての予測子がカテゴリカルです。 |
既定では、予測子データが table (Tbl
) の場合、fitrgam
は、その変数が logical ベクトル、順序付けのない categorical ベクトル、文字配列、string 配列、または文字ベクトルの cell 配列のいずれかである場合に、変数を categorical であると見なします。予測子データが行列 (X
) である場合、fitrgam
はすべての予測子が連続的であると見なします。他の予測子をカテゴリカル予測子として指定するには、名前と値の引数 CategoricalPredictors
を使用してそれらを指定します。
例: 'CategoricalPredictors','all'
データ型: single
| double
| logical
| char
| string
| cell
NumPrint
— 診断メッセージ出力の反復回数
10
(既定値) | 非負の整数スカラー
診断メッセージ出力の反復回数。非負の整数スカラーとして指定します。この引数は、'Verbose'
として 1 を指定した場合のみ有効です。
'Verbose',1
と 'NumPrint',numPrint
を指定すると、numPrint
回の反復ごとに診断メッセージがコマンド ウィンドウに表示されます。
例: 'NumPrint',500
データ型: single
| double
PredictorNames
— 予測子変数名
一意な名前の string 配列 | 一意な文字ベクトルの cell 配列
予測子変数名。一意な名前の string 配列または一意な文字ベクトルの cell 配列として指定します。PredictorNames
の機能は、学習データの提供方法によって決まります。
X
とY
を指定した場合、PredictorNames
を使用してX
内の予測子変数に名前を割り当てることができます。PredictorNames
内の名前の順序は、X
の列の順序に一致しなければなりません。つまり、PredictorNames{1}
はX(:,1)
の名前、PredictorNames{2}
はX(:,2)
の名前であり、他も同様です。また、size(X,2)
とnumel(PredictorNames)
は等しくなければなりません。既定では
PredictorNames
は{'x1','x2',...}
です。
Tbl
を指定する場合、PredictorNames
を使用して学習に使用する予測子変数を選択できます。つまり、fitrgam
は、学習中にPredictorNames
の予測子変数と応答変数のみを使用します。PredictorNames
はTbl.Properties.VariableNames
のサブセットでなければならず、応答変数の名前を含めることはできません。既定では、すべての予測子変数の名前が
PredictorNames
に格納されます。PredictorNames
とformula
の両方ではなく、いずれか一方を使用して学習用の予測子を指定することをお勧めします。
例: "PredictorNames",["SepalLength","SepalWidth","PetalLength","PetalWidth"]
データ型: string
| cell
ResponseName
— 応答変数名
"Y"
(既定値) | 文字ベクトル | string スカラー
応答変数名。文字ベクトルまたは string スカラーとして指定します。
Y
を指定した場合、ResponseName
を使用して応答変数の名前を指定できます。ResponseVarName
またはformula
を指定した場合、ResponseName
を使用できません。
例: "ResponseName","response"
データ型: char
| string
ResponseTransform
— 生の応答値を変換するための関数
'none'
(既定値) | 関数ハンドル | 関数名
生の応答値を変換するための関数。関数ハンドルまたは関数名として指定します。既定の設定は 'none'
です。これは @(y)y
、つまり変換なしを表します。関数ハンドルは、ベクトル (元の応答値) を受け入れて同じサイズのベクトル (変換した応答値) を返さなければなりません。
例: myfunction = @(y)exp(y)
を使用して、指数変換を入力ベクトルに適用する関数のハンドルを作成するとします。この場合、応答変換として 'ResponseTransform',myfunction
を指定できます。
データ型: char
| string
| function_handle
Verbose
— 詳細レベル
0
(既定値) | 1
| 2
詳細レベル。0
、1
、または 2
を指定します。Verbose
の値は、コマンド ウィンドウに表示される情報の量を制御します。
次の表は、使用できる詳細レベル オプションの一覧です。
値 | 説明 |
---|---|
0 | いずれの情報も表示されません。 |
1 | numPrint 回の反復ごとに診断メッセージが表示されます。ここで、numPrint は 'NumPrint' の値です。 |
2 | 1 回の反復ごとに診断メッセージが表示されます。 |
診断メッセージの各行にそれぞれのブースティング反復に関する情報が表示されます。次の列があります。
Type
— 学習済みの木のタイプ1D
(予測子木、予測子の線形項のブースティング木) または2D
(交互作用木、予測子の交互作用項のブースティング木)NumTrees
—fitrgam
がそれまでにモデルに追加した線形項または交互作用項あたりの木の数Deviance
— モデルの逸脱度RelTol
— モデル予測の相対変化 ( は反復 k におけるモデル予測の列ベクトル)LearnRate
— 現在の反復で使用されている学習率
例: 'Verbose',1
データ型: single
| double
Weights
— 観測値の重み
ones(size(X,1),1)
(既定値) | スカラー値のベクトル | Tbl
内の変数の名前
観測値の重み。スカラー値のベクトルまたは Tbl
内の変数の名前として指定します。X
または Tbl
の各行に含まれている観測値には、Weights
の対応する値で重みが付けられます。Weights
のサイズは、X
または Tbl
の行数と同じでなければなりません。
入力データをテーブル Tbl
として指定した場合、Weights
は数値ベクトルが含まれている Tbl
内の変数の名前にすることができます。この場合、Weights
には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、重みのベクトル W
が Tbl.W
として格納されている場合、'W'
として指定します。
fitrgam
は、合計が 1 になるように Weights
の値を正規化します。
データ型: single
| double
| char
| string
メモ
交差検証の名前と値の引数は、名前と値の引数 'OptimizeHyperparameters'
と一緒には使用できません。'OptimizeHyperparameters'
の場合の交差検証は、名前と値の引数 'HyperparameterOptimizationOptions'
を使用することのみによって変更できます。
CrossVal
— 交差検証済みモデルに学習させるためのフラグ
'off'
(既定値) | 'on'
交差検証済みモデルに学習させるためのフラグ。'on'
または 'off'
として指定します。
'on'
を指定すると、10 の分割を使用して交差検証済みモデルの学習が実行されます。
名前と値の引数 'CVPartition'
、'Holdout'
、'KFold'
、または 'Leaveout'
を使用すると、この交差検証の設定をオーバーライドできます。交差検証済みモデルを作成するときに使用できる交差検証の名前と値の引数は、一度に 1 つだけです。
または、モデルの作成後に Mdl
を crossval
に渡して交差検証を実行します。
例: 'Crossval','on'
CVPartition
— 交差検証分割
[]
(既定値) | cvpartition
オブジェクト
交差検証分割。交差検証のタイプと学習セットおよび検証セットのインデックス付けを指定する cvpartition
オブジェクトとして指定します。
交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartition
、Holdout
、KFold
、Leaveout
の 4 つのうちのいずれかのみです。
例: cvp = cvpartition(500,KFold=5)
を使用して、500 個の観測値に対する 5 分割交差検証について無作為な分割を作成するとします。この場合、CVPartition=cvp
を設定して交差検証分割を指定できます。
Holdout
— ホールドアウト検証の対象データの比率
(0,1) の範囲のスカラー値
ホールドアウト検証に使用するデータの比率。範囲 [0,1] のスカラー値として指定します。Holdout=p
を指定した場合、以下の手順が実行されます。
p*100
% のデータを無作為に選択して検証データとして確保し、残りのデータを使用してモデルに学習をさせる。コンパクトな学習済みモデルを交差検証済みモデルの
Trained
プロパティに格納する。
交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartition
、Holdout
、KFold
、Leaveout
の 4 つのうちのいずれかのみです。
例: Holdout=0.1
データ型: double
| single
KFold
— 分割の数
10
(既定値) | 1 より大きい正の整数値
交差検証済みモデルで使用する分割の数。1 より大きい正の整数値として指定します。KFold=k
を指定した場合、以下の手順が実行されます。
データを無作為に
k
個のセットに分割する。各セットについて、そのセットを検証データとして確保し、他の
k
– 1 個のセットを使用してモデルに学習をさせる。k
個のコンパクトな学習済みモデルを、交差検証済みモデルのTrained
プロパティに含まれているk
行 1 列の cell ベクトルに格納する。
交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartition
、Holdout
、KFold
、Leaveout
の 4 つのうちのいずれかのみです。
例: KFold=5
データ型: single
| double
Leaveout
— Leave-one-out 法の交差検証のフラグ
"off"
(既定値) | "on"
Leave-one-out 法の交差検証のフラグ。"on"
または "off"
として指定します。Leaveout="on"
を指定した場合、n 個の観測値 (n は、モデルの NumObservations
プロパティで指定される、欠損観測値を除外した観測値の個数) のそれぞれについて以下の手順が実行されます。
いずれかの観測値を検証データとして確保し、他の n - 1 個の観測値を使用してモデルに学習をさせる。
n 個のコンパクトな学習済みモデルを、交差検証済みモデルの
Trained
プロパティに含まれている n 行 1 列の cell ベクトルに格納する。
交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartition
、Holdout
、KFold
、Leaveout
の 4 つのうちのいずれかのみです。
例: Leaveout="on"
データ型: char
| string
OptimizeHyperparameters
— 最適化するパラメーター
'none'
(既定値) | 'auto'
| 'auto-univariate'
| 'auto-bivariate'
| 'all'
| 'all-univariate'
| 'all-bivariate'
| 使用可能パラメーター名の string 配列または cell 配列 | optimizableVariable
オブジェクトのベクトル
最適化するパラメーター。次の値のいずれかを指定します。
'none'
— 最適化を行いません。'auto'
—InitialLearnRateForPredictors
、NumTreesPerPredictor
、Interactions
、InitialLearnRateForInteractions
、およびNumTreesPerInteraction
を最適化します。'auto-univariate'
—InitialLearnRateForPredictors
およびNumTreesPerPredictor
を最適化します。'auto-bivariate'
—Interactions
、InitialLearnRateForInteractions
およびNumTreesPerInteraction
を最適化します。'all'
— すべての使用可能パラメーターを最適化します。'all-univariate'
— すべての使用可能な一変量パラメーターを最適化します。'all-bivariate'
— すべての使用可能な二変量パラメーターを最適化します。使用可能パラメーター名の string 配列または cell 配列。
optimizableVariable
オブジェクトのベクトル。通常はhyperparameters
の出力です。
fitrgam
では、以下のパラメーターを使用できます。
一変量のハイパーパラメーター
InitialLearnRateForPredictors
—fitrgam
は範囲[1e-3,1]
の対数スケールで実数値を探索します。MaxNumSplitsPerPredictor
—fitrgam
は範囲[1,maxNumSplits]
で整数を探索します。ここで、maxNumSplits
はmin(30,max(2,NumObservations–1))
です。NumObservations
は、返されたモデルMdl
のNumObservations
プロパティに格納されている観測値の数 (欠損観測値を除く) です。NumTreesPerPredictor
—fitrgam
は、範囲[10,500]
の対数スケールで整数を探索します。
二変量のハイパーパラメーター
Interactions
—fitrgam
は、範囲[0,MaxNumInteractions]
の対数スケールで整数を探索します。ここで、MaxNumInteractions
はNumPredictors*(NumPredictors – 1)/2
、NumPredictors
はモデルの学習に使用した予測子の数です。InitialLearnRateForInteractions
—fitrgam
は範囲[1e-3,1]
の対数スケールで実数値を探索します。MaxNumSplitsPerInteraction
—fitrgam
は、範囲[1,maxNumSplits]
の整数値を探索します。NumTreesPerInteraction
—fitrgam
は、範囲[10,500]
の対数スケールで整数を探索します。
'auto'
または 'all'
を使用して、一変量パラメーターおよび二変量パラメーター両方に最適なハイパーパラメーター値を求めます。あるいは、'auto-univariate'
または 'all-univariate'
を使用して一変量パラメーターに最適な値を求めてから、'auto-bivariate'
または 'all-bivariate'
を使用して二変量パラメーターに最適な値を求めることもできます。例については、OptimizeHyperparameters を使用した GAM の最適化と回帰用の一般化加法モデルの学習を参照してください。
最適化では、パラメーターを変化させることにより、fitrgam
の交差検証損失 (誤差) を最小化しようとします。交差検証のタイプおよびその他の最適化の側面を制御するには、名前と値の引数 HyperparameterOptimizationOptions
を使用します。
メモ
OptimizeHyperparameters
の値は、他の名前と値の引数を使用して指定した値より優先されます。たとえば、OptimizeHyperparameters
を "auto"
に設定すると、fitrgam
は "auto"
オプションに対応するハイパーパラメーターを最適化して、ハイパーパラメーターに指定された値を無視します。
既定以外のパラメーターを設定するには、既定以外の値が含まれている optimizableVariable
オブジェクトのベクトルを渡します。以下に例を示します。
load carsmall params = hyperparameters('fitrgam',[Horsepower,Weight],MPG); params(1).Range = [1e-4,1e6];
OptimizeHyperparameters
の値として params
を渡します。
既定では、コマンド ラインに反復表示が表示され、最適化のハイパーパラメーターの個数に従ってプロットが表示されます。最適化とプロットにおける目的関数は、log(1 + cross-validation loss) です。反復表示を制御するには、名前と値の引数 'HyperparameterOptimizationOptions'
の Verbose
フィールドを設定します。プロットを制御するには、名前と値の引数 'HyperparameterOptimizationOptions'
の ShowPlots
フィールドを設定します。
例: 'OptimizeHyperparameters','auto'
HyperparameterOptimizationOptions
— 最適化のオプション
構造体
最適化のオプション。構造体として指定します。この引数を指定すると、名前と値の引数 OptimizeHyperparameters
の効果が変化します。この構造体のフィールドは、すべてオプションです。
フィールド名 | 値 | 既定の設定 |
---|---|---|
Optimizer |
| 'bayesopt' |
AcquisitionFunctionName |
オブジェクト関数のランタイムによって最適化が異なるので、名前に | 'expected-improvement-per-second-plus' |
MaxObjectiveEvaluations | 目的関数評価の最大数。 | 'bayesopt' および 'randomsearch' の場合は 30 、'gridsearch' の場合はグリッド全体 |
MaxTime | 制限時間。正の実数スカラーを指定します。制限時間の単位は、 | Inf |
NumGridDivisions | 'gridsearch' における各次元の値の個数。値は、各次元の値の個数を表す正の整数のベクトル、またはすべての次元に適用されるスカラーが可能です。カテゴリカル変数の場合、このフィールドは無視されます。 | 10 |
ShowPlots | プロットを表示するかどうかを示す論理値。true の場合、最良の観測された目的関数の値が反復回数に対してプロットされます。ベイズ最適化を使用する場合 (Optimizer が 'bayesopt' )、最良の推定された目的関数値もプロットされます。最良の観測された目的関数値および最良の推定された目的関数値は、反復表示の BestSoFar (observed) 列および BestSoFar (estim.) 列の値にそれぞれ対応しています。これらの値は、Mdl.HyperparameterOptimizationResults のプロパティ ObjectiveMinimumTrace および EstimatedObjectiveMinimumTrace で確認できます。問題にベイズ最適化の最適化パラメーターが 1 つまたは 2 つある場合、ShowPlots はパラメーターに対する目的関数のモデルもプロットします。 | true |
SaveIntermediateResults | Optimizer が 'bayesopt' である場合に結果を保存するかどうかを示す論理値。true の場合、'BayesoptResults' という名前のワークスペース変数が反復ごとに上書きされます。この変数は BayesianOptimization オブジェクトです。 | false |
Verbose | コマンド ラインに次を表示します。
詳細については、 | 1 |
UseParallel | ベイズ最適化を並列実行するかどうかを示す論理値。並列実行には Parallel Computing Toolbox™ が必要です。並列でのタイミングに再現性がないため、並列ベイズ最適化で再現性のある結果が生成されるとは限りません。詳細については、並列ベイズ最適化を参照してください。 | false |
Repartition | 反復ごとに交差検証を再分割するかどうかを示す論理値。 分割ノイズが考慮されるので、通常は | false |
以下の 3 つのオプションは 1 つだけ使用できます。 | ||
CVPartition | cvpartition によって作成される cvpartition オブジェクト | 交差検証フィールドが指定されていない場合 'Kfold',5 |
Holdout | ホールドアウトの比率を表す範囲 (0,1) のスカラー | |
Kfold | 1 より大きい整数 |
例: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)
データ型: struct
出力引数
Mdl
— 学習済みの一般化加法モデル
RegressionGAM
モデル オブジェクト | RegressionPartitionedGAM
交差検証済みモデル オブジェクト
学習済みの一般化加法モデル。次の表のモデル オブジェクトのいずれかとして返されます。
モデル オブジェクト | モデル オブジェクトの学習用の交差検証オプション | モデル オブジェクトを使用した応答の予測方法 |
---|---|---|
RegressionGAM | なし | predict を使用して新しい観測値の応答を予測し、resubPredict を使用して学習観測値の応答を予測します。 |
RegressionPartitionedGAM | 名前と値の引数 KFold 、Holdout 、Leaveout 、CrossVal 、または CVPartition を指定 | kfoldPredict を使用して、学習時に fitrgam がホールドアウトした観測値の応答を予測します。kfoldPredict は、各観測値の応答をその観測値を使用せずに学習させたモデルを使用して予測します。 |
Mdl
のプロパティを参照するには、ドット表記を使用します。たとえば、Mdl
の交互作用項を表示するには、コマンド ウィンドウに「Mdl.Interactions
」と入力します。
詳細
回帰用の一般化加法モデル (GAM)
一般化加法モデル (GAM) は、予測子の一変量および二変量の形状関数の和を使用して応答変数を説明する解釈可能なモデルです。
fitrgam
では、各予測子および必要に応じて予測子の各ペアの形状関数としてブースティング木を使用するため、予測子と応答変数の間の非線形関係を取得できます。予測 (応答値) に対する個々の形状関数の寄与が十分に分離されるため、このモデルは解釈が容易です。
標準の GAM では、各予測子の一変量の形状関数を使用します。
y は応答変数で、平均 μ および標準偏差 σ をもつ正規分布に従います。g(μ) は恒等リンク関数、c は切片 (定数) 項です。fi(xi) は i 番目の予測子についての一変量の形状関数で、予測子の線形項のブースティング木 (予測子木) になります。
重要な交互作用項の二変量の形状関数をモデルに追加して、予測子同士の交互作用をモデルに含めることができます。
fij(xixj) は i 番目と j 番目の予測子についての二変量の形状関数で、予測子の交互作用項のブースティング木 (交互作用木) になります。
fitrgam
は、重要な交互作用項を F 検定の p 値に基づいて特定します。詳細については、交互作用項の検出を参照してください。
fitrgam
の 'FitStandardDeviation'
として false
(既定値) を指定した場合、fitrgam
は平均 μ についてモデルに学習させます。'FitStandardDeviation'
として true
を指定した場合、fitrgam
は標準偏差 σ について追加のモデルに学習させて、GAM オブジェクトの IsStandardDeviationFit
プロパティを true
に設定します。
逸脱度
逸脱度は、残差二乗和を汎化したものです。飽和モデルと比較した適合度を測定します。
当てはめたモデルの逸脱度は、そのモデルと飽和モデルの対数尤度の差の 2 倍です。
-2(logL - logLs),
L は当てはめたモデルの対数尤度、Ls は飽和モデルの対数尤度です。飽和モデルは、推定可能な最大数のパラメーターを含むモデルです。
fitrgam
は、逸脱度を使用してモデルの適合度を測定し、各反復で逸脱度が小さくなる学習率を探します。コマンド ウィンドウに逸脱度と学習率を表示するには、'Verbose'
で 1 または 2 を指定します。
アルゴリズム
勾配ブースティング アルゴリズム
fitrgam
は、勾配ブースティング アリゴリズム (最小二乗ブースティング) を使用して一般化加法モデルを当てはめます。
fitrgam
は、最初に予測子木 (予測子の線形項のブースティング木) のセットを構築してから、交互作用木 (予測子の交互作用項のブースティング木) を構築します。このブースティング アルゴリズムは、予測子木に対して最大 'NumTreesPerPredictor'
回まで反復され、次に交互作用木に対して最大 'NumTreesPerInteraction'
回まで反復されます。
それぞれのブースティング反復において、fitrgam
は学習率 'InitialLearnRateForPredictors'
で一連の予測子木を構築するか、学習率 'InitialLearnRateForInteractions'
で一連の交互作用木を構築します。
一連の木の構築において、関数は一度に 1 つずつ木に学習させます。応答とそれまでに学習させたすべての木から集約した予測の差分である残差に木を当てはめます。ブースティングの学習速度を制御するために、木を学習率で縮小し、その木をモデルに追加して残差を更新します。
更新されたモデル = 現在のモデル + (学習率)·(新しい木)
更新された残差 = 現在の残差 – (学習率)·(新しい木で説明される応答)
一連の木を追加してモデルの当てはめが改善されると (つまり、当てはめの逸脱度が許容誤差より大きな値だけ小さくなると)、
fitrgam
は次の反復に移ります。一連の木を追加しても
fitrgam
が線形項に学習させたときにモデルの当てはめが改善されない場合、線形項に対するブースティング反復を中止し、交互作用項に対するブースティング反復を開始します。交互作用項に学習させてもモデルの当てはめが改善されない場合、モデルの当てはめを終了します。学習が停止した原因は、学習済みモデルの
ReasonForTermination
プロパティで確認できます。
交互作用項の検出
交互作用項のペア xixj (formula
または 'Interactions'
で指定) ごとに、項が統計的に有意であるかどうかを調べる F 検定が実行されます。
プロセスを高速化するために、fitrgam
は最大 8 個の同確率のビンに数値予測子をビン化します。予測子に含まれる一意の値が 8 より少なければ、ビンの数を 8 より少なくすることができます。F 検定では、xi と xj で作成されるビンの応答がそれぞれ等しくなるという帰無仮説が、少なくとも 1 つのビンの応答値が他とは異なるという対立仮説に対して検証されます。p 値が小さい場合、差が有意であることを意味します。これは、対応する交互作用項が有意であり、その項を含めることでモデルの当てはめを改善できることを示します。
fitrgam
は、p 値が 'MaxPValue'
の値以下である項を使用して一連の交互作用木を構築します。'MaxPValue'
の既定値 1
を使用すると、formula
または 'Interactions'
で指定したすべての項を使用して交互作用木を構築できます。
fitrgam
は、交互作用項を p 値に基づく重要度の順序でモデルに追加します。交互作用項がモデルに追加された順序を確認するには、返されたモデルの Interactions
プロパティを使用します。
参照
[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.
拡張機能
自動並列サポート
Parallel Computing Toolbox™ を使用して自動的に並列計算を実行することで、コードを高速化します。
ハイパーパラメーターの最適化を並列実行するには、関数 fitrgam
を呼び出すときに名前と値の引数 'HyperparameterOptimizationOptions', struct('UseParallel',true)
を指定します。
並列的なハイパーパラメーターの最適化の詳細については、並列ベイズ最適化を参照してください。
並列計算の全般的な情報については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2021a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)