ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

fitrgp

ガウス過程回帰 (GPR) モデルの近似

説明

gprMdl = fitrgp(tbl,ResponseVarName) は、tbl 内の標本データを使用して学習させたガウス過程回帰 (GPR) モデルを返します。ResponseVarName は、tbl 内の応答変数の名前です。

gprMdl = fitrgp(tbl,formula) は、formula で特定された予測子変数および応答変数について、tbl 内の標本データを使用して学習させたガウス過程回帰 (GPR) モデルを返します。

gprMdl = fitrgp(tbl,y) は、テーブル tbl 内の応答変数および連続応答ベクトル y についての GPR モデルを返します。

gprMdl = fitrgp(X,y) は、予測子 X および連続応答ベクトル y についての GPR モデルを返します。

gprMdl = fitrgp(___,Name,Value) は、1 つ以上の Name,Value ペア引数で指定された追加オプションを使用して、前の構文の入力引数のいずれかについて GPR モデルを返します。

たとえば、近似法、予測法、共分散関数またはアクティブ セット選択法を指定できます。交差検証済みモデルを学習させることもできます。

gprMdlRegressionGP オブジェクトです。このクラスのメソッドとプロパティについては、RegressionGP クラスのページを参照してください。

交差検証済みモデルを学習させた場合、gprMdlRegressionPartitionedModel オブジェクトになります。交差検証したオブジェクトをさらに分析するには、RegressionPartitionedModel クラスのメソッドを使用します。このクラスのメソッドについては、RegressionPartitionedModel クラスのページを参照してください。

すべて折りたたむ

この例では、UCI Machine Learning Repository [3]にあるアワビのデータ[1][2]を使用します。データをダウンロードして、'abalone.data' という名前で現在のフォルダに保存します。

データを table に格納します。最初の 7 行を表示します。

tbl = readtable('abalone.data','Filetype','text',...
     'ReadVariableNames',false);
tbl.Properties.VariableNames = {'Sex','Length','Diameter','Height',...
     'WWeight','SWeight','VWeight','ShWeight','NoShellRings'};
tbl(1:7,:)
ans = 

    Sex    Length    Diameter    Height    WWeight    SWeight    VWeight    ShWeight    NoShellRings
    ___    ______    ________    ______    _______    _______    _______    ________    ____________

    'M'    0.455     0.365       0.095      0.514     0.2245      0.101      0.15       15          
    'M'     0.35     0.265        0.09     0.2255     0.0995     0.0485      0.07        7          
    'F'     0.53      0.42       0.135      0.677     0.2565     0.1415      0.21        9          
    'M'     0.44     0.365       0.125      0.516     0.2155      0.114     0.155       10          
    'I'     0.33     0.255        0.08      0.205     0.0895     0.0395     0.055        7          
    'I'    0.425       0.3       0.095     0.3515      0.141     0.0775      0.12        8          
    'F'     0.53     0.415        0.15     0.7775      0.237     0.1415      0.33       20

このデータセットには、4177 個の観測値が含まれています。目標は、8 つの物理的な測定値からアワビの年齢を予測することです。最後の変数は貝殻の輪の数で、アワビの年齢を示します。最初の予測子は、カテゴリカル変数です。テーブルの最後の変数は、応答変数です。

パラメーター推定に回帰変数サブセット法を、予測に完全独立条件法を使用して、GPR モデルを近似させます。予測子を標準化します。

gprMdl = fitrgp(tbl,'NoShellRings','KernelFunction','ardsquaredexponential',...
      'FitMethod','sr','PredictMethod','fic','Standardize',1)
grMdl = 

  RegressionGP
       PredictorNames: {1x8 cell}
         ResponseName: 'Var9'
    ResponseTransform: 'none'
      NumObservations: 4177
       KernelFunction: 'ARDSquaredExponential'
    KernelInformation: [1x1 struct]
        BasisFunction: 'Constant'
                 Beta: 10.9148
                Sigma: 2.0243
    PredictorLocation: [10x1 double]
       PredictorScale: [10x1 double]
                Alpha: [1000x1 double]
     ActiveSetVectors: [1000x10 double]
        PredictMethod: 'FIC'
        ActiveSetSize: 1000
            FitMethod: 'SR'
      ActiveSetMethod: 'Random'
    IsActiveSetVector: [4177x1 logical]
        LogLikelihood: -9.0013e+03
     ActiveSetHistory: [1x1 struct]
       BCDInformation: []

学習済みのモデルを使用して、応答を予測します。

ypred = resubPredict(gprMdl);

真の応答と予測応答をプロットします。

figure();
plot(tbl.NoShellRings,'r.');
hold on
plot(ypred,'b');
xlabel('x');
ylabel('y');
legend({'data','predictions'},'Location','Best');
axis([0 4300 0 30]);
hold off;

学習済みのモデルについて学習データの回帰損失 (再代入損失) を計算します。

L = resubLoss(gprMdl)
L =

    4.0064

標本データを生成します。

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,'b.');
hold on;
plot(x,ypred,'r','LineWidth',1.5);
xlabel('x');
ylabel('y');
legend('Data','GPR predictions');
hold off

標本データを読み込みます。

load(fullfile(matlabroot,'examples','stats','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);

両方のモデルの応答予測と学習データの応答をプロットします。

figure();
plot(x,y,'r.');
hold on
plot(x,ypred1,'b');
plot(x,ypred2,'g');
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

GPR パラメーターを推定するために fitrgp が最大化する周辺の対数尤度には、複数の局所解が存在します。どの解に収束するかは、初期点によって決まります。各局所解は、特定のデータ解釈に対応します。この例では、既定の初期カーネル パラメーターを使用した解は、ノイズが多い低周波信号に対応します。一方、カスタムな初期カーネル パラメーターを使用した 2 番目の解は、ノイズが少ない高周波信号に対応します。

標本データを読み込みます。

load(fullfile(matlabroot,'examples','stats','gprdata.mat'))

6 つの連続予測子変数があります。学習データ セットには 500 個の観測値が、テスト データ セットには 100 個の観測値があります。このデータは、シミュレーションされたものです。

特性長スケールが各予測子について異なる二乗指数カーネル関数を使用して、GPR モデルを近似させます。この共分散関数は、次のように定義されます。

k(xi,xj|θ)=σf2exp[-12m=1d(xim-xjm)2σm2].

ここで、σm は予測子 m (m = 1、2、...、) の特性長スケールを表します。dσf は信号標準偏差です。制約がないパラメーター化 θ は、次のようになります。

θm=logσm,form=1,2,...,dθd+1=logσf.

カーネル関数の特性長スケールを 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',1);

テスト データの回帰損失を計算します。

L = loss(gprMdl,Xtest,ytest)
L = 0.6919

カーネル情報にアクセスします。

gprMdl.KernelInformation
ans = struct with fields:
                    Name: 'ARDSquaredExponential'
        KernelParameters: [7x1 double]
    KernelParameterNames: {7x1 cell}

カーネル パラメーターの名前を表示します。

gprMdl.KernelInformation.KernelParameterNames
ans = 7x1 cell array
    {'LengthScale1'}
    {'LengthScale2'}
    {'LengthScale3'}
    {'LengthScale4'}
    {'LengthScale5'}
    {'LengthScale6'}
    {'SigmaF'      }

カーネル パラメーターを表示します。

sigmaM = gprMdl.KernelInformation.KernelParameters(1:end-1,1)
sigmaM = 6×1
104 ×

    0.0004
    0.0007
    0.0004
    4.1730
    0.1018
    0.0056

sigmaF = gprMdl.KernelInformation.KernelParameters(end)
sigmaF = 28.1718
sigma  = gprMdl.Sigma
sigma = 0.8162

学習した特性長スケールの対数をプロットします。

figure()
plot((1:d)',log(sigmaM),'ro-');
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',1);

テスト データの回帰誤差を計算します。

xtest = [Xtest(:,1:3) Xtest(:,6)];
L = loss(gprMdl,xtest,ytest)
L = 0.6928

損失は、すべての変数を予測子変数として使用した場合と同じような値になっています。

テスト データについて予測応答を計算します。

 ypred = predict(gprMdl,xtest);

元の応答および近似した値をプロットします。

figure;
plot(ytest,'r');
hold on;
plot(ypred,'b');
legend('True response','GPR predicted values','Location','Best');
hold off

この例では、fitrgp を使用して自動的にハイパーパラメーターを最適化する方法を示します。この例では、ソフトウェアに含まれている gprdata2 データを使用します。

データを読み込みます。

load(fullfile(matlabroot,'examples','stats','gprdata2.mat'))

このデータには、1 つの予測子変数と連続応答が含まれています。このデータは、シミュレーションされたものです。

既定のカーネル パラメーターで二乗指数カーネル関数を使用して、GPR モデルを近似させます。

gprMdl1 = fitrgp(x,y,'KernelFunction','squaredexponential');

自動的なハイパーパラメーター最適化を使用して、5 分割交差検証損失を最小化するハイパーパラメーターを求めます。

再現性を得るために、乱数シードを設定し、'expected-improvement-plus' の獲得関数を使用します。

rng default
gprMdl2 = fitrgp(x,y,'KernelFunction','squaredexponential',...
    'OptimizeHyperparameters','auto','HyperparameterOptimizationOptions',...
    struct('AcquisitionFunctionName','expected-improvement-plus'));
|======================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |        Sigma |
|      | result |             | runtime     | (observed)  | (estim.)    |              |
|======================================================================================|
|    1 | Best   |     0.29417 |      2.1518 |     0.29417 |     0.29417 |    0.0015045 |
|    2 | Best   |    0.037898 |      1.3153 |    0.037898 |    0.060792 |      0.14147 |
|    3 | Accept |      1.5693 |     0.76112 |    0.037898 |    0.040633 |       25.279 |
|    4 | Accept |     0.29417 |      1.7549 |    0.037898 |    0.037984 |    0.0001091 |
|    5 | Accept |     0.29393 |      1.8182 |    0.037898 |    0.038029 |     0.029932 |
|    6 | Accept |     0.13152 |      1.2091 |    0.037898 |    0.038127 |      0.37127 |
|    7 | Best   |    0.037785 |      1.4368 |    0.037785 |    0.037728 |      0.18116 |
|    8 | Accept |     0.03783 |      1.3877 |    0.037785 |    0.036524 |      0.16251 |
|    9 | Accept |    0.037833 |      1.5439 |    0.037785 |    0.036854 |      0.16159 |
|   10 | Accept |    0.037835 |      1.8267 |    0.037785 |    0.037052 |      0.16072 |
|   11 | Accept |     0.29417 |      1.8249 |    0.037785 |     0.03705 |   0.00038214 |
|   12 | Accept |     0.42256 |      1.0248 |    0.037785 |     0.03696 |       3.2067 |
|   13 | Accept |     0.03786 |      1.3548 |    0.037785 |    0.037087 |      0.15245 |
|   14 | Accept |     0.29417 |      1.8118 |    0.037785 |    0.037043 |    0.0063584 |
|   15 | Accept |     0.42302 |       1.027 |    0.037785 |     0.03725 |       1.2221 |
|   16 | Accept |    0.039486 |      1.2477 |    0.037785 |    0.037672 |      0.10069 |
|   17 | Accept |    0.038591 |      1.3022 |    0.037785 |    0.037687 |      0.12077 |
|   18 | Accept |    0.038513 |       1.334 |    0.037785 |    0.037696 |       0.1227 |
|   19 | Best   |    0.037757 |      1.3904 |    0.037757 |    0.037572 |      0.19621 |
|   20 | Accept |    0.037787 |       1.452 |    0.037757 |    0.037601 |      0.18068 |
|======================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |        Sigma |
|      | result |             | runtime     | (observed)  | (estim.)    |              |
|======================================================================================|
|   21 | Accept |     0.44917 |     0.90673 |    0.037757 |     0.03766 |       8.7818 |
|   22 | Accept |    0.040201 |      1.2108 |    0.037757 |    0.037601 |     0.075414 |
|   23 | Accept |    0.040142 |      1.1481 |    0.037757 |    0.037607 |     0.087198 |
|   24 | Accept |     0.29417 |      1.8435 |    0.037757 |     0.03758 |    0.0031018 |
|   25 | Accept |     0.29417 |      1.7875 |    0.037757 |    0.037555 |   0.00019545 |
|   26 | Accept |     0.29417 |      1.7721 |    0.037757 |    0.037582 |     0.013608 |
|   27 | Accept |     0.29417 |      1.8143 |    0.037757 |    0.037556 |   0.00076147 |
|   28 | Accept |     0.42162 |      1.0185 |    0.037757 |    0.037854 |       0.6791 |
|   29 | Best   |    0.037704 |      1.3398 |    0.037704 |    0.037908 |       0.2367 |
|   30 | Accept |    0.037725 |      1.4091 |    0.037704 |    0.037881 |      0.21743 |

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

Best observed feasible point:
    Sigma 
    ______

    0.2367

Observed objective function value = 0.037704
Estimated objective function value = 0.037881
Function evaluation time = 1.3398

Best estimated feasible point (according to models):
     Sigma 
    _______

    0.16159

Estimated objective function value = 0.037881
Estimated function evaluation time = 1.3583

最適化前と最適化後のあてはめを比較します。

ypred1 = resubPredict(gprMdl1);
ypred2 = resubPredict(gprMdl2);

figure();
plot(x,y,'r.');
hold on
plot(x,ypred1,'b');
plot(x,ypred2,'k','LineWidth',2);
xlabel('x');
ylabel('y');
legend({'data','Initial Fit','Optimized Fit'},'Location','Best');
title('Impact of Optimization');
hold off

この例では、UCI Machine Learning Repository [3]にあるアワビのデータ[1][2]を使用します。データをダウンロードして、'abalone.data' という名前で現在のフォルダに保存します。

データを table に格納します。最初の 7 行を表示します。

tbl = readtable('abalone.data','Filetype','text','ReadVariableNames',false);tbl.Properties.VariableNames = {'Sex','Length','Diameter','Height','WWeight','SWeight','VWeight','ShWeight','NoShellRings'};
tbl(1:7,:)
ans = 

    Sex    Length    Diameter    Height    WWeight    SWeight    VWeight    ShWeight    NoShellRings
    ___    ______    ________    ______    _______    _______    _______    ________    ____________

    'M'    0.455     0.365       0.095      0.514     0.2245      0.101      0.15       15          
    'M'     0.35     0.265        0.09     0.2255     0.0995     0.0485      0.07        7          
    'F'     0.53      0.42       0.135      0.677     0.2565     0.1415      0.21        9          
    'M'     0.44     0.365       0.125      0.516     0.2155      0.114     0.155       10          
    'I'     0.33     0.255        0.08      0.205     0.0895     0.0395     0.055        7          
    'I'    0.425       0.3       0.095     0.3515      0.141     0.0775      0.12        8          
    'F'     0.53     0.415        0.15     0.7775      0.237     0.1415      0.33       20

このデータセットには、4177 個の観測値が含まれています。目標は、8 つの物理的な測定値からアワビの年齢を予測することです。最後の変数は貝殻の輪の数で、アワビの年齢を示します。最初の予測子は、カテゴリカル変数です。テーブルの最後の変数は、応答変数です。

データの 25% を検証用に使用して、交差検証 GPR モデルを学習させます。

rng('default') % For reproducibility
cvgprMdl = fitrgp(tbl,'NoShellRings','Standardize',1,'Holdout',0.25);

分割外観測値で学習させたモデルを使用して、分割の平均損失を計算します。

kfoldLoss(cvgprMdl)
ans =
   4.6409

分割外データの応答を予測します。

ypred = kfoldPredict(cvgprMdl);

検証と予測に使用した真の応答をプロットします。

figure();
plot(ypred(cvgprMdl.Partition.test));
hold on;
y = table2array(tbl(:,end));
plot(y(cvgprMdl.Partition.test),'r.');
axis([0 1050 0 30]);
xlabel('x')
ylabel('y')
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);

二乗指数カーネル関数をカスタムなカーネル関数として定義します。

二乗指数カーネル関数は、次のように計算できます。

k(xi,xj|θ)=σf2exp(-12(xi-xj)T(xi-xj)σl2),

ここで、σf は信号標準偏差、σl は特性長スケールです。σfσl はどちらも 0 より大きくなければなりません。この条件は、制約のないパラメーター表現ベクトル θ について制約のないパラメーター表現 σl=exp(θ(1)) および σf=exp(θ(2)) を使用することにより適用できます。

したがって、二乗指数カーネル関数は、次のカスタムなカーネル関数として定義できます。

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.460069e+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

正規化した予測子の重みをプロットします。

figure;
semilogx(weights,'ro');
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 を参照してください。

カテゴリカル変数が予測子データに含まれている場合、これらの変数について完全なダミー コーディングが使用されます。カテゴリカル変数の各レベルについて 1 つずつダミー変数が作成されます。

データ型: テーブル

応答変数の名前。tbl 内の変数の名前で指定します。ResponseVarName には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、応答変数 ytbl に (tbl.y として) 格納されている場合、'y' として指定します。それ以外の場合、モデルを学習させるときに、tbl の列は y を含めてすべて予測子として扱われます。

データ型: char | string

モデルの学習で使用する応答変数と予測子変数。'y~x1+x2+x3' という形式の文字ベクトルまたは string スカラーを指定します。この形式では、y は応答変数を、x1x2 および x3 はモデルの学習で使用する予測子変数を表します。

モデルに学習をさせるときに使用する予測子として、tbl に含まれている変数の一部を指定するには、式を使用します。式を指定した場合、formula に現れない変数はモデルの学習に使用されません。

式で 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

名前と値のペアの引数

オプションの Name,Value 引数のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: 'FitMethod','sr','BasisFunction','linear','ActiveSetMethod','sgma','PredictMethod',fic' は、パラメーターの推定に回帰変数サブセット近似法、基底関数として線形基底関数、アクティブ セットの選択にスパース グリーディ行列近似法、および予測に完全独立条件近似法を使用して GPR モデルを学習させます。

メモ

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

近似

すべて折りたたむ

GPR モデルのパラメーター推定方式。'FitMethod' と次のいずれかから構成されるコンマ区切りのペアとして指定します。

近似方式説明
'none'推定を行いません。初期パラメーター値を既知のパラメーター値として使用します。
'exact'厳密なガウス過程回帰。n ≤ 2000 の場合の既定方式です。n は観測値の数です。
'sd'データ点サブセット近似。n > 2000 の場合の既定方式です。n は観測値の数です。
'sr'回帰変数サブセット近似。
'fic'完全独立条件近似。

例: 'FitMethod','fic'

GPR モデルの明示的な基底関数。'BasisFunction' と次のいずれかから構成されるコンマ区切りのペアとして指定します。観測値の数が n の場合、基底関数は H*β という項をモデルに追加します。ここで、H は基底行列、β は p 行 1 列の基底係数のベクトルです。

明示的な基底関数基底行列
'none'空の行列。
'constant'

H=1

(1 から成る n 行 1 列のベクトル。n は観測値の個数)

'linear'

H=[1,X]

'pureQuadratic'

H=[1,X,X2],

ここで

X2=[x112x122x1d2x212x222x2d2xn12xn22xnd2].

関数ハンドル

fitrgp が次のように呼び出す関数のハンドル hfcn

H=hfcn(X),

ここで、X は n 行 d 列の予測子の行列、H は n 行 p 列の基底関数の行列です。

例: 'BasisFunction','pureQuadratic'

データ型: char | string | function_handle

明示的な基底関数の係数の初期値。'Beta' と p 行 1 列のベクトルから構成されるコンマ区切りのペアとして指定します。p は、基底行列 H の列数です。

基底行列は、明示的な基底関数の選択によって決まります (BasisFunction も参照してください) 。

FitMethod'none' の場合のみ、fitrgp は係数の初期値を既知の係数値として使用します。

データ型: double

ガウス過程モデルのノイズ標準偏差の初期値。'Sigma' と正のスカラー値から構成されるコンマ区切りのペアとして指定します。

例: 'Sigma',2

データ型: double

ガウス過程モデルのノイズ標準偏差に対する定数値の Sigma。logical スカラーを指定します。ConstantSigmatrue の場合、fitrgpSigma の値を最適化せず、計算全体で値として初期値を使用します。

例: 'ConstantSigma',true

データ型: logical

ノイズ標準偏差の下限。'SigmaLowerBound' と正のスカラー値から構成されるコンマ区切りのペアとして指定します。

例: 'SigmaLowerBound',0.02

データ型: double

カテゴリカル予測子のリスト。'CategoricalPredictors' と以下のいずれかの値から構成されるコンマ区切りのペアとして指定します。

説明
正の整数のベクトルベクトルのエントリは、カテゴリカル変数が含まれている予測子データ (X または tbl) の列に対応するインデックス値です。
logical ベクトルtrue というエントリは、予測子データ (X または tbl) の対応する列がカテゴリカル変数であることを意味します。
文字行列行列の各行は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。
文字ベクトルの cell 配列または string 配列配列の各要素は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。
'all'すべての予測子がカテゴリカルです。

既定では、予測子データが table (tbl) 内にあり、この table に論理値、カテゴリカル値、または文字ベクトルの cell 配列が格納されている場合、fitrgp は変数がカテゴリカルであると見なします。予測子データが行列 (X) である場合、fitrgp はすべての予測子が連続的であると見なします。データが行列の場合にカテゴリカル予測子を確認するには、名前と値のペアの引数 'CategoricalPredictors' を使用します。

例: 'CategoricalPredictors','all'

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

データを標準化するためのインジケーター。'Standardize' と論理値から構成されるコンマ区切りのペアとして指定します。

'Standardize',1 を設定した場合、列の平均と標準偏差により予測子データの各列がそれぞれセンタリングおよびスケーリングされます。カテゴリカル予測子について生成されたダミー変数の列に格納されているデータは標準化されません。

例: 'Standardize',1

例: 'Standardize',true

データ型: logical

スパースな方式である回帰変数サブセット ('sr') および完全独立条件 ('fic') の正則化標準偏差。'Regularization' と正のスカラー値から構成されるコンマ区切りのペアとして指定します。

例: 'Regularization',0.2

データ型: double

回帰変数サブセット ('sr') または完全独立条件 ('fic') の近似法を使用したパラメーター推定の対数尤度と勾配を計算する方式。'ComputationMethod' と次のいずれかから構成されるコンマ区切りのペアとして指定します。

  • 'qr' ― QR 分解に基づくアプローチ。このオプションでは、精度が向上します。

  • 'v' ― V 方式に基づくアプローチ。このオプションでは、対数尤度勾配の計算が高速になります。

例: 'ComputationMethod','v'

カーネル (共分散) 関数

すべて折りたたむ

共分散関数の形式。'KernelFunction' と次のいずれかから構成されるコンマ区切りのペアとして指定します。

関数説明
'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 列の行列、KmnKmn(i,j) が Xm(i,:) と Xn(j,:) の間のカーネル積である m 行 n 列のカーネル積の行列です。
thetakfcn についての制約がない r 行 1 列のパラメーター ベクトルです。

カーネル関数についての詳細は、カーネル (共分散) 関数のオプションを参照してください。

例: 'KernelFunction','matern32'

データ型: char | string | function_handle

カーネル パラメーターの初期値。'KernelParameters' とベクトルから構成されるコンマ区切りのペアとして指定します。ベクトルのサイズと値は、名前と値のペアの引数 KernelFunction で指定する共分散間数の形式によって異なります。

'KernelFunction''KernelParameters'
'exponential''squaredexponential''matern32' または 'matern52'2 行 1 列のベクトル phiphi(1) には特性長スケールを、phi(2) には信号標準偏差を格納します。
特性長スケール パラメーターの既定初期値は予測子の標準偏差の平均、信号標準偏差は、応答の標準偏差を 2 の平方根で除算した値です。つまり、
phi = [mean(std(X));std(y)/sqrt(2)] です。
'rationalquadratic'3 行 1 列のベクトル phiphi(1) には特性長スケールを、phi(2) にはスケール混合パラメーターを、phi(3) には信号標準偏差を格納します。
特性長スケール パラメーターの既定初期値は予測子の標準偏差の平均、信号標準偏差は、応答の標準偏差を 2 の平方根で除算した値です。スケール混合パラメーターの既定初期値は 1 です。つまり、
phi = [mean(std(X));1;std(y)/sqrt(2)] です。
'ardexponential''ardsquaredexponential''ardmatern32' または 'ardmatern52'(d+1) 行 1 列のベクトル phiphi(i) には予測子 i の特性長スケールを、phi(d+1) には信号標準偏差を格納します。d は予測子変数の個数です。
特性長スケール パラメーターの既定初期値は予測子の標準偏差、信号標準偏差は、応答の標準偏差を 2 の平方根で除算した値です。つまり、
phi = [std(X)';std(y)/sqrt(2)] です。
'ardrationalquadratic'(d+2) 行 1 列のベクトル phiphi(i) には予測子 i の特性長スケールを、phi(d+1) にはスケール混合パラメーターを、phi(d+2) には信号標準偏差を格納します。
特性長スケール パラメーターの既定初期値は予測子の標準偏差、信号標準偏差は、応答の標準偏差を 2 の平方根で除算した値です。スケール混合パラメーターの既定初期値は 1 です。つまり、
phi = [std(X)';1;std(y)/sqrt(2)] です。
関数ハンドルカスタムなカーネル関数 kfcn の非制約パラメーター ベクトル phi の初期値としての r 行 1 列のベクトル。
KernelFunction が関数ハンドルの場合、カーネル パラメーターの初期値を指定しなければなりません。

カーネル関数についての詳細は、カーネル (共分散) 関数のオプションを参照してください。

例: 'KernelParameters',theta

データ型: double

組み込みカーネル関数を評価するために点間の距離を計算する方式。'DistanceMethod''fast' または 'accurate' から構成されるコンマ区切りのペアとして指定します。fitrgp では、fast オプションを選択した場合は x2+y22*x*yaccurate オプションを選択した場合は (xy)2 として (xy)2 が計算されます。

例: 'DistanceMethod','accurate'

アクティブ セットの選択

すべて折りたたむ

アクティブ セット内の観測値。'ActiveSet' と、1 から n の範囲にある整数から成る m 行 1 列のベクトル (m ≤ n)、または少なくとも 1 つの true 要素が含まれている長さが n の logical ベクトルから構成されるコンマ区切りのペアとして指定します。n は、学習データに含まれている観測値の総数です。

fitrgp では、ActiveSet で指定された観測値を使用して GPR モデルを学習させます。重複する要素をアクティブ セットに含めることはできません。

ActiveSet を指定した場合、次のようになります。

データ型: double | logical

スパースな方式 ('sd''sr' または 'fic') の場合のアクティブ セットのサイズ。'ActiveSetSize' と 整数 m (1 ≤ m ≤ n) から構成されるコンマ区切りのペアとして指定します。n は観測値の数です。

既定値は、FitMethod'sr' または 'fic' の場合は min(1000,n)、それ以外の場合は min(2000,n) です。

例: 'ActiveSetSize',100

データ型: double

アクティブ セット選択法。'ActiveSetMethod' と次のいずれかから構成されるコンマ区切りのペアとして指定します。

メソッド説明
'random'無作為選択
'sgma'スパース グリーディ行列近似
'entropy'微分エントロピーに基づく選択
'likelihood'回帰変数サブセットの対数尤度に基づく選択

('random' を除く) すべてのアクティブ セット選択法で、格納場所として n 行 m 列の行列が必要です。ここで、m はアクティブ セットのサイズ、n は観測値の数です。

例: 'ActiveSetMethod','entropy'

アクティブ セットを選択するためのグリーディな包含における無作為探索セットのサイズ。'RandomSearchSetSize' と整数値から構成されるコンマ区切りのペアとして指定します。

例: 'RandomSearchSetSize',30

データ型: double

アクティブ セットの選択を終了させるための相対許容誤差。'ToleranceActiveset' と正のスカラー値から構成されるコンマ区切りのペアとして指定します。

例: 'ToleranceActiveset',0.0002

データ型: double

ActiveSetMethod'random' ではない場合の、インターリーブ方式によるアクティブ セット選択とパラメーター推定における反復の数。'NumActiveSetRepeats' と整数値から構成されるコンマ区切りのペアとして指定します。

例: 'NumActiveSetRepeats',5

データ型: double

予測

すべて折りたたむ

与えられたパラメーターに対してガウス過程モデルで予測を行うために使用する方式。'PredictMethod' と次のいずれかから構成されるコンマ区切りのペアとして指定します。

メソッド説明
'exact'厳密ガウス過程回帰法。n ≤ 10000 の場合の既定設定です。
'bcd'ブロック座標降下。n > 10000 の場合の既定設定です。
'sd'データ点サブセット近似。
'sr'回帰変数サブセット近似。
'fic'完全独立条件近似。

例: 'PredictMethod','bcd'

ブロック座標降下法 ('bcd') のブロック サイズ。'BlockSizeBCD' と 1 から n の範囲にある整数から構成されるコンマ区切りのペアとして指定します。n は観測値の数です。

例: 'BlockSizeBCD',1500

データ型: double

ブロック座標降下法 ('bcd') のグリーディ選択の数。'NumGreedyBCD' と 1 から BlockSizeBCD の範囲にある整数から構成されるコンマ区切りのペアとして指定します。

例: 'NumGreedyBCD',150

データ型: double

ブロック座標降下法 ('bcd') の反復を終了させるための勾配ノルムの相対許容誤差。'ToleranceBCD' と正のスカラーから構成されるコンマ区切りのペアとして指定します。

例: 'ToleranceBCD',0.002

データ型: double

ブロック座標降下法 ('bcd') の反復を終了させるためのステップ サイズの絶対許容誤差。'StepToleranceBCD' と正のスカラーから構成されるコンマ区切りのペアとして指定します。

例: 'StepToleranceBCD',0.002

データ型: double

ブロック座標降下法 ('bcd') の最大反復数。'IterationLimitBCD' と整数値から構成されるコンマ区切りのペアとして指定します。

例: 'IterationLimitBCD',10000

データ型: double

最適化

すべて折りたたむ

パラメーター推定に使用するオプティマイザー。'Optimizer' と次の表のいずれかの値から構成されるコンマ区切りのペアとして指定します。

説明
'quasinewton'ヘッシアンに対する、密で対称的なランク 1 に基づく準ニュートン近似
'lbfgs'ヘッシアンに対する、LBFGS に基づく準ニュートン近似
'fminsearch'Lagarias らのシンプレックス探索法 [5] を使用する、制約がない非線形最適化
'fminunc'制約がない非線形最適化 (Optimization Toolbox™ のライセンスが必要)
'fmincon'制約がある非線形最適化 (Optimization Toolbox のライセンスが必要)

オプティマイザーの詳細については、アルゴリズムを参照してください。

例: 'Optimizer','fmincon'

名前と値のペアの引数 Optimizer を使用して選択されるオプティマイザ―のオプション。'OptimizerOptions' と、optimsetstatset('fitrgp') または optimoptions により作成された構造体またはオブジェクトから構成されるコンマ区切りのペアとして指定します。

オプティマイザーオプティマイザ― オプションの作成に使用
'fminsearch'optimset (構造体)
'quasinewton' または 'lbfgs'statset('fitrgp') (構造体)
'fminunc' または 'fmincon'optimoptions (オブジェクト)

既定のオプションは、オプティマイザ―のタイプによって異なります。

例: 'OptimizerOptions',opt

初期ステップ サイズ。'InitialStepSize' と正の実数スカラーまたは 'auto' から構成されるコンマ区切りのペアとして指定します。

'InitialStepSize' は、オプティマイザーが 'quasinewton' または 'lbfgs' である場合の最初の最適化ステップにおける近似値の絶対値の最大値です。初期ステップ サイズにより、最適化におけるヘッシアンの初期近似を決定できます。

既定では、fitrgp はヘッシアンの初期近似の決定に初期ステップ サイズを使用しません。初期ステップ サイズを使用するには、名前と値のペアの引数 'InitialStepSize' の値を設定するか、'InitialStepSize','auto' を指定して fitrgp に値を自動的に決定させます。'auto' の詳細については、アルゴリズムを参照してください。

例: 'InitialStepSize','auto'

交差検証

すべて折りたたむ

交差検証のインジケーター。'CrossVal''off' または 'on' のいずれかから構成されるコンマ区切りのペアとして指定します。'on' の場合、fitrgp は 10 分割で交差検証した GPR モデルを返します。

名前と値のペアの引数 KFoldHoldoutLeaveout または CVPartition のいずれかを使用すると、既定の交差検証の設定を変更できます。これらの名前と値のペアの引数は、一度に 1 つだけ使用できます。

代替方法として、モデルに対して crossval メソッドを使用できます。

例: 'CrossVal','on'

層化 k 分割交差検証用の無作為な分割。'CVPartition'cvpartition オブジェクトから構成されるコンマ区切りのペアとして指定します。

例: 'CVPartition',cvp では、cvp によって定義される無作為な分割を使用します。

CVPartition を指定する場合、HoldoutKFold または Leaveout のいずれも指定できません。

ホールドアウト検定で検証に使用するデータの比率。'Holdout' と 0 から 1 の範囲にあるスカラー値から構成されるコンマ区切りのペアとして指定します。'Holdout',p を指定すると、以下が行われます。
1. データの約 p*100% を検証データとして無作為に予約し、残りのデータを使用してモデルに学習をさせる。
2. コンパクトな学習済みモデルを cvgprMdl.Trained に格納する。

例: 'Holdout', 0.3 では、データの 30% を検証に、70% を学習に使用します。

Holdout を指定する場合、CVPartitionKFold または Leaveout のいずれも指定できません。

データ型: double

交差検証 GPR モデルで使用する分割の数。'KFold' と正の整数値から構成されるコンマ区切りのペアとして指定します。KFold は 1 より大きくなければなりません。'KFold',k を指定した場合、以下が行われます。
1. データを k 個のセットに無作為に分割する。
2.各セットについて、そのセットを検定データとして予約し、他の k - 1 個のセットを使用してモデルを学習させる。
3. k 個のコンパクトな学習済みモデルを cvgprMdl.Trained 内の k 行 1 列の cell 配列のセルに格納する。

例: 'KFold',5 では、5 つの分割を交差検証で使用します。つまり、各分割について、その分割を検定データとして使用し、残りの 4 つの分割でモデルを学習させます。

KFold を指定する場合、CVPartitionHoldout または Leaveout のいずれも指定できません。

データ型: double

leave-one-out 交差検証のインジケーター。'Leaveout''off' または 'on' のいずれかから構成されるコンマ区切りのペアとして指定します。

'Leaveout','on' を指定した場合、n 個の観測値のそれぞれについて以下が行われます。
1. その観測値を検定データとして予約し、他の n - 1 個の観測値を使用してモデルを学習させる。
2.コンパクトな学習済みモデルを n 行 1 列の cell 配列 cvgprMdl.Trained のセルに格納する。

例: 'Leaveout','on'

Leaveout を指定する場合、CVPartitionHoldout または KFold のいずれも指定できません。

ハイパーパラメーターの最適化

すべて折りたたむ

最適化するパラメーター。'OptimizeHyperparameters' と次のいずれかから構成されるコンマ区切りのペアとして指定します。

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

  • 'auto'{'Sigma'} を使用します。

  • 'all' — すべての使用可能パラメーターを最適化します。{'BasisFunction','KernelFunction','KernelScale','Sigma','Standardize'} と同じです。

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

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

最適化では、パラメーターを変化させることにより、fitrgp の交差検証損失 (誤差) を最小化しようとします。(各種の状況における) 交差検証損失の詳細については、分類損失を参照してください。交差検証のタイプおよびその他の最適化の側面を制御するには、名前と値のペア HyperparameterOptimizationOptions を使用します。

メモ

'OptimizeHyperparameters' の値は、他の名前と値のペアの引数を使用して設定した値より優先されます。たとえば、'OptimizeHyperparameters''auto' に設定すると、'auto' の値が適用されます。

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

  • BasisFunctionfitrgp は、'constant''none''linear' および 'pureQuadratic' で探索します。

  • KernelFunctionfitrgp は、'ardexponential''ardmatern32''ardmatern52''ardrationalquadratic''ardsquaredexponential''exponential''matern32''matern52''rationalquadratic' および 'squaredexponential' で探索します。

  • KernelScalefitrgp は、引数 KernelParameters を使用してカーネル スケール パラメーターの値を指定します。この値は、あてはめ時に変化しません。この場合、すべての入力次元は KernelScale の値が同じになるように制約されます。fitrgp は範囲 [1e-3*MaxPredictorRange,MaxPredictorRange] の実数値を探索します。ここで

    MaxPredictorRange = max(max(X) - min(X)) です。

    どの ARD カーネルについても KernelScale を最適化することはできません。

  • Sigmafitrgp は範囲 [1e-4, max(1e-3,10*ResponseStd)] の実数値を探索します。ここで

    ResponseStd = std(y) です。

    内部的に、fitrgp は名前と値のペア ConstantSigmatrue に設定するので、あてはめ時に Sigma の値は定数になります。

  • Standardizefitrgptruefalse で探索します。

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

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

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

既定では、コマンド ラインに反復表示が表示され、最適化のハイパーパラメーターの個数に従ってプロットが表示されます。最適化とプロットにおける目的関数は、回帰の場合は log(1 + 交差検証損失)、分類の場合は誤分類率です。反復表示を制御するには、名前と値のペアの引数 'HyperparameterOptimizationOptions'Verbose フィールドを設定します。プロットを制御するには、名前と値のペアの引数 'HyperparameterOptimizationOptions'ShowPlots フィールドを設定します。

たとえば、GPR 回帰の最適化を参照してください。

例: 'auto'

最適化のオプション。'HyperparameterOptimizationOptions' と構造体から構成されるコンマ区切りのペアとして指定します。この引数を指定すると、名前と値のペアの引数 OptimizeHyperparameters の効果が変化します。この構造体のフィールドは、すべてオプションです。

フィールド名既定の設定
Optimizer
  • 'bayesopt' — ベイズ最適化を使用。内部的には bayesopt が呼び出されます。

  • 'gridsearch' — 次元ごとに NumGridDivisions の値があるグリッド探索を使用。

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

'gridsearch' では、グリッドからの一様な非復元抽出により、無作為な順序で探索します。最適化後、sortrows(Mdl.HyperparameterOptimizationResults) コマンドを使用してグリッド順のテーブルを取得できます。

'bayesopt'
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目的関数評価の最大数。'bayesopt' または 'randomsearch' の場合は 30'gridsearch' の場合はグリッド全体
MaxTime

制限時間。正の実数を指定します。制限時間の単位は、tictoc によって測定される秒です。MaxTime は関数評価を中断させないため、実行時間が MaxTime を超える可能性があります。

Inf
NumGridDivisions'gridsearch' における各次元の値の個数。値は、各次元の値の個数を表す正の整数のベクトル、またはすべての次元に適用されるスカラーが可能です。カテゴリカル変数の場合、このフィールドは無視されます。10
ShowPlotsプロットを表示するかどうかを示す論理値。true の場合、最良の目的関数の値が反復回数に対してプロットされます。1 つまたは 2 つの最適化パラメーターがあり、Optimizer'bayesopt' である場合、ShowPlots はパラメーターに対する目的関数のモデルのプロットも行います。true
SaveIntermediateResultsOptimizer'bayesopt' である場合に結果を保存するかどうかを示す論理値。true の場合、'BayesoptResults' という名前のワークスペース変数が反復ごとに上書きされます。この変数は BayesianOptimization オブジェクトです。false
Verbose

コマンド ラインへの表示。

  • 0 — 反復表示なし

  • 1 — 反復表示あり

  • 2 — 追加情報付きで反復表示あり

詳細については、bayesopt の名前と値のペアの引数 Verbose を参照してください。

1
UseParallelベイズ最適化を並列実行するかどうかを示す論理値。並列実行には Parallel Computing Toolbox™ が必要です。詳細については、並列ベイズ最適化を参照してください。false
Repartition

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

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

false
以下の 3 つのフィールド名は 1 つだけ使用できます。
CVPartitioncvpartition によって作成される cvpartition オブジェクト。交差検証フィールドが指定されていない場合 'Kfold',5
Holdoutホールドアウトの比率を表す範囲 (0,1) のスカラー。
Kfold1 より大きい整数。

例: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)

データ型: 構造体

その他

すべて折りたたむ

予測子変数名。'PredictorNames' と一意な名前の 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' を使用して学習に使用する予測子変数を選択できます。つまり、fitrgpPredictorNames の予測子変数と応答のみを学習で使用します。

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

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

    • 'PredictorNames'formula のいずれか一方のみを使用して学習用の予測子を指定することをお勧めします。

例: 'PredictorNames',{'PedalLength','PedalWidth'}

データ型: string | cell

応答変数名。'ResponseName' と文字ベクトルまたは string スカラーから構成されるコンマ区切りのペアとして指定します。

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

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

例: 'ResponseName','response'

データ型: char | string

詳細レベル。'Verbose' と次のいずれかから構成されるコンマ区切りのペアとして指定します。

  • 0 ― fitrgp は、アクティブ セットの選択とブロック座標降下に関連する診断メッセージを表示しませんが、OptimizerOptions'Display' の値によってはパラメーター推定に関連するメッセージを表示します。

  • 1 ― fitrgp は、パラメーター推定、アクティブ セットの選択およびブロック座標降下に関連する診断メッセージを繰り返し表示します。

例: 'Verbose',1

メガバイト (MB) 単位のキャッシュ サイズ。'CacheSize' と正のスカラーから構成されるコンマ区切りのペアとして指定します。キャッシュ サイズは、近似とアクティブ セット選択に必要とされるサイズに追加して使用可能な予備メモリのサイズです。fitrgp は、CacheSize を使用して以下を行います。

  • パラメーター推定時の点間距離キャッシュ要否の決定。

  • ブロック座標降下法および予測実施における行列ベクトル積の計算方法の決定。

例: 'CacheSize',2000

データ型: double

出力引数

すべて折りたたむ

ガウス過程回帰モデル。RegressionGP または RegressionPartitionedModel オブジェクトとして返されます。

  • 交差検証を行った場合、つまり、名前と値のペア 'Crossval''KFold''Holdout''Leaveout' または 'CVPartition' を使用した場合、gprMdlRegressionPartitionedModel オブジェクトになります。RegressionPartitionedModel オブジェクトは、predict による予測には使用できません。このオブジェクトのメソッドとプロパティについての詳細は、RegressionPartitionedModel を参照してください。

  • 交差検証を行わなかった場合、gprMdlRegressionGP オブジェクトになります。このオブジェクトは、predict メソッドによる予測に使用できます。このオブジェクトのメソッドとプロパティについての詳細は、RegressionGP を参照してください。

詳細

すべて折りたたむ

アクティブ セットの選択とパラメーターの推定

データ サブセット近似法、回帰変数サブセット近似法または完全独立条件近似法の場合 (FitMethod'sd''sr' または 'fic' に等しい場合) にアクティブ セットを指定しないと、fitrgp は一連の反復でアクティブ セットを選択してパラメーター推定を計算します。

1 回目の反復では、ベクトル η0 = [β000] の初期パラメーター値を使用して、アクティブ セット A1 を選択します。η0 (初期値) と A1 を使用して新しいパラメーター推定 η1を計算することにより、GPR の周辺対数尤度または近似を最大化します。次に、η1 と A1 を使用して、新しい対数尤度 L1 を計算します。

2 回目の反復では、η1 のパラメーター値を使用して、アクティブ セット A2 を選択します。次に、η1 (初期値) と A2 を使用して、GPR の周辺対数尤度または近似を最大化し、新しいパラメーター値 η2 を推定します。そして、η2 と A2 を使用して、新しい対数尤度値 L2 を計算します。

次の表は、反復と、各反復で計算されるものをまとめています。

反復数アクティブ セットパラメーター ベクトル対数尤度
1A1η1L1
2A2η2L2
3A3η3L3

指定した回数の繰り返しについて、同様に反復処理が行われます。アクティブ セット選択の反復回数は、名前と値のペアの引数 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' の値は、信号標準偏差 σf と特性長スケール σl の初期値から構成されるベクトルです。関数 fitrgp は、これらの値を使用してカーネル パラメーターを決定します。同様に、名前と値のペアの引数 'Sigma' にはノイズ標準偏差 σ の初期値を設定します。

  • 最適化時に、fitrgp はノイズ標準偏差とカーネル パラメーターの初期値を使用して、制約がない初期パラメーター値のベクトル η0 を作成します。

  • fitrgp は、名前と値のペアの引数 'Beta' によって指定された明示的な基底係数 βθσ2 の推定値から解析的に決定します。したがって、fitrgp が数値最適化を初期化するときに はベクトル η0 に現れません。

    メモ

    GPR モデルのパラメーター推定を指定しなかった場合、fitrgp は名前と値のペアの引数 'Beta' の値と他の初期パラメーター値を既知の GPR パラメーター値として使用します (Beta を参照)。他のすべてのケースでは、引数 'Beta' の値は目的関数から解析的に最適化されます。

  • 準ニュートン オプティマイザーでは、密で対称的なランク 1 に基づく (SR1) 準ニュートン近似による信頼領域法をヘッシアンに対して使用しますが、LBFGS オプティマイザーでは、メモリ制限 Broyden-Fletcher-Goldfarb-Shanno (LBFGS) 準ニュートン近似による標準的な直線探索法をヘッシアンに対して使用します。Nocedal および Wright [6] を参照してください。

  • 名前と値のペアの引数 'InitialStepSize''auto' に設定した場合、fitrgps0=0.5η0+0.1 を使用して初期ステップ サイズ s0 を決定します。

    s0 は初期ステップ ベクトル、η0 は制約がない初期パラメーター値のベクトルです。

  • 最適化時に、fitrgp は初期ステップ サイズ s0 を次のように使用します。

    'Optimizer','quasinewton' と初期ステップ サイズを使用する場合、ヘッシアンの初期近似は g0s0I になります。

    'Optimizer','lbfgs' と初期ステップ サイズを使用する場合、逆ヘッシアンの初期近似は s0g0I になります。

    g0 は初期勾配ベクトル、I は単位行列です。

参照

[1] Warwick J. N., T. L. Sellers, S. R. Talbot, A. J. Cawthorn, and W. B. Ford. "The Population Biology of Abalone (_Haliotis_ species) in Tasmania. I. Blacklip Abalone (_H. rubra_) from the North Coast and Islands of Bass Strait." Sea Fisheries Division, Technical Report No. 48 (ISSN 1034-3288), 1994.

[2] S. Waugh. "Extending and Benchmarking Cascade-Correlation", PhD Thesis. Computer Science Department, University of Tasmania, 1995.

[3] Lichman, M. UCI Machine Learning Repository, Irvine, CA: University of California, School of Information and Computer Science, 2013. http://archive.ics.uci.edu/ml.

[4] Rasmussen, C. E. and C. K. I. Williams. Gaussian Processes for Machine Learning. MIT Press. Cambridge, Massachusetts, 2006.

[5] 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.

[6] Nocedal, J. and S. J. Wright. Numerical Optimization, Second Edition. Springer Series in Operations Research, Springer Verlag, 2006.

拡張機能

R2015b で導入