fitrgp
R2026bガウス過程回帰 (GPR) モデルの当てはめ
構文
説明
は、Mdl = fitrgp(Tbl,ResponseVarName)Tbl 内の標本データを使用して学習させたガウス過程回帰 (GPR) モデルを返します。ResponseVarName は、Tbl 内の応答変数の名前です。
は、1 つ以上の名前と値の引数で指定された追加オプションを使用して、前の構文の入力引数のいずれかについて GPR モデルを返します。Mdl = fitrgp(___,Name=Value)
たとえば、近似法、予測法、共分散関数またはアクティブ セット選択法を指定できます。交差検証済みモデルを学習させることもできます。
Mdl は RegressionGP オブジェクトです。このオブジェクトのオブジェクト関数とプロパティについては、RegressionGP を参照してください。
交差検証済みモデルを学習させた場合、Mdl は RegressionPartitionedGP オブジェクトになります。交差検証したオブジェクトをさらに分析するには、RegressionPartitionedGP オブジェクトのオブジェクト関数を使用します。
[ は、名前と値の引数 Mdl,AggregateOptimizationResults] = fitrgp(___)OptimizeHyperparameters と HyperparameterOptimizationOptions が指定されている場合に、ハイパーパラメーターの最適化の結果が格納された AggregateOptimizationResults も返します。HyperparameterOptimizationOptions の ConstraintType オプションと ConstraintBounds オプションも指定する必要があります。この構文を使用すると、交差検証損失ではなくコンパクトなモデル サイズに基づいて最適化したり、オプションは同じでも制約範囲は異なる複数の一連の最適化問題を実行したりできます。
例
標本データを生成します。
rng(0,"twister") % For reproducibility n = 1000; x = linspace(-10,10,n)'; y = 1 + x*5e-2 + sin(x)./x + 0.2*randn(n,1);
パラメーターの推定に線形基底関数と厳密近似法を使用して、GPR モデルを当てはめます。厳密予測法も使用します。
gprMdl = fitrgp(x,y,Basis="linear", ... FitMethod="exact",PredictMethod="exact");
学習済みのモデルを使用して、x の行に対応する応答を予測します (再代入予測)。
ypred = resubPredict(gprMdl);
真の応答と予測値をプロットします。
plot(x,y,"."); hold on plot(x,ypred,LineWidth=1.5); xlabel("x") ylabel("y") legend("Data","GPR predictions") hold off

標本データを読み込みます。
load("gprdata2.mat")このデータには、1 つの予測子変数と連続応答が含まれています。このデータは、シミュレーションされたものです。
既定のカーネル パラメーターで二乗指数カーネル関数を使用して、GPR モデルを当てはめます。
gprMdl1 = fitrgp(x,y,KernelFunction="squaredexponential");次に、2 番目のモデルを当てはめます。今回は、カーネル パラメーターの初期値を指定します。
sigma0 = 0.2; kparams0 = [3.5 6.2]; gprMdl2 = fitrgp(x,y,KernelFunction="squaredexponential", ... KernelParameters=kparams0,Sigma=sigma0);
両方のモデルから再代入予測を計算します。
ypred1 = resubPredict(gprMdl1); ypred2 = resubPredict(gprMdl2);
両方のモデルの応答予測と学習データの応答をプロットします。
plot(x,y,".") hold on plot(x,ypred1) plot(x,ypred2) xlabel("x") ylabel("y") legend(["Data","Default kernel parameters", ... "kparams0 = [3.5 6.2], sigma0 = 0.2"], ... Location="best") title("Impact of Initial Kernel Parameter Values") hold off
![Figure contains an axes object. The axes object with title Impact of Initial Kernel Parameter Values, xlabel x, ylabel y contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent Data, Default kernel parameters, kparams0 = [3.5 6.2], sigma0 = 0.2.](../examples/stats/ImpactofSpecifyingInitialKernelParameterValuesExample_01.png)
GPR パラメーターを推定するために fitrgp が最大化する周辺の対数尤度には、複数のローカルな解が存在します。どの解に収束するかは、初期点によって決まります。それぞれのローカルな解は、特定のデータ解釈に対応します。この例では、既定の初期カーネル パラメーターを使用した解は、ノイズが多い低周波信号に対応します。一方、カスタムな初期カーネル パラメーターを使用した 2 番目の解は、ノイズが少ない高周波信号に対応します。
標本データを読み込みます。
load("gprdata.mat")6 つの連続予測子変数があります。学習データ セットには 500 個の観測値が、テスト データ セットには 100 個の観測値があります。このデータは、シミュレーションされたものです。
各予測子について長さスケールが異なる二乗指数カーネル関数を使用して、GPR モデルを当てはめます。この共分散関数は、次のように定義されます。
ここで、 は予測子 ( = 1、2、...、) の長さスケールを表します。 と は信号標準偏差です。制約がないパラメーター化 は、次のようになります。
カーネル関数の長さスケールを 10 で、信号標準偏差とノイズ標準偏差を応答の標準偏差で初期化します。
sigma0 = std(ytrain); sigmaF0 = sigma0; d = size(Xtrain,2); sigmaM0 = 10*ones(d,1);
カーネル パラメーターの初期値を使用して、GPR モデルを当てはめます。学習データの予測子を標準化します。厳密な近似法および予測法を使用します。
gprMdl = fitrgp(Xtrain,ytrain,Basis="constant",FitMethod="exact", ... PredictMethod="exact",KernelFunction="ardsquaredexponential", ... KernelParameters=[sigmaM0;sigmaF0],Sigma=sigma0,Standardize=true);
テスト データの回帰損失を計算します。
L = loss(gprMdl,Xtest,ytest)
L = 0.6919
カーネル情報にアクセスします。
gprMdl.KernelInformation
ans = struct with fields:
Name: 'ARDSquaredExponential'
KernelParameters: [7×1 double]
KernelParameterNames: {7×1 cell}
カーネル パラメーターの名前を表示します。ARD カーネルを使用する場合、長さスケール パラメーターは展開された予測子に対応します。長さスケール パラメーターの名前を展開された予測子の名前に置き換えます。
paramNames = gprMdl.KernelInformation.KernelParameterNames
paramNames = 7×1 cell
{'LengthScale1'}
{'LengthScale2'}
{'LengthScale3'}
{'LengthScale4'}
{'LengthScale5'}
{'LengthScale6'}
{'SigmaF' }
paramNames(1:end-1) = gprMdl.ExpandedPredictorNames
paramNames = 7×1 cell
{'x1' }
{'x2' }
{'x3' }
{'x4' }
{'x5' }
{'x6' }
{'SigmaF'}
カーネル パラメーターを表示します。
sigmaM = gprMdl.KernelInformation.KernelParameters(1:end-1,1)
sigmaM = 6×1
104 ×
0.0004
0.0007
0.0004
4.7592
0.1018
0.0056
sigmaF = gprMdl.KernelInformation.KernelParameters(end)
sigmaF = 28.1720
sigma = gprMdl.Sigma
sigma = 0.8162
学習した長さスケールの対数をプロットします。
plot((1:d)',log(sigmaM),"o-") xlabel("Length scale number") ylabel("Log of length scale")

4 番目と 5 番目の予測子変数における長さスケールの対数が、他と比較して大きくなっています。これらの予測子変数は、他の予測子変数ほどは応答に影響を与えないようです。
4 番目と 5 番目の変数を予測子変数として使用せずに GPR モデルを当てはめます。
X = [Xtrain(:,1:3) Xtrain(:,6)]; sigma0 = std(ytrain); sigmaF0 = sigma0; d = size(X,2); sigmaM0 = 10*ones(d,1); gprMdl = fitrgp(X,ytrain,Basis="constant",FitMethod="exact", ... PredictMethod="exact",KernelFunction="ardsquaredexponential", ... KernelParameters=[sigmaM0;sigmaF0],Sigma=sigma0,Standardize=true);
テスト データの回帰誤差を計算します。
xtest = [Xtest(:,1:3) Xtest(:,6)]; L = loss(gprMdl,xtest,ytest)
L = 0.6928
損失は、すべての変数を予測子変数として使用した場合と同じような値になっています。
テスト データについて予測応答を計算します。
ypred = predict(gprMdl,xtest);
元の応答および当てはめた値をプロットします。
plot(ytest) hold on plot(ypred) legend("True response","GPR predicted values",Location="best") hold off

fitrgp を使用して、GPR モデルのハイパーパラメーターを自動的に最適化します。最適化されたハイパーパラメーター値を使用するモデルと既定のハイパーパラメーター値を使用するモデルで、モデルの当てはめを比較します。
gprdata2 データ セットを読み込みます。
load gprdata2シミュレーション データは、1 つの予測子変数と 1 つの連続応答で構成されています。
既定のカーネル パラメーターで二乗指数カーネル関数を使用して、GPR モデルを当てはめます。
gprMdl1 = fitrgp(x,y,KernelFunction="squaredexponential");自動的なハイパーパラメーター最適化を使用して、5 分割交差検証損失を最小化するハイパーパラメーターを求めます。再現性を得るために、乱数シードを設定し、"expected-improvement-plus" の獲得関数を使用します。
rng(0,"twister") hpoOptions = hyperparameterOptimizationOptions(AcquisitionFunctionName="expected-improvement-plus"); gprMdl2 = fitrgp(x,y,KernelFunction="squaredexponential", ... OptimizeHyperparameters="auto",HyperparameterOptimizationOptions=hpoOptions);
|=====================================================================================================|
| Iter | Eval | Objective: | Objective | BestSoFar | BestSoFar | Sigma | Standardize |
| | result | log(1+loss) | runtime | (observed) | (estim.) | | |
|=====================================================================================================|
| 1 | Best | 0.42258 | 0.67562 | 0.42258 | 0.42258 | 2.7255 | false |
| 2 | Accept | 1.1091 | 0.73299 | 0.42258 | 0.61465 | 0.0057724 | true |
| 3 | Accept | 1.6498 | 0.38152 | 0.42258 | 0.75989 | 25.905 | true |
| 4 | Best | 0.29824 | 0.75421 | 0.29824 | 0.29834 | 0.0098001 | false |
| 5 | Accept | 1.0387 | 0.81434 | 0.29824 | 0.49293 | 0.00010004 | false |
| 6 | Best | 0.037911 | 0.63339 | 0.037911 | 0.038158 | 0.13791 | false |
| 7 | Accept | 0.042394 | 0.63112 | 0.037911 | 0.038142 | 0.079273 | false |
| 8 | Accept | 0.038899 | 0.73902 | 0.037911 | 0.037126 | 0.11545 | false |
| 9 | Accept | 0.038969 | 0.68863 | 0.037911 | 0.037592 | 0.11307 | false |
| 10 | Accept | 0.039193 | 0.64596 | 0.037911 | 0.037928 | 0.1124 | false |
| 11 | Accept | 1.1496 | 0.72304 | 0.037911 | 0.03793 | 0.0001 | true |
| 12 | Accept | 0.13152 | 0.4594 | 0.037911 | 0.038375 | 0.37155 | true |
| 13 | Accept | 0.037915 | 0.53563 | 0.037911 | 0.038351 | 0.13701 | true |
| 14 | Best | 0.037785 | 0.64103 | 0.037785 | 0.038272 | 0.18141 | true |
| 15 | Best | 0.037697 | 0.61951 | 0.037697 | 0.03876 | 0.32603 | false |
| 16 | Accept | 0.037716 | 0.73714 | 0.037697 | 0.038783 | 0.22469 | false |
| 17 | Accept | 0.037832 | 0.72965 | 0.037697 | 0.036007 | 0.16182 | true |
| 18 | Accept | 0.037702 | 0.58229 | 0.037697 | 0.036011 | 0.23962 | false |
| 19 | Accept | 0.037838 | 0.58479 | 0.037697 | 0.036467 | 0.15992 | true |
| 20 | Best | 0.037694 | 0.55122 | 0.037694 | 0.036469 | 0.24919 | false |
|=====================================================================================================|
| Iter | Eval | Objective: | Objective | BestSoFar | BestSoFar | Sigma | Standardize |
| | result | log(1+loss) | runtime | (observed) | (estim.) | | |
|=====================================================================================================|
| 21 | Accept | 0.037841 | 0.60708 | 0.037694 | 0.03675 | 0.15878 | true |
| 22 | Accept | 0.037765 | 0.52024 | 0.037694 | 0.036751 | 0.19128 | false |
| 23 | Best | 0.037683 | 0.55298 | 0.037683 | 0.036752 | 0.27578 | false |
| 24 | Accept | 2.1082 | 0.46002 | 0.037683 | 0.036754 | 29.263 | false |
| 25 | Accept | 0.42164 | 0.37464 | 0.037683 | 0.034063 | 0.5675 | false |
| 26 | Accept | 0.29404 | 0.513 | 0.037683 | 0.034072 | 0.029617 | false |
| 27 | Accept | 1.0384 | 0.46001 | 0.037683 | 0.034106 | 0.0021049 | false |
| 28 | Accept | 0.28288 | 0.60098 | 0.037683 | 0.034043 | 0.051917 | true |
| 29 | Accept | 0.42298 | 0.39964 | 0.037683 | 0.03404 | 1.3844 | true |
| 30 | Accept | 0.29873 | 0.7136 | 0.037683 | 0.034238 | 0.00073587 | true |
__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 29.376 seconds
Total objective function evaluation time: 18.0627
Best observed feasible point:
Sigma Standardize
_______ ___________
0.27578 false
Observed objective function value = 0.037683
Estimated objective function value = 0.034238
Function evaluation time = 0.55298
Best estimated feasible point (according to models):
Sigma Standardize
_______ ___________
0.27578 false
Estimated objective function value = 0.034238
Estimated function evaluation time = 0.55386


学習させた回帰モデル gprMdl2 は、最適な推定実行可能点に対応し、Sigma と Standardize に同じハイパーパラメーター値を使用しています。
bestPoint 関数を使用して、gprMdl2 の学習に使用されたハイパーパラメーター値を調べます。既定では、bestPoint は、ハイパーパラメーターの最適化時に fitrgp で使用されたものと同じ最適点の基準 ("min-visited-upper-confidence-interval") を使用します。一般に、近似関数では、データ セット内のノイズへの過適合を防ぐために、基準 "min-visited-upper-confidence-interval" (基準 "min-observed" ではなく) に基づいて最適なハイパーパラメーター値を判別します。
bestEstimatedPoint = bestPoint(gprMdl2.HyperparameterOptimizationResults)
bestEstimatedPoint = 1×2 table
Sigma Standardize
_______ ___________
0.27578 false
bestEstimatedPoint の結果が gprMdl2 のプロパティと一致することを確認します。GPR モデルで標準化を使用しない場合、RegressionGP オブジェクトの PredictorLocation プロパティと PredictorScale プロパティは空になることに注意してください。
modelProperties = table(gprMdl2.Sigma, ... struct(Mean=gprMdl2.PredictorLocation, ... StandardDeviation=gprMdl2.PredictorScale), ... VariableNames=["Sigma","Standardize"])
modelProperties = 1×2 table
Sigma Standardize
_______ ___________
0.27578 1×1 struct
modelProperties.Standardize
ans = struct with fields:
Mean: []
StandardDeviation: []
最適化前と最適化後の当てはめを視覚的に比較します。
ypred1 = resubPredict(gprMdl1); ypred2 = resubPredict(gprMdl2); figure plot(x,y,".") hold on plot(x,ypred1) plot(x,ypred2) xlabel("x"); ylabel("y"); legend(["Data","Default fit","Optimized fit"], ... Location="best") title("Impact of Optimization") hold off

最適化されたハイパーパラメーターを使用するモデルの方が学習データによく当てはまっています。
標本データを生成します。
rng(0,"twister") % For reproducibility n = 1000; x = linspace(-10,10,n)'; y = 1 + x*5e-2 + sin(x)./x + 0.2*randn(n,1);
二乗指数カーネル関数をカスタムなカーネル関数として定義します。
二乗指数カーネル関数は、次のように計算できます。
ここで、 は信号標準偏差、 は長さスケールです。 と はどちらも 0 より大きくなければなりません。この条件は、制約のないパラメーター表現ベクトル について制約のないパラメーター表現 および を使用することにより適用できます。
したがって、二乗指数カーネル関数は、次のカスタムなカーネル関数として定義できます。
kfcn = @(XN,XM,theta) (exp(theta(2))^2)*exp(-(pdist2(XN,XM).^2)/(2*exp(theta(1))^2));
ここで、pdist2(XN,XM).^2 は距離行列を計算します。
カスタムなカーネル関数 kfcn を使用して、GPR モデルを当てはめます。カーネル パラメーターの初期値を指定します (カスタムなカーネル関数を使用するので、制約のないパラメーター表現ベクトル theta の初期値を指定しなければなりません)。
theta0 = [1.5,0.2]; gprMdl = fitrgp(x,y,KernelFunction=kfcn,KernelParameters=theta0);
組み込みカーネル関数の場合、fitrgp はパラメーター推定に解析的微分を使用します。カスタムなカーネル関数の場合は、数値微分を使用します。
このモデルの再代入損失を計算します。
L = resubLoss(gprMdl)
L = 0.0391
組み込まれている二乗指数カーネル関数オプションを使用して、GPR モデルを当てはめます。カーネル パラメーターの初期値を指定します。(組み込みのカスタム カーネル関数を使用する場合、初期パラメーター値の指定時に信号標準偏差と長さスケールの初期値を直接指定しなければなりません。)
sigmaL0 = exp(1.5); sigmaF0 = exp(0.2); gprMdl2 = fitrgp(x,y,KernelFunction="squaredexponential", ... KernelParameters=[sigmaL0,sigmaF0]);
このモデルの再代入損失を計算します。
L2 = resubLoss(gprMdl2)
L2 = 0.0391
予想どおり、2 つの損失の値は同じです。
生成されたデータに対して、多数の予測子を使用して GPR モデルに学習をさせます。LBFGS オプティマイザーの初期ステップ サイズを指定します。
結果に再現性をもたせるために、乱数発生器のシードとタイプを設定します。
rng(0,"twister") % For reproducibility
300 個の観測値と 3000 個の予測子がある標本データを生成します。応答変数は 4 番目、7 番目および 13 番目の予測子に依存します。
N = 300; P = 3000; X = rand(N,P); y = cos(X(:,7)) + sin(X(:,4).*X(:,13)) + 0.1*randn(N,1);
カーネル パラメーターの初期値を設定します。
sigmaL0 = sqrt(P)*ones(P,1); % Length scale for predictors sigmaF0 = 1; % Signal standard deviation
初期ノイズ標準偏差を 1 に設定します。
sigmaN0 = 1;
相対勾配ノルムの終了許容誤差として 1e-2 を指定します。
opts = statset("fitrgp");
opts.TolFun = 1e-2;初期カーネル パラメーター値、初期ノイズ標準偏差および関連度自動決定 (ARD) 二乗指数カーネル関数を使用して GPR モデルを当てはめます。
LBFGS オプティマイザーにおけるヘッシアンの初期近似を決定するため、初期ステップ サイズとして 1 を指定します。
gpr = fitrgp(X,y,KernelFunction="ardsquaredexponential",Verbose=1, ... Optimizer="lbfgs",OptimizerOptions=opts, ... KernelParameters=[sigmaL0;sigmaF0],Sigma=sigmaN0,InitialStepSize=1);
o Parameter estimation: FitMethod = Exact, Optimizer = lbfgs
o Solver = LBFGS, HessianHistorySize = 15, LineSearchMethod = weakwolfe
|====================================================================================================|
| ITER | FUN VALUE | NORM GRAD | NORM STEP | CURV | GAMMA | ALPHA | ACCEPT |
|====================================================================================================|
| 0 | 3.004966e+02 | 2.569e+02 | 0.000e+00 | | 3.893e-03 | 0.000e+00 | YES |
| 1 | 9.525779e+01 | 1.281e+02 | 1.003e+00 | OK | 6.913e-03 | 1.000e+00 | YES |
| 2 | 3.972026e+01 | 1.647e+01 | 7.639e-01 | OK | 4.718e-03 | 5.000e-01 | YES |
| 3 | 3.893873e+01 | 1.073e+01 | 1.057e-01 | OK | 3.243e-03 | 1.000e+00 | YES |
| 4 | 3.859904e+01 | 5.659e+00 | 3.282e-02 | OK | 3.346e-03 | 1.000e+00 | YES |
| 5 | 3.748912e+01 | 1.030e+01 | 1.395e-01 | OK | 1.460e-03 | 1.000e+00 | YES |
| 6 | 2.028104e+01 | 1.380e+02 | 2.010e+00 | OK | 2.326e-03 | 1.000e+00 | YES |
| 7 | 2.001849e+01 | 1.510e+01 | 9.685e-01 | OK | 2.344e-03 | 1.000e+00 | YES |
| 8 | -7.706109e+00 | 8.340e+01 | 1.125e+00 | OK | 5.771e-04 | 1.000e+00 | YES |
| 9 | -1.786074e+01 | 2.323e+02 | 2.647e+00 | OK | 4.217e-03 | 1.250e-01 | YES |
| 10 | -4.058422e+01 | 1.972e+02 | 6.796e-01 | OK | 7.035e-03 | 1.000e+00 | YES |
| 11 | -7.850209e+01 | 4.432e+01 | 8.335e-01 | OK | 3.099e-03 | 1.000e+00 | YES |
| 12 | -1.312162e+02 | 3.334e+01 | 1.277e+00 | OK | 5.432e-02 | 1.000e+00 | YES |
| 13 | -2.005064e+02 | 9.519e+01 | 2.828e+00 | OK | 5.292e-03 | 1.000e+00 | YES |
| 14 | -2.070150e+02 | 1.898e+01 | 1.641e+00 | OK | 6.817e-03 | 1.000e+00 | YES |
| 15 | -2.108086e+02 | 3.793e+01 | 7.685e-01 | OK | 3.479e-03 | 1.000e+00 | YES |
| 16 | -2.122920e+02 | 7.057e+00 | 1.591e-01 | OK | 2.055e-03 | 1.000e+00 | YES |
| 17 | -2.125610e+02 | 4.337e+00 | 4.818e-02 | OK | 1.974e-03 | 1.000e+00 | YES |
| 18 | -2.130162e+02 | 1.178e+01 | 8.891e-02 | OK | 2.856e-03 | 1.000e+00 | YES |
| 19 | -2.139378e+02 | 1.933e+01 | 2.371e-01 | OK | 1.029e-02 | 1.000e+00 | YES |
|====================================================================================================|
| ITER | FUN VALUE | NORM GRAD | NORM STEP | CURV | GAMMA | ALPHA | ACCEPT |
|====================================================================================================|
| 20 | -2.151111e+02 | 1.550e+01 | 3.015e-01 | OK | 2.765e-02 | 1.000e+00 | YES |
| 21 | -2.173046e+02 | 5.856e+00 | 6.537e-01 | OK | 1.414e-02 | 1.000e+00 | YES |
| 22 | -2.201781e+02 | 8.918e+00 | 8.484e-01 | OK | 6.381e-03 | 1.000e+00 | YES |
| 23 | -2.288858e+02 | 4.846e+01 | 2.311e+00 | OK | 2.661e-03 | 1.000e+00 | YES |
| 24 | -2.392171e+02 | 1.190e+02 | 6.283e+00 | OK | 8.113e-03 | 1.000e+00 | YES |
| 25 | -2.511145e+02 | 1.008e+02 | 1.198e+00 | OK | 1.605e-02 | 1.000e+00 | YES |
| 26 | -2.742547e+02 | 2.207e+01 | 1.231e+00 | OK | 3.191e-03 | 1.000e+00 | YES |
| 27 | -2.849931e+02 | 5.067e+01 | 3.660e+00 | OK | 5.184e-03 | 1.000e+00 | YES |
| 28 | -2.899797e+02 | 2.068e+01 | 1.162e+00 | OK | 6.270e-03 | 1.000e+00 | YES |
| 29 | -2.916723e+02 | 1.816e+01 | 3.213e-01 | OK | 1.415e-02 | 1.000e+00 | YES |
| 30 | -2.947674e+02 | 6.965e+00 | 1.126e+00 | OK | 6.339e-03 | 1.000e+00 | YES |
| 31 | -2.962491e+02 | 1.349e+01 | 2.352e-01 | OK | 8.999e-03 | 1.000e+00 | YES |
| 32 | -3.004921e+02 | 1.586e+01 | 9.880e-01 | OK | 3.940e-02 | 1.000e+00 | YES |
| 33 | -3.118906e+02 | 1.889e+01 | 3.318e+00 | OK | 1.213e-01 | 1.000e+00 | YES |
| 34 | -3.189215e+02 | 7.086e+01 | 3.070e+00 | OK | 8.095e-03 | 1.000e+00 | YES |
| 35 | -3.245557e+02 | 4.366e+00 | 1.397e+00 | OK | 2.718e-03 | 1.000e+00 | YES |
| 36 | -3.254613e+02 | 3.751e+00 | 6.546e-01 | OK | 1.004e-02 | 1.000e+00 | YES |
| 37 | -3.262823e+02 | 4.011e+00 | 2.026e-01 | OK | 2.441e-02 | 1.000e+00 | YES |
| 38 | -3.325606e+02 | 1.773e+01 | 2.427e+00 | OK | 5.234e-02 | 1.000e+00 | YES |
| 39 | -3.350374e+02 | 1.201e+01 | 1.603e+00 | OK | 2.674e-02 | 1.000e+00 | YES |
|====================================================================================================|
| ITER | FUN VALUE | NORM GRAD | NORM STEP | CURV | GAMMA | ALPHA | ACCEPT |
|====================================================================================================|
| 40 | -3.379112e+02 | 5.280e+00 | 1.393e+00 | OK | 1.177e-02 | 1.000e+00 | YES |
| 41 | -3.389136e+02 | 3.061e+00 | 7.121e-01 | OK | 2.935e-02 | 1.000e+00 | YES |
| 42 | -3.401070e+02 | 4.094e+00 | 6.224e-01 | OK | 3.399e-02 | 1.000e+00 | YES |
| 43 | -3.436291e+02 | 8.833e+00 | 1.707e+00 | OK | 5.231e-02 | 1.000e+00 | YES |
| 44 | -3.456295e+02 | 5.891e+00 | 1.424e+00 | OK | 3.772e-02 | 1.000e+00 | YES |
| 45 | -3.460070e+02 | 1.126e+01 | 2.580e+00 | OK | 3.907e-02 | 1.000e+00 | YES |
| 46 | -3.481756e+02 | 1.546e+00 | 8.142e-01 | OK | 1.565e-02 | 1.000e+00 | YES |
Infinity norm of the final gradient = 1.546e+00
Two norm of the final step = 8.142e-01, TolX = 1.000e-12
Relative infinity norm of the final gradient = 6.016e-03, TolFun = 1.000e-02
EXIT: Local minimum found.
o Alpha estimation: PredictMethod = Exact
多数の予測子がある ARD カーネルを GPR モデルで使用するので、ヘッシアンに対して LBFGS 近似を使用すると、ヘッセ行列全体を格納するよりメモリ効率が向上します。また、初期ステップ サイズを使用してヘッシアンの初期近似を決定すると、最適化が高速になる可能性があります。
負の学習済み長さスケールの指数を使用して、予測子の重みを求めます。重みを正規化します。
sigmaL = gpr.KernelInformation.KernelParameters(1:end-1); % Learned length scales weights = exp(-sigmaL); % Predictor weights weights = weights/sum(weights); % Normalized predictor weights
正規化した予測子の重みをプロットします。
semilogx(weights,"o") xlabel("Predictor index") ylabel("Predictor weight")

学習済みの GPR モデルは、4 番目、7 番目および 13 番目の予測子に最大の重みを割り当てています。無関係な予測子の重みはゼロに近くなります。
入力引数
モデルを学習させるために使用する標本データ。table として指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの変数に対応します。Tbl は予測子変数を格納し、応答変数用の 1 列をオプションで含むこともできます。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
Tblに応答変数が含まれている場合に他の変数をすべて予測子として使用するには、ResponseVarNameを使用して応答変数を指定します。Tblに応答変数が含まれている場合に予測子の一部のみをモデルの学習で使用するには、formulaを使用して応答変数と予測子変数を指定します。Tblに応答変数が含まれていない場合は、yを使用して応答変数を指定します。応答変数の長さとTblの行数は等しくなければなりません。
table データ型の詳細については、table を参照してください。
カテゴリカル変数が予測子データに含まれている場合、fitrgp はダミー変数を作成します。詳細については、CategoricalPredictors を参照してください。
データ型: table
応答変数の名前。Tbl 内の変数の名前で指定します。ResponseVarName には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、応答変数 y が Tbl に (Tbl.y として) 格納されている場合、"y" として指定します。それ以外の場合、モデルを学習させるときに、Tbl の列は y を含めてすべて予測子として扱われます。
データ型: char | string
モデルの学習で使用する応答変数と予測子変数。"y~x1+x2+x3" という形式の文字ベクトルまたは string スカラーとして指定します。この形式では、y は応答変数を、x1、x2 および x3 はモデルの学習で使用する予測子変数を表します。
モデルに学習をさせるときに使用する予測子として、Tbl に含まれている変数の一部を指定するには、式を使用します。式を指定した場合、formula に現れない変数はモデルの学習に使用されません。
式の変数名は Tbl の変数名 (Tbl.Properties.VariableNames) であり、有効な MATLAB® 識別子でなければなりません。関数 isvarname を使用して Tbl の変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName を使用してそれらを変換できます。
式で BasisFunction の形式を指定することはできません。
例: "PetalLength~PetalWidth+Species" は、変数 PetalLength を応答変数として、PetalWidth および Species を予測子変数として特定します。
データ型: char | string
GPR モデルの予測子データ。n 行 d 列の行列として指定します。n は観測値 (行) の数、d は予測子 (列) の数です。
y の長さと X の行数は等しくなければなりません。
予測子の名前を X に表示される順序で指定するには、名前と値の引数 PredictorNames を使用します。
データ型: double
GPR モデルの応答データ。n 行 1 列のベクトルとして指定します。y も含まれている学習データ Tbl を指定した場合、y を省略できます。この場合、ResponseVarName を使用して応答変数を特定するか、formula を使用して応答変数および予測子変数を特定します。
データ型: double
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: fitrgp(X,Y,FitMethod="sr",BasisFunction="linear",ActiveSetMethod="sgma",PredictMethod="fic") は、パラメーターの推定に回帰変数サブセット近似法、基底関数として線形基底関数、アクティブ セットの選択にスパース グリーディ行列近似法、および予測に完全独立条件近似法を使用して GPR モデルを学習させます。
近似
GPR モデルのパラメーター推定方式。次のいずれかとして指定します。
| 近似方式 | 説明 |
|---|---|
"none" | 推定を行いません。初期パラメーター値を既知のパラメーター値として使用します。 |
"exact" | 厳密なガウス過程回帰。この値は n ≤ 2000 の場合の既定値です。ここで、n は観測値の数です。 |
"sd" | データ点サブセット近似。この値は n > 2000 の場合の既定値です。ここで、n は観測値の数です。"sd" はスパース法です。 |
"sr" | 回帰変数サブセット近似。"sr" はスパース法です。 |
"fic" | 完全独立条件近似。"fic" はスパース法です。 |
例: FitMethod="fic"
GPR モデルの明示的な基底関数。"constant"、"none"、"linear"、"pureQuadratic"、または関数ハンドルとして指定します。観測値の数が n の場合、基底関数は H*β という項をモデルに追加します。ここで、H は基底行列、β は p 行 1 列の基底係数のベクトルです。
| 明示的な基底関数 | 基底行列 |
|---|---|
"none" | 空行列 |
"constant" |
H は n 行 1 列の 1 のベクトルで、n は観測値の数です。 |
"linear" |
X はカテゴリカル変数のダミー変数が作成された後の展開された予測子データです。ダミー変数の作成に関する詳細については、 |
"pureQuadratic" |
ここで
この基底オプションでは、カテゴリカル予測子をもつ X はサポートされません。 |
| 関数ハンドル |
ここで、X は n 行 d 列の予測子の行列、d はカテゴリカル変数のダミー変数が作成された後の予測子の数、H は n 行 p 列の基底関数の行列です。 |
例: BasisFunction="pureQuadratic"
データ型: char | string | function_handle
明示的な基底関数の係数の初期値。p 行 1 列のベクトルとして指定します。p は、基底行列 "H" の列数です。
基底行列は、指定された基底関数によって決まります。詳細については、BasisFunction を参照してください。
FitMethod が "none" の場合のみ、学習関数は係数の初期値を既知の係数値として使用します。
データ型: double
ガウス過程モデルのノイズ標準偏差の初期値。正のスカラー値として指定します。
学習関数は、SigmaLowerBound および exp(η) の合計としてノイズ標準偏差をパラメーター化します。ここで η は制約なしの値です。したがって、関数が η を有限値に初期化できるように、Sigma は小さい許容誤差だけ SigmaLowerBound よりも大きい必要があります。そうでない場合、関数は Sigma を互換性のある値にリセットします。
許容誤差は ConstantSigma が false (既定) の場合 1e-3 です。それ以外の場合は 1e-6 です。許容誤差が応答変数のスケールに対して十分小さくない場合、この許容誤差の値が応答変数に対して小さいと見なせるように、応答変数を拡大できます。
例: Sigma=2
データ型: double
ガウス過程モデルのノイズ標準偏差に対する定数値の Sigma。数値または logical の 0 (false) または 1 (true) として指定します。ConstantSigma が true の場合、学習関数は Sigma の値を最適化せず、計算全体で初期値を使用します。
例: ConstantSigma=true
データ型: logical
ノイズ標準偏差 (Sigma) の下限。正のスカラー値として指定します。
Sigma は小さい許容誤差だけ SigmaLowerBound よりも大きい必要があります。
例: SigmaLowerBound=0.02
データ型: double
カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。
| 値 | 説明 |
|---|---|
| 正の整数のベクトル | ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~
|
| logical ベクトル |
|
| 文字行列 | 行列の各行は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。 |
| string 配列または文字ベクトルの cell 配列 | 配列の各要素は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。 |
"all" | すべての予測子がカテゴリカルです。 |
既定では、予測子データが table (Tbl) 内にある場合、fitrgp は、その変数が logical ベクトル、categorical ベクトル、文字配列、string 配列または文字ベクトルの cell 配列のいずれかである場合に、変数を categorical であると見なします。予測子データが行列 (X) である場合、fitrgp はすべての予測子が連続的であると見なします。他の予測子をカテゴリカル予測子として指定するには、名前と値の引数 CategoricalPredictors を使用してそれらを指定します。
特定されたカテゴリカル予測子に対して、fitrgp はカテゴリカル変数に順序が設定されていないか順序が設定されているかに応じて、2 つの異なる方式を使用してダミー変数を作成します。順序付けのないカテゴリカル変数の場合、fitrgp は、そのカテゴリカル変数の各レベルについて 1 つずつダミー変数を作成します。順序付けされたカテゴリカル変数の場合、fitrgp は、カテゴリの数よりも 1 つ少ないダミー変数を作成します。詳細については、ダミー変数の自動作成を参照してください。
例: CategoricalPredictors="all"
データ型: single | double | logical | char | string | cell
データを標準化するためのインジケーター。数値または logical の 0 (false) または 1 (true) として指定します。
Standardize=1 を設定すると、予測子データの各列が列の平均と標準偏差でセンタリングおよびスケーリングされます。カテゴリカル予測子について生成されたダミー変数の列に格納されているデータは標準化されません。
例: Standardize=1
例: Standardize=true
データ型: logical
回帰変数サブセット ("sr") および完全独立条件 ("fic") の近似法の正則化標準偏差。正のスカラー値として指定します。詳細については、FitMethod を参照してください。
例: Regularization=0.2
データ型: double
カーネル (共分散) 関数
共分散関数の形式。次のいずれかを指定します。
| 値 | 説明 |
|---|---|
"exponential" | 指数カーネル |
"squaredexponential" | 二乗指数カーネル |
"matern32" | パラメーターが 3/2 の Matern カーネル |
"matern52" | パラメーターが 5/2 の Matern カーネル |
"rationalquadratic" | 有理二次カーネル |
"ardexponential" | 予測子ごとに長さスケールが異なる指数カーネル |
"ardsquaredexponential" | 予測子ごとに長さスケールが異なる二乗指数カーネル |
"ardmatern32" | パラメーターが 3/2 で予測子ごとに長さスケールが異なる Matern カーネル |
"ardmatern52" | パラメーターが 5/2 で予測子ごとに長さスケールが異なる Matern カーネル |
"ardrationalquadratic" | 予測子ごとに長さスケールが異なる有理二次カーネル |
| 関数ハンドル | 次の形式の関数ハンドル。Kmn = kfcn(Xm,Xn,theta)ここで、 Xm は m 行 d 列の行列、Xn は n 行 d 列の行列、Kmn は Kmn(i,j) が Xm(i,:) と Xn(j,:) の間のカーネル積である m 行 n 列のカーネル積の行列です。d はカテゴリカル変数のダミー変数が作成された後の予測子変数の数です。ダミー変数の作成の詳細については、CategoricalPredictors を参照してください。theta は kfcn についての制約がない r 行 1 列のパラメーター ベクトルです。 |
カーネル関数についての詳細は、カーネル (共分散) 関数のオプションを参照してください。
例: KernelFunction="matern32"
データ型: char | string | function_handle
カーネル パラメーターの初期値。数値ベクトルとして指定します。ベクトルのサイズと値は、名前と値の引数 KernelFunction で指定する共分散間数の形式によって異なります。
KernelFunction Value | KernelParameters Value |
|---|---|
"exponential"、"squaredexponential"、"matern32"、または "matern52" | 2 行 1 列のベクトル phi。phi(1) には長さスケールを、phi(2) には信号標準偏差を格納します。長さスケール パラメーターの既定の初期値は予測子の標準偏差の平均です。信号標準偏差は応答の標準偏差を 2 の平方根で除算した値です。つまり、次のようになります。 phi = [mean(std(X));std(y)/sqrt(2)]。 |
"rationalquadratic" | 3 行 1 列のベクトル phi。phi(1) には長さスケールを、phi(2) にはスケール混合パラメーターを、phi(3) には信号標準偏差を格納します。長さスケール パラメーターの既定の初期値は予測子の標準偏差の平均です。信号標準偏差は応答の標準偏差を 2 の平方根で除算した値です。スケール混合パラメーターの既定の初期値は 1 です。つまり、次のようになります。 phi = [mean(std(X));1;std(y)/sqrt(2)]。 |
"ardexponential"、"ardsquaredexponential"、"ardmatern32"、または "ardmatern52" | (d+1) 行 1 列のベクトル phi。phi(i) には予測子 i の長さスケールを、phi(d+1) には信号標準偏差を格納します。d は、カテゴリカル変数用にダミー変数が作成された後の予測子変数の数です。ダミー変数の作成に関する詳細については、CategoricalPredictors を参照してください。長さスケール パラメーターの既定の初期値は予測子の標準偏差です。信号標準偏差は応答の標準偏差を 2 の平方根で除算した値です。つまり、次のようになります。 phi = [std(X)';std(y)/sqrt(2)]。 |
"ardrationalquadratic" | (d+2) 行 1 列のベクトル phi。phi(i) には予測子 i の長さスケール、phi(d+1) にはスケール混合パラメーターを、phi(d+2) には信号標準偏差を格納します。d は、カテゴリカル変数用にダミー変数が作成された後の予測子変数の数です。ダミー変数の作成の詳細については、CategoricalPredictors を参照してください。長さスケール パラメーターの既定の初期値は予測子の標準偏差です。信号標準偏差は応答の標準偏差を 2 の平方根で除算した値です。スケール混合パラメーターの既定の初期値は 1 です。つまり、次のようになります。 phi = [std(X)';1;std(y)/sqrt(2)]。 |
| 関数ハンドル | カスタム カーネル関数 kfcn の非制約パラメーター ベクトル phi の初期値の r 行 1 列のベクトル。KernelFunction が関数ハンドルの場合、カーネル パラメーターの初期値を指定しなければなりません。 |
カーネル関数についての詳細は、カーネル (共分散) 関数のオプションを参照してください。
例: KernelParameters=phi
データ型: double | single
組み込みカーネル関数を評価するために点間の距離を計算する方式。"fast" または "accurate" として指定します。"fast" を指定すると、学習関数は を として計算します。"accurate" を指定すると、学習関数は を計算します。
例: DistanceMethod="accurate"
アクティブ セットの選択
アクティブ セット内の観測値。1 から n の範囲にある整数から成る m 行 1 列のベクトル (m ≤ n)、または少なくとも 1 つの true 要素が含まれている長さが n の logical ベクトルとして指定します。n は、学習データに含まれている観測値の総数です。
fitrgp では、ActiveSet で指定された観測値を使用して GPR モデルを学習させます。重複する要素をアクティブ セットに含めることはできません。
ActiveSet を指定した場合、次のようになります。
fitrgpは、ActiveSetSizeとActiveSetMethodを使用しません。このモデルに対して交差検証を実行できません。
データ型: double | logical
アクティブ セットのサイズ。整数 m (1 ≤ m ≤ n) として指定します。ここで、n は観測値の数です。この引数は、FitMethod が "sd"、"sr"、または "fic" の場合に有効です。
既定値は、FitMethod が "sr" または "fic" の場合は min(1000,n)、それ以外の場合は min(2000,n) です。
例: ActiveSetSize=100
データ型: double
アクティブ セット選択法。次の値のいずれかとして指定します。
| 値 | 説明 |
|---|---|
"random" | 無作為選択 |
"sgma" | スパース グリーディ行列近似 |
"entropy" | 微分エントロピーに基づく選択 |
"likelihood" | 回帰変数サブセットの対数尤度に基づく選択 |
("random" を除く) すべてのアクティブ セット選択法で、格納場所として n 行 m 列の行列が必要です。ここで、m はアクティブ セットのサイズ、n は観測値の数です。
例: ActiveSetMethod="entropy"
アクティブ セットを選択するためのグリーディな包含におけるランダム探索セットのサイズ。整数値として指定します。
例: RandomSearchSetSize=30
データ型: double
アクティブ セットの選択を終了させるための相対許容誤差。正のスカラーとして指定します。
例: ToleranceActiveset=0.0002
データ型: double
ActiveSetMethod が "random" ではない場合の、インターリーブ方式によるアクティブ セット選択とパラメーター推定における反復の数。整数値として指定します。
例: NumActiveSetRepeats=5
データ型: double
予測
与えられたパラメーターに対してガウス過程モデルで予測を行うために使用する方式。次の値のいずれかとして指定します。
| 値 | 説明 |
|---|---|
"exact" | 厳密ガウス過程回帰法。この値は n ≤ 10,000 の場合の既定値です。 |
"bcd" | ブロック座標降下 (BCD)。この値は n > 10,000 の場合の既定値です。 |
"sd" | データ点サブセット近似 |
"sr" | 回帰変数サブセット近似 |
"fic" | 完全独立条件近似 |
例: PredictMethod="bcd"
ブロック座標降下法 ("bcd") のブロック サイズ。1 から n までの範囲の整数として指定します。ここで、n は観測値の数です。
例: BlockSizeBCD=1500
データ型: double
ブロック座標降下法 ("bcd") のグリーディ選択の数。1 から BlockSizeBCD までの範囲の整数として指定します。
例: NumGreedyBCD=150
データ型: double
ブロック座標降下法 ("bcd") の反復を終了させるための勾配ノルムの相対許容誤差。正のスカラーとして指定します。
例: ToleranceBCD=0.002
データ型: double
ブロック座標降下法 ("bcd") の反復を終了させるためのステップ サイズの絶対許容誤差。正のスカラーとして指定します。
例: StepToleranceBCD=0.002
データ型: double
ブロック座標降下法 ("bcd") の最大反復数。正の整数として指定します。
例: IterationLimitBCD=10000
データ型: double
最適化
パラメーター推定に使用するオプティマイザー。次の表にある値のいずれかを指定します。
| 値 | 説明 |
|---|---|
"quasinewton" | ヘッシアンに対する、密で対称的なランク 1 に基づく準ニュートン近似 |
"lbfgs" | ヘッシアンに対する、LBFGS に基づく準ニュートン近似 |
"fminsearch" | Lagarias らのシンプレックス探索法を使用する、制約がない非線形最適化 |
"fminunc" | 制約がない非線形最適化 (Optimization Toolbox™ のライセンスが必要) |
"fmincon" | 制約がある非線形最適化 (Optimization Toolbox のライセンスが必要) |
オプティマイザーの詳細については、アルゴリズムを参照してください。
例: Optimizer="fmincon"
名前と値の引数 Optimizer で設定されるオプティマイザーのオプション。optimset、statset("fitrgp")、または optimoptions によって作成された構造体またはオブジェクトとして指定します。
| オプティマイザー | オプティマイザーのオプションを作成する関数 |
|---|---|
"fminsearch" | optimset (構造体) |
"quasinewton" または "lbfgs" | statset("fitrgp") (構造体) |
"fminunc" または "fmincon" | optimoptions (オブジェクト) |
既定のオプションは、指定されたオプティマイザーによって異なります。
例: OptimizerOptions=opt
初期ステップ サイズ。正の実数スカラーまたは "auto" として指定します。
InitialStepSize は、オプティマイザーが "quasinewton" または "lbfgs" である場合の最初の最適化ステップにおける近似値の絶対値の最大値です。初期ステップ サイズにより、最適化におけるヘッシアンの初期近似を決定できます。
既定では、学習関数はヘッシアンの初期近似の決定に初期ステップ サイズを使用しません。初期ステップ サイズを使用するには、名前と値の引数 InitialStepSize の値を設定するか、InitialStepSize="auto" を指定して値を自動的に決定させます。"auto" の詳細については、アルゴリズムを参照してください。
例: InitialStepSize="auto"
交差検証
交差検証済みモデルに学習させるためのフラグ。"on" または "off" として指定します。
"on" を指定すると、10 の分割を使用して交差検証済みモデルの学習が実行されます。
名前と値の引数 CVPartition、Holdout、KFold、または Leaveout を使用すると、この交差検証の設定をオーバーライドできます。交差検証済みモデルを作成するときに使用できる交差検証の名前と値の引数は、一度に 1 つだけです。
または、後で Mdl を crossval に渡して交差検証を実行します。
例: Crossval="on"
データ型: char | string
交差検証分割。交差検証のタイプと学習セットおよび検証セットのインデックス付けを指定する cvpartition オブジェクトとして指定します。
交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartition、Holdout、KFold、Leaveout の 4 つのうちのいずれかのみです。
例: cvp = cvpartition(500,KFold=5) を使用して、500 個の観測値に対する 5 分割交差検証について無作為な分割を作成するとします。この場合、CVPartition=cvp を設定して交差検証分割を指定できます。
ホールドアウト検証に使用するデータの比率。範囲 (0,1) のスカラー値として指定します。Holdout=p を指定した場合、以下の手順が実行されます。
p*100% のデータを無作為に選択して検証データとして確保し、残りのデータを使用してモデルに学習をさせる。コンパクトな学習済みモデルを交差検証済みモデルの
Trainedプロパティに格納する。
交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartition、Holdout、KFold、Leaveout の 4 つのうちのいずれかのみです。
例: Holdout=0.1
データ型: double | single
交差検証済みモデルで使用する分割の数。1 より大きい正の整数値として指定します。KFold=k を指定した場合、以下の手順が実行されます。
データを無作為に
k個のセットに分割する。各セットについて、そのセットを検証データとして確保し、他の
k– 1 個のセットを使用してモデルに学習をさせる。k個のコンパクトな学習済みモデルを、交差検証済みモデルのTrainedプロパティに含まれているk行 1 列の cell ベクトルに格納する。
交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartition、Holdout、KFold、Leaveout の 4 つのうちのいずれかのみです。
例: KFold=5
データ型: single | double
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 と一緒には使用できません。OptimizeHyperparameters の場合の交差検証は、名前と値の引数 HyperparameterOptimizationOptions を使用することのみによって変更できます。
ハイパーパラメーターの最適化
最適化するパラメーター。次のいずれかを指定します。
"none"— 最適化を行いません。"auto"—["Sigma","Standardize"]を使用します。"all"— すべての使用可能パラメーターを最適化します。["BasisFunction","KernelFunction","KernelScale","Sigma","Standardize"]と同じです。使用可能パラメーター名の string 配列または cell 配列。
optimizableVariableオブジェクトのベクトル。通常はhyperparametersの出力です。
最適化では、パラメーターを変化させることにより、fitrgp の交差検証損失 (誤差) を最小化しようとします。交差検証のタイプおよびその他の最適化の側面を制御するには、名前と値の引数 HyperparameterOptimizationOptions を使用します。HyperparameterOptimizationOptions を使用すると、ConstraintType オプションと ConstraintBounds オプションを設定することにより、交差検証損失の代わりに (コンパクトな) モデル サイズを最適化の目的として使用できます。
メモ
OptimizeHyperparameters の値は、他の名前と値の引数を使用して指定した値より優先されます。たとえば、OptimizeHyperparameters を "auto" に設定すると、fitrgp は "auto" オプションに対応するハイパーパラメーターを最適化して、ハイパーパラメーターに指定された値を無視します。
fitrgp では、以下のパラメーターを使用できます。
BasisFunction—fitrgpは、"constant"、"none"、"linear"および"pureQuadratic"で探索します。KernelFunction—fitrgpは、"ardexponential"、"ardmatern32"、"ardmatern52"、"ardrationalquadratic"、"ardsquaredexponential"、"exponential"、"matern32"、"matern52"、"rationalquadratic"および"squaredexponential"で探索します。KernelScale—fitrgpは、引数KernelParametersを使用してカーネル スケール パラメーターの値を指定します。この値は、当てはめ時に変化しません。この場合、すべての入力次元はKernelScaleの値が同じになるように制約されます。fitrgpは範囲[1e-3,1e3]の対数スケールで正の値を探索します。どの ARD カーネルについても
KernelScaleを最適化することはできません。Sigma—fitrgpは、範囲[1e-4,max(1e-3,10*ResponseStd)]の対数スケールで正の値を探索します。ここで、次のようになります。ResponseStd = std(y).内部的に、
fitrgpは名前と値の引数ConstantSigmaをtrueに設定するので、当てはめ時にSigmaの値は定数になります。Standardize—fitrgpは"true"と"false"で探索します。
既定以外のパラメーターを設定するには、既定以外の値が含まれている optimizableVariable オブジェクトのベクトルを渡します。以下に例を示します。
load fisheriris params = hyperparameters("fitrgp",meas,species); params(1).Range = [1e-4,1e6];
OptimizeHyperparameters の値として params を渡します。
既定では、コマンド ラインに反復表示が表示され、最適化のハイパーパラメーターの個数に従ってプロットが表示されます。最適化とプロットにおける目的関数は、log(1 + cross-validation loss) です。反復表示を制御するには、名前と値の引数 HyperparameterOptimizationOptions の Verbose オプションを設定します。プロットを制御するには、名前と値の引数 HyperparameterOptimizationOptions の ShowPlots オプションを設定します。
たとえば、GPR モデルの最適化を参照してください。
例: OptimizeHyperparameters="auto"
最適化のオプション。HyperparameterOptimizationOptions オブジェクトまたは構造体として指定します。この引数を指定すると、名前と値の引数 OptimizeHyperparameters の効果が変化します。HyperparameterOptimizationOptions を指定する場合、OptimizeHyperparameters も指定しなければなりません。オプションはいずれも任意です。ただし、AggregateOptimizationResults を返すには ConstraintBounds と ConstraintType を設定しなければなりません。構造体で設定できるオプションは HyperparameterOptimizationOptions オブジェクトと同じです。
| オプション | 値 | 既定の設定 |
|---|---|---|
Optimizer |
| "bayesopt" |
ConstraintBounds | N 個の最適化問題の制約範囲。N 行 2 列の数値行列または | [] |
ConstraintTarget | 最適化問題の制約ターゲット。 | ConstraintBounds と ConstraintType を指定する場合の既定値は "matlab" です。そうでない場合、既定値は [] となります。 |
ConstraintType | 最適化問題の制約タイプ。 | [] |
AcquisitionFunctionName | 獲得関数のタイプ:
目的関数の実行時に最適化が決まるので、名前に | "expected-improvement-per-second-plus" |
LossFun | 最適化する検証損失のタイプ。"auto" または "mse" として指定します。どちらのオプションでも、平均二乗誤差が使用されます。 | "auto" |
MaxObjectiveEvaluations | 目的関数評価の最大数。ConstraintBounds を使用して最適化問題を複数指定する場合、MaxObjectiveEvaluations の値は各最適化問題に個別に適用されます。 | "bayesopt" および "randomsearch" の場合は 30、"gridsearch" の場合はグリッド全体 |
MaxTime | 最適化の制限時間。非負の実数スカラーとして指定します。制限時間の単位は、 | Inf |
NumGridDivisions | Optimizer="gridsearch" における各次元の値の個数。値は、各次元の値の個数を表す正の整数のベクトル、またはすべての次元に適用されるスカラーが可能です。カテゴリカル変数の場合、このオプションは無視されます。 | 10 |
ShowPlots | 最適化の進行状況のプロットを表示するかどうかを示す logical 値。このオプションが true の場合、最適な観測された目的関数値が反復回数に対してプロットされます。ベイズ最適化を使用する場合 (Optimizer="bayesopt")、最適な推定された目的関数値もプロットされます。最適な観測された目的関数値および最適な推定された目的関数値は、反復表示の BestSoFar (observed) 列および BestSoFar (estim.) 列の値にそれぞれ対応しています。これらの値は、SupervisedLearningBayesianOptimization オブジェクトのプロパティ ObjectiveMinimumTrace および EstimatedObjectiveMinimumTrace で確認できます。問題にベイズ最適化の最適化パラメーターが 1 つまたは 2 つある場合、ShowPlots はパラメーターに対する目的関数のモデルもプロットします。 | true |
SaveIntermediateResults | 最適化の結果を保存するかどうかを示す logical 値。このオプションが true の場合、SupervisedLearningBayesoptResults という名前のワークスペース変数が反復ごとに上書きされます。この変数は SupervisedLearningBayesianOptimization オブジェクトです。ConstraintBounds を使用して最適化問題を複数指定する場合、ワークスペース変数は AggregateBayesoptResults という名前の AggregateBayesianOptimization オブジェクトになります。 | false |
Verbose | コマンド ラインにおける表示レベル:
詳細については、 | 1 |
UseParallel | ベイズ最適化を並列実行するオプション。並列実行には Parallel Computing Toolbox™ が必要です。次の値のいずれかとして指定します。
並列でのタイミングに再現性がないため、並列ベイズ最適化で再現性のある結果が生成されるとは限りません。詳細については、並列ベイズ最適化を参照してください。 | "off" |
Repartition | 反復ごとに交差検証を再分割するかどうかを示す論理値。このオプションが 分割ノイズが考慮されるので、通常は値を | false |
| 次の 3 つのオプションのいずれか 1 つのみを指定してください。 | ||
CVPartition | cvpartition によって作成された cvpartition オブジェクト | 交差検証オプションが指定されていない場合は KFold=5 |
Holdout | ホールドアウトの比率を表す範囲 (0,1) のスカラー | |
KFold | 1 より大きい整数 | |
例: HyperparameterOptimizationOptions=struct(UseParallel="auto")
その他
予測子変数名。一意な名前の string 配列または一意な文字ベクトルの cell 配列として指定します。PredictorNames の機能は、学習データの提供方法によって決まります。
XとYを指定した場合、PredictorNamesを使用してX内の予測子変数に名前を割り当てることができます。PredictorNames内の名前の順序は、Xの予測子の順序に一致しなければなりません。Xが既定の方向 (行に観測値、列に予測子) をもつと仮定すると、PredictorNames{1}はX(:,1)の名前、PredictorNames{2}はX(:,2)の名前 (以下同様) になります。また、size(X,2)とnumel(PredictorNames)は等しくなければなりません。既定では
PredictorNamesは{'x1','x2',...}です。
Tblを指定する場合、PredictorNamesを使用して学習に使用する予測子変数を選択できます。つまり、fitrgpは、学習時にPredictorNamesの変数のみを予測子として使用します。PredictorNamesはTbl.Properties.VariableNamesのサブセットでなければならず、いずれの応答変数の名前も含めることはできません。既定では、すべての予測子変数の名前が
PredictorNamesに格納されます。PredictorNamesとformulaの両方ではなく、いずれか一方を使用して学習用の予測子を指定することをお勧めします。
例: PredictorNames=["SepalLength","SepalWidth","PetalLength","PetalWidth"]
データ型: string | cell
応答変数名。文字ベクトルまたは string スカラーとして指定します。
Yを指定した場合、ResponseNameを使用して応答変数の名前を指定できます。ResponseVarNameまたはformulaを指定した場合、ResponseNameを使用できません。
例: ResponseName="response"
データ型: char | string
詳細レベル。0 または 1 として指定します。
0— 学習関数は、アクティブ セットの選択とブロック座標降下に関連する診断メッセージを表示しませんが、OptimizerOptionsのDisplayの値によってはパラメーター推定に関連するメッセージを表示します。1― 学習関数は、パラメーター推定、アクティブ セットの選択、およびブロック座標降下に関連する診断メッセージを繰り返し表示します。
例: Verbose=1
メガバイト (MB) 単位のキャッシュ サイズ。正のスカラーとして指定します。キャッシュ サイズは、当てはめとアクティブ セット選択に必要とされるメモリに加えて使用可能な追加のメモリです。学習関数は次の目的に CacheSize を使用します。
パラメーター推定時に点間の距離をキャッシュするかどうかの決定。
ブロック座標降下法および予測実施における行列ベクトル積の計算方法の決定。
例: CacheSize=2000
データ型: double
出力引数
学習済みのガウス過程回帰モデル。RegressionGP オブジェクト、RegressionPartitionedGP オブジェクト、またはモデル オブジェクトの cell 配列として返されます。
名前と値の引数
CrossVal、CVPartition、Holdout、KFold、Leaveoutのいずれかを設定した場合、MdlはRegressionPartitionedGPオブジェクトになります。OptimizeHyperparametersを指定してHyperparameterOptimizationOptionsのConstraintTypeオプションとConstraintBoundsオプションを設定している場合、Mdlはモデル オブジェクトの N 行 1 列の cell 配列になります。ここで、N はConstraintBoundsの行数と等しくなります。いずれの最適化問題からも実行可能なモデルが得られない場合、cell 配列の各値が[]になります。それ以外の場合、
MdlはRegressionGPモデル オブジェクトになります。
モデル オブジェクトのプロパティを参照するには、ドット表記を使用します。
複数の最適化問題についての最適化の結果の集計。AggregateBayesianOptimization オブジェクトとして返されます。AggregateOptimizationResults を返すには、OptimizeHyperparameters と HyperparameterOptimizationOptions を指定しなければなりません。HyperparameterOptimizationOptions の ConstraintType オプションと ConstraintBounds オプションも指定する必要があります。この出力の生成方法を示す例については、Hyperparameter Optimization with Multiple Constraint Boundsを参照してください。
詳細
データ サブセット近似法、回帰変数サブセット近似法または完全独立条件近似法の場合 (FitMethod が "sd"、"sr" または "fic" に等しい場合) にアクティブ セット (または誘導入力セット) を指定しないと、fitrgp は一連の反復でアクティブ セットを選択してパラメーター推定を計算します。
1 回目の反復では、ベクトル η0 = [β0,σ0,θ0] の初期パラメーター値を使用して、アクティブ セット A1 を選択します。η0 (初期値) と A1 を使用して GPR の周辺対数尤度または近似を最大化することにより、新しいパラメーター推定 η1 を計算します。次に、η1 と A1 を使用して、新しい対数尤度 L1 を計算します。
2 回目の反復では、η1 のパラメーター値を使用して、アクティブ セット A2 を選択します。次に、η1 (初期値) と A2 を使用して、GPR の周辺対数尤度または近似を最大化し、新しいパラメーター値 η2 を推定します。さらに、η2 と A2 を使用して、新しい対数尤度値 L2 を計算します。
次の表は、各反復とその計算をまとめたものです。
| 反復回数 | アクティブ セット | パラメーター ベクトル | 対数尤度 |
|---|---|---|---|
| 1 | A1 | η1 | L1 |
| 2 | A2 | η2 | L2 |
| 3 | A3 | η3 | L3 |
| … | … | … | … |
指定した回数の繰り返しについて、同様に反復処理が行われます。アクティブ セット選択の反復回数は、名前と値の引数 NumActiveSetRepeats を使用して指定できます。
ヒント
fitrgpは、近似法、予測法およびアクティブ セット選択法についてどのような組み合わせでも受け入れます。予測した応答の標準偏差を計算できないために予測区間を計算できない場合があります。predictを参照してください。また、学習データのサイズのため、厳密法を使用すると計算コストが高くなる場合もあります。PredictorNamesプロパティには、元の予測子変数名のそれぞれについて 1 つずつ要素が格納されます。たとえば、3 つの予測子があり、そのうちの 1 つは 3 つの水準があるカテゴリカル変数である場合、PredictorNamesは 1 行 3 列の文字ベクトルの cell 配列になります。ExpandedPredictorNamesプロパティには、ダミー変数を含む予測子変数のそれぞれについて 1 つずつ要素が格納されます。たとえば、3 つの予測子があり、そのうちの 1 つは 3 つの水準があるカテゴリカル変数である場合、ExpandedPredictorNamesは 1 行 5 列の文字ベクトルの cell 配列になります。同様に、
Betaプロパティには、ダミー変数を含む各予測子について 1 つずつベータ係数が格納されます。Xプロパティには、はじめに入力した状態で学習データが格納されます。ダミー変数は含まれません。多数の予測子がある ARD カーネルを使用する場合など、GPR モデルに多数のカーネル パラメーターがある場合、
fitrgpでヘッシアン近似を初期化する既定のアプローチは低速になる可能性があります。このような場合は、"auto"または初期ステップ サイズの値を指定することを検討します。反復的診断メッセージの表示に
Verbose=1を設定し、fitrgpによる既定の最適化で LBFGS または準ニュートン オプティマイザーを使用して GPR モデルの学習を始めることができます。数秒後になっても反復的な診断メッセージが表示されない場合、ヘッシアン近似の初期化に時間がかかりすぎている可能性があります。このような場合は、学習をやり直し、最適化を高速化するために初期ステップ サイズを使用することを検討します。モデルに学習をさせた後で、新しいデータについて応答を予測する C/C++ コードを生成できます。C/C++ コードの生成には MATLAB Coder™ が必要です。詳細については、統計と機械学習の関数のコード生成の紹介を参照してください。
アルゴリズム
GPR モデルの当てはめでは、次のモデル パラメーターをデータから推定します。
ベクトル 内のカーネル パラメーターに関してパラメーター化された共分散関数 (カーネル (共分散) 関数のオプションを参照)
ノイズ分散
固定基底関数の係数ベクトル
名前と値の引数
KernelParametersの値は、信号標準偏差 と特性長スケール の初期値から構成されるベクトルです。これらの値を使用してカーネル パラメーターが決定されます。同様に、名前と値の引数Sigmaにはノイズ標準偏差 の初期値が格納されます。最適化時に、ノイズ標準偏差とカーネル パラメーターの初期値を使用して、制約がない初期パラメーター値のベクトル が作成されます。
名前と値の引数
Betaによって指定された明示的な基底係数 が と の推定値から解析的に決定されます。したがって、数値最適化を初期化するときに はベクトル に現れません。メモ
GPR モデルのパラメーター推定を指定しなかった場合、名前と値の引数
Betaの値と他の初期パラメーター値が既知の GPR パラメーター値として使用されます (Betaを参照)。他のすべてのケースでは、Betaの値は目的関数から解析的に最適化されます。準ニュートン オプティマイザーでは、密で対称的なランク 1 に基づく (SR1) 準ニュートン近似による信頼領域法をヘッシアンに対して使用します。LBFGS オプティマイザーでは、メモリ制限 Broyden-Fletcher-Goldfarb-Shanno (LBFGS) 準ニュートン近似による標準的な直線探索法をヘッシアンに対して使用します。Nocedal および Wright を参照してください。
名前と値の引数
InitialStepSizeを"auto"に設定した場合、 を使用して初期ステップ サイズ が決定されます。は初期ステップ ベクトル、 は制約がない初期パラメーター値のベクトルです。
最適化時に、初期ステップ サイズ が次のように使用されます。
Optimizer="quasinewton"と初期ステップ サイズを指定した場合、ヘッシアンの初期近似は になります。Optimizer="lbfgs"と初期ステップ サイズを指定した場合、逆ヘッシアンの初期近似は になります。は初期勾配ベクトル、 は単位行列です。
参照
[1] Rasmussen, C. E. and C. K. I. Williams. Gaussian Processes for Machine Learning. MIT Press. Cambridge, Massachusetts, 2006.
[2] Lagarias, J. C., J. A. Reeds, M. H. Wright, and P. E. Wright. "Convergence Properties of the Nelder-Mead Simplex Method in Low Dimensions." SIAM Journal of Optimization. Vol. 9, Number 1, 1998, pp. 112–147.
[3] Nocedal, J. and S. J. Wright. Numerical Optimization, Second Edition. Springer Series in Operations Research, Springer Verlag, 2006.
拡張機能
ハイパーパラメーターの最適化を並列実行するには、fitrgp 関数を呼び出すときに名前と値の引数 HyperparameterOptimizationOptions で UseParallel フィールドを "on" または "auto" に設定します。
並列的なハイパーパラメーターの最適化の詳細については、並列ベイズ最適化を参照してください。
並列計算の全般的な情報については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
fitrgpは、次の少なくとも 1 つに該当する場合に GPU でモデルを当てはめます。入力引数
XがgpuArrayオブジェクトである。入力引数
YがgpuArrayオブジェクトである。入力引数
TblにgpuArrayの予測子変数または応答変数が含まれている。
詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2015b で導入名前と値の引数 HyperparameterOptimizationOptions の UseParallel フィールドで、従来の true または false の代わりに、"off"、"auto"、または "on" を指定できるようになりました。この変更により、並列実行で並列プールを使用するタイミングをより細かく制御できます。UseParallel フィールドを true または false として指定することは非推奨です。
目的に応じてコードを更新する方法を次の表に示します。
| 目的 | 非推奨 | 推奨 |
|---|---|---|
MATLAB クライアントで実行されるコードを作成する。 | HyperparameterOptimizationOptions=struct(UseParallel=false) | HyperparameterOptimizationOptions=struct(UseParallel="off") |
| 並列プール上で実行され、並列プールが利用できない場合は MATLAB クライアントで実行される、移植可能なコードを作成する。 | HyperparameterOptimizationOptions=struct(UseParallel=true) | HyperparameterOptimizationOptions=struct(UseParallel="auto") |
| 並列プール上で実行され、並列プールが利用できない場合はエラーを返すコードを作成する。 | 該当なし | HyperparameterOptimizationOptions=struct(UseParallel="on") |
true 値、および false 値のサポートを削除する予定はありません。
fitrgp で GPU 配列の入力引数がサポートされます。
HyperparameterOptimizationOptions に UseParallel=true が含まれている場合にソフトウェアで並列プールを開けないと、fitrgp は既定で逐次計算を実行します。
以前のリリースでは、このような状況でソフトウェアからエラーが発行されます。
R2023b 以降では、OptimizeHyperparameters の値として "auto" を指定した場合、fitrgp には最適化可能なハイパーパラメーターとして Standardize が含まれます。
R2023b 以降では、fitrgp でガウス過程回帰 (GPR) モデルのカーネル スケール パラメーターを最適化する際に既定の検索範囲 [1e-3,1e3] が使用されます。つまり、名前と値の引数 OptimizeHyperparameters を使用して GPR のハイパーパラメーター KernelScale を最適化するように指定すると、関数は範囲 [1e-3,1e3] の対数スケールで正の値を探索します。
以前のリリースでは、KernelScale ハイパーパラメーターについての既定の検索範囲は [1e-3*MaxPredictorRange,MaxPredictorRange] で、MaxPredictorRange = max(max(X) - min(X)) でした。
R2022b 以降では、交差検証ガウス過程回帰 (GPR) モデルは RegressionPartitionedGP オブジェクトです。以前のリリースでは、交差検証 GPR モデルは RegressionPartitionedModel オブジェクトでした。
RegressionPartitionedGP オブジェクトは 2 つの方法で作成できます。
オブジェクト関数
crossvalを使用して、GPR モデル オブジェクトRegressionGPから交差検証済みモデルを作成する。関数
fitrgpを使用し、名前と値の引数CrossVal、CVPartition、Holdout、KFold、Leaveoutのいずれかを指定して、交差検証済みモデルを作成する。
最初に GPR モデルの完全なモデルと交差検証済みモデルのどちらに学習させるかに関係なく、fitrgp の呼び出しで ActiveSet の値を指定することはできません。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)