ドキュメンテーション

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

fitrkernel

ランダムな特徴量拡張を使用してガウス カーネル回帰モデルをあてはめる

説明

fitrkernel は、非線形回帰用のガウス カーネル回帰モデルの学習または交差検証を行います。fitrkernel は、大規模な学習セットが含まれているビッグ データ事例に使用する方が現実的ですが、メモリに収まる小規模なデータセットにも適用できます。

fitrkernel は、低次元空間のデータを高次元空間にマッピングしてから、正則化された目的関数を最小化することによって高次元空間で線形モデルをあてはめます。高次元空間で線形モデルを取得することは、低次元空間におけるモデルへのガウス カーネルの適用と等価です。使用可能な線形回帰モデルには、正則化されたサポート ベクター マシン (SVM) と最小二乗回帰モデルがあります。

インメモリ データに対して非線形 SVM 回帰モデルに学習をさせる方法については、fitrsvm を参照してください。

Mdl = fitrkernel(X,Y) は、X 内の予測子データと Y 内の対応する応答を使用して学習をさせたコンパクトなガウス カーネル回帰モデルを返します。

Mdl = fitrkernel(X,Y,Name,Value) は、1 つ以上の名前と値のペアの引数で指定された追加オプションを使用して、カーネル回帰モデルを返します。たとえば、最小二乗回帰の実装、拡張空間の次元数の指定、交差検証オプションの指定を行うことができます。

[Mdl,FitInfo] = fitrkernel(___) は、前の構文の入力引数のいずれかを使用して、あてはめの情報も構造体配列 FitInfo に返します。交差検証済みモデルについて FitInfo を要求することはできません。

[Mdl,FitInfo,HyperparameterOptimizationResults] = fitrkernel(___) は、名前と値のペアの引数 'OptimizeHyperparameters' を使用してハイパーパラメーターを最適化する場合に、ハイパーパラメーター最適化の結果も返します。

すべて折りたたむ

SVM を使用して、tall 配列についてカーネル回帰モデルに学習をさせます。

データがあるフォルダーの場所を参照するデータストアを作成します。データは、単一のファイル、ファイルの集まり、またはフォルダー全体のどれに含まれていてもかまいません。datastore によって NaN 値に置き換えられるようにするため、'NA' 値を欠損データとして扱います。使用する変数のサブセットを選択します。データストアの先頭に tall table を作成します。

varnames = {'ArrTime','DepTime','ActualElapsedTime'};
ds = datastore('airlinesmall.csv','TreatAsMissing','NA',...
    'SelectedVariableNames',varnames);
t = tall(ds);

予測子変数 (X) として DepTimeArrTime を、応答変数 (Y) として ActualElapsedTime を指定します。ArrTimeDepTime より遅い観測値を選択します。

daytime = t.ArrTime>t.DepTime;
Y = t.ActualElapsedTime(daytime);     % Response data
X = t{daytime,{'DepTime' 'ArrTime'}}; % Predictor data

予測子変数を標準化します。

Z = zscore(X); % Standardize the data

標準化された予測子を使用して、既定のガウス カーネル回帰モデルに学習をさせます。あてはめの要約を抽出して、最適化アルゴリズムによりモデルがどの程度適切にデータにあてはめられたかを判断します。

[Mdl,FitInfo] = fitrkernel(Z,Y)
Found 6 chunks.
|=========================================================================
| Solver | Iteration  /  |   Objective   |   Gradient    | Beta relative |
|        | Data Pass     |               |   magnitude   |    change     |
|=========================================================================
|   INIT |     0 /     1 |  4.335200e+01 |  9.821993e-02 |           NaN |
|  LBFGS |     0 /     2 |  3.693870e+01 |  1.566041e-02 |  9.988238e-01 |
|  LBFGS |     1 /     3 |  3.692143e+01 |  3.030550e-02 |  1.352488e-03 |
|  LBFGS |     2 /     4 |  3.689521e+01 |  2.919252e-02 |  1.137336e-03 |
|  LBFGS |     2 /     5 |  3.686922e+01 |  2.801905e-02 |  2.277224e-03 |
|  LBFGS |     2 /     6 |  3.681793e+01 |  2.615365e-02 |  4.564688e-03 |
|  LBFGS |     2 /     7 |  3.671782e+01 |  2.276596e-02 |  9.170612e-03 |
|  LBFGS |     2 /     8 |  3.652813e+01 |  1.868733e-02 |  1.850839e-02 |
|  LBFGS |     3 /     9 |  3.442961e+01 |  3.260732e-02 |  2.030226e-01 |
|  LBFGS |     4 /    10 |  3.473328e+01 |  8.506865e-02 |  3.309396e-01 |
|  LBFGS |     4 /    11 |  3.378744e+01 |  5.473648e-02 |  1.428247e-01 |
|  LBFGS |     5 /    12 |  3.329728e+01 |  3.922448e-02 |  1.026073e-01 |
|  LBFGS |     6 /    13 |  3.309615e+01 |  1.551459e-02 |  6.118966e-02 |
|  LBFGS |     7 /    14 |  3.300400e+01 |  1.759430e-02 |  1.918912e-02 |
|  LBFGS |     8 /    15 |  3.277892e+01 |  3.155320e-02 |  4.781893e-02 |
|  LBFGS |     9 /    16 |  3.255352e+01 |  3.435953e-02 |  4.200697e-02 |
|  LBFGS |    10 /    17 |  3.207945e+01 |  6.192847e-02 |  2.161540e-01 |
|  LBFGS |    11 /    18 |  3.171391e+01 |  3.185452e-02 |  1.204747e-01 |
|  LBFGS |    12 /    19 |  3.155433e+01 |  1.183853e-02 |  5.837098e-02 |
|  LBFGS |    13 /    20 |  3.149625e+01 |  1.132499e-02 |  2.169556e-02 |
|=========================================================================
| Solver | Iteration  /  |   Objective   |   Gradient    | Beta relative |
|        | Data Pass     |               |   magnitude   |    change     |
|=========================================================================
|  LBFGS |    14 /    21 |  3.136724e+01 |  1.478355e-02 |  3.132871e-02 |
|  LBFGS |    15 /    22 |  3.115575e+01 |  1.461357e-02 |  7.221907e-02 |
|  LBFGS |    16 /    23 |  3.091292e+01 |  1.900119e-02 |  1.237602e-01 |
|  LBFGS |    17 /    24 |  3.076649e+01 |  3.469328e-02 |  1.664433e-01 |
|  LBFGS |    18 /    25 |  3.104221e+01 |  1.341798e-01 |  2.831585e-02 |
|  LBFGS |    18 /    26 |  3.076703e+01 |  4.929652e-02 |  1.414956e-02 |
|  LBFGS |    18 /    27 |  3.073332e+01 |  1.434614e-02 |  7.072158e-03 |
|  LBFGS |    19 /    28 |  3.067248e+01 |  9.931353e-03 |  2.438284e-02 |
|  LBFGS |    20 /    29 |  3.063153e+01 |  6.781994e-03 |  1.606731e-02 |
|========================================================================|
Mdl = 
  RegressionKernel
            PredictorNames: {'x1'  'x2'}
              ResponseName: 'Y'
                   Learner: 'svm'
    NumExpansionDimensions: 64
               KernelScale: 1
                    Lambda: 8.5385e-06
             BoxConstraint: 1
                   Epsilon: 5.9303


  Properties, Methods

FitInfo = struct with fields:
                  Solver: 'LBFGS-tall'
            LossFunction: 'epsiloninsensitive'
                  Lambda: 8.5385e-06
           BetaTolerance: 1.0000e-03
       GradientTolerance: 1.0000e-05
          ObjectiveValue: 30.6315
       GradientMagnitude: 0.0068
    RelativeChangeInBeta: 0.0161
                 FitTime: 77.1910
                 History: [1×1 struct]

MdlRegressionKernel モデルです。回帰誤差を調べるには、Mdl と学習データまたは新しいデータを関数 loss に渡すことができます。または、Mdl と新しい予測子データを関数 predict に渡して、新しい観測値の応答を予測することができます。また、Mdl と学習データを関数 resume に渡して学習を続行することもできます。

FitInfo は、最適化情報が格納されている構造体配列です。最適化終了時の結果が満足できるものであるかどうかを判断するには、FitInfo を使用します。

精度を向上させるため、fitrkernel の名前と値のペアの引数を使用して、最適化反復の最大回数 ('IterationLimit') を増やしたり、許容誤差の値 ('BetaTolerance' および 'GradientTolerance') を小さくすることができます。このようにすると、FitInfoObjectiveValueRelativeChangeInBeta などの尺度が向上します。名前と値のペアの引数 'OptimizeHyperparameters' を使用してモデル パラメーターを最適化することもできます。

carbig データセットを読み込みます。

load carbig

予測子変数 (X) と応答変数 (Y) を指定します。

X = [Acceleration,Cylinders,Displacement,Horsepower,Weight];
Y = MPG;

配列 X および Y から、それぞれの配列で NaN 値が含まれている行を削除します。NaN 値が含まれている行を削除してからデータを fitrkernel に渡すと、学習が高速化され、メモリ使用量が少なくなります。

R = rmmissing([X Y]); % Data with missing entries removed
X = R(:,1:5); 
Y = R(:,end); 

予測子変数を標準化します。

Z = zscore(X);

5 分割の交差検証を使用してカーネル回帰モデルを交差検証します。

Mdl = fitrkernel(Z,Y,'Kfold',5)
Mdl = 
  classreg.learning.partition.RegressionPartitionedKernel
    CrossValidatedModel: 'Kernel'
           ResponseName: 'Y'
        NumObservations: 392
                  KFold: 5
              Partition: [1x1 cvpartition]
      ResponseTransform: 'none'


  Properties, Methods

numel(Mdl.Trained)
ans = 5

MdlRegressionPartitionedKernel モデルです。fitrkernel は 5 分割交差検証を実施するので、学習分割 (分割内) 観測値に対して学習をさせる 5 個の RegressionKernel モデルが Mdl に格納されます。

各分割の交差検証損失 (平均二乗誤差) を調べます。

kfoldLoss(Mdl,'mode','individual')
ans = 5×1

   13.0610
   14.0975
   24.0104
   21.1223
   24.3979

名前と値のペアの引数 'OptimizeHyperparameters' を使用して、自動的にハイパーパラメーターを最適化します。

carbig データセットを読み込みます。

load carbig

予測子変数 (X) と応答変数 (Y) を指定します。

X = [Acceleration,Cylinders,Displacement,Horsepower,Weight];
Y = MPG;

配列 X および Y から、それぞれの配列で NaN 値が含まれている行を削除します。NaN 値が含まれている行を削除してからデータを fitrkernel に渡すと、学習が高速化され、メモリ使用量が少なくなります。

R = rmmissing([X Y]); % Data with missing entries removed
X = R(:,1:5); 
Y = R(:,end); 

予測子変数を標準化します。

Z = zscore(X);

自動的なハイパーパラメーター最適化を使用して、5 分割交差検証損失を最小化するハイパーパラメーターを求めます。名前と値のペアの引数 'KernelScale''Lambda' および 'Epsilon' の最適な値を fitrkernel で求めるため、'OptimizeHyperparameters' として 'auto' を指定します。再現性を得るために、乱数シードを設定し、'expected-improvement-plus' の獲得関数を使用します。

rng('default')
[Mdl,FitInfo,HyperparameterOptimizationResults] = fitrkernel(Z,Y,'OptimizeHyperparameters','auto',...
    'HyperparameterOptimizationOptions',struct('AcquisitionFunctionName','expected-improvement-plus'))

|====================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |  KernelScale |       Lambda |      Epsilon |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |
|====================================================================================================================|
|    1 | Best   |      4.8295 |      7.5385 |      4.8295 |      4.8295 |     0.011518 |   6.8068e-05 |      0.95918 |
|    2 | Best   |      4.1488 |     0.54274 |      4.1488 |      4.1855 |       477.57 |     0.066115 |     0.091828 |
|    3 | Accept |      4.1521 |     0.36136 |      4.1488 |      4.1747 |    0.0080478 |    0.0052867 |       520.84 |
|    4 | Accept |      4.1506 |     0.55096 |      4.1488 |      4.1488 |      0.10935 |      0.35931 |     0.013372 |
|    5 | Best   |      4.1446 |      0.6407 |      4.1446 |      4.1446 |       326.29 |       2.5457 |      0.22475 |
|    6 | Accept |      4.1521 |     0.30501 |      4.1446 |      4.1447 |       719.11 |      0.19478 |       881.84 |
|    7 | Accept |      4.1501 |     0.43756 |      4.1446 |      4.1461 |     0.052426 |       2.5402 |     0.051319 |
|    8 | Accept |      4.1521 |     0.39821 |      4.1446 |      4.1447 |       990.71 |     0.014203 |       702.34 |
|    9 | Accept |      4.1521 |      0.7237 |      4.1446 |      4.1465 |       415.85 |     0.054602 |       81.005 |
|   10 | Accept |      4.1454 |     0.76063 |      4.1446 |      4.1455 |       972.49 |       1.1601 |       1.8715 |
|   11 | Accept |      4.1495 |     0.61144 |      4.1446 |      4.1473 |       121.79 |       1.4077 |     0.061055 |
|   12 | Accept |      4.1521 |     0.41885 |      4.1446 |      4.1474 |       985.81 |      0.83297 |       213.45 |
|   13 | Best   |      4.1374 |     0.58669 |      4.1374 |      4.1441 |       167.34 |       2.5497 |       4.8997 |
|   14 | Accept |      4.1434 |     0.29983 |      4.1374 |      4.1437 |       74.527 |         2.55 |       6.1044 |
|   15 | Accept |      4.1402 |     0.28464 |      4.1374 |      4.1407 |       877.17 |       2.5391 |       2.2888 |
|   16 | Accept |      4.1436 |     0.35069 |      4.1374 |      4.1412 |    0.0010354 |     0.017613 |      0.11811 |
|   17 | Best   |      4.1346 |     0.38015 |      4.1346 |      4.1375 |    0.0010362 |     0.010401 |       8.9719 |
|   18 | Accept |      4.1521 |     0.25429 |      4.1346 |      4.1422 |    0.0010467 |    0.0094817 |       563.96 |
|   19 | Accept |      4.1508 |      0.3722 |      4.1346 |      4.1367 |       760.12 |    0.0079557 |     0.009087 |
|   20 | Accept |      4.1435 |     0.74225 |      4.1346 |       4.143 |     0.020647 |    0.0089063 |       2.3699 |
|====================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |  KernelScale |       Lambda |      Epsilon |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |
|====================================================================================================================|
|   21 | Best   |      3.7172 |      1.2313 |      3.7172 |      3.7174 |       818.08 |   2.5529e-06 |       2.1058 |
|   22 | Accept |      4.1521 |      0.4137 |      3.7172 |      3.7177 |     0.006272 |   2.5598e-06 |       93.063 |
|   23 | Accept |      4.0567 |      1.0034 |      3.7172 |      3.7176 |       940.43 |   2.6941e-06 |      0.12016 |
|   24 | Best   |      2.8979 |      7.6196 |      2.8979 |      2.8979 |       37.141 |   2.5677e-06 |         2.71 |
|   25 | Accept |      4.1521 |     0.47654 |      2.8979 |       2.898 |       13.817 |   2.5755e-06 |       863.91 |
|   26 | Best   |       2.795 |      3.2849 |       2.795 |      2.7953 |       20.022 |   2.6098e-06 |       1.6561 |
|   27 | Accept |      2.8284 |      3.8849 |       2.795 |      2.7956 |       17.252 |   2.7719e-06 |      0.82777 |
|   28 | Best   |      2.7896 |      1.6324 |      2.7896 |      2.7898 |       11.432 |    7.621e-06 |        2.094 |
|   29 | Accept |       2.819 |      2.6041 |      2.7896 |      2.7899 |       8.5133 |   2.5872e-06 |       2.0567 |
|   30 | Accept |      2.8061 |      1.2659 |      2.7896 |      2.7968 |       15.823 |   6.1956e-06 |       2.0085 |

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

Best observed feasible point:
    KernelScale     Lambda      Epsilon
    ___________    _________    _______

      11.432       7.621e-06     2.094 

Observed objective function value = 2.7896
Estimated objective function value = 2.7968
Function evaluation time = 1.6324

Best estimated feasible point (according to models):
    KernelScale      Lambda      Epsilon
    ___________    __________    _______

      15.823       6.1956e-06    2.0085 

Estimated objective function value = 2.7968
Estimated function evaluation time = 2.3349
Mdl = 
  RegressionKernel
              ResponseName: 'Y'
                   Learner: 'svm'
    NumExpansionDimensions: 256
               KernelScale: 15.8229
                    Lambda: 6.1956e-06
             BoxConstraint: 411.7488
                   Epsilon: 2.0085


  Properties, Methods

FitInfo = struct with fields:
                  Solver: 'LBFGS-fast'
            LossFunction: 'epsiloninsensitive'
                  Lambda: 6.1956e-06
           BetaTolerance: 1.0000e-04
       GradientTolerance: 1.0000e-06
          ObjectiveValue: 1.3582
       GradientMagnitude: 0.0051
    RelativeChangeInBeta: 5.3944e-05
                 FitTime: 0.2646
                 History: []

HyperparameterOptimizationResults = 
  BayesianOptimization with properties:

                      ObjectiveFcn: @createObjFcn/inMemoryObjFcn
              VariableDescriptions: [5x1 optimizableVariable]
                           Options: [1x1 struct]
                      MinObjective: 2.7896
                   XAtMinObjective: [1x3 table]
             MinEstimatedObjective: 2.7968
          XAtMinEstimatedObjective: [1x3 table]
           NumObjectiveEvaluations: 30
                  TotalElapsedTime: 109.0396
                         NextPoint: [1x3 table]
                            XTrace: [30x3 table]
                    ObjectiveTrace: [30x1 double]
                  ConstraintsTrace: []
                     UserDataTrace: {30x1 cell}
      ObjectiveEvaluationTimeTrace: [30x1 double]
                IterationTimeTrace: [30x1 double]
                        ErrorTrace: [30x1 double]
                  FeasibilityTrace: [30x1 logical]
       FeasibilityProbabilityTrace: [30x1 double]
               IndexOfMinimumTrace: [30x1 double]
             ObjectiveMinimumTrace: [30x1 double]
    EstimatedObjectiveMinimumTrace: [30x1 double]

ビッグ データの場合、最適化手順に時間がかかる可能性があります。最適化手順を実行するにはデータセットが大きすぎる場合、データの一部だけを使用してパラメーターの最適化を試すことができます。関数 datasample を使用し、'Replace','false' を指定して、データを非復元抽出します。

入力引数

すべて折りたたむ

回帰モデルをあてはめる対象となる予測子データ。n 行 p 列の数値行列を指定します。n は観測値の個数、p は予測子変数の個数です。

Y の長さと X の観測値数は同じでなければなりません。

データ型: single | double

応答データ。n 次元の数値ベクトルを指定します。Y の長さと X の観測値数は同じでなければなりません。

データ型: single | double

メモ

fitrkernel は欠損観測値 (次のいずれかの特徴をもつ観測値) を削除します。

  • 応答 (Y) 内の NaN 要素

  • 予測子の観測値 (X の行) 内の少なくとも 1 つの NaN

  • 重み ('Weights') が NaN 値または 0

名前と値のペアの引数

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

例: Mdl = fitrkernel(X,Y,'Learner','leastsquares','NumExpansionDimensions',2^15,'KernelScale','auto') は、ヒューリスティックな手順により選択されたカーネル スケール パラメーターによる特徴量拡張を使用して、予測子データを 2^15 次元空間にマッピングしてから最小二乗回帰を実施します。

メモ

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

カーネル回帰のオプション

すべて折りたたむ

ボックス制約'BoxConstraint' と正のスカラーで構成されるコンマ区切りペアとして指定します。

この引数は、'Learner''svm' (既定値) であり、正則化項の強度 'Lambda' の値を指定しなかった場合のみ有効です。ボックス制約 (C) と正則化項の強度 (λ) には C = 1/(λn) という関係があるので、'BoxConstraint' または 'Lambda' のいずれかを指定できます。n は観測値 (X の行) の個数です。

例: 'BoxConstraint',100

データ型: single | double

イプシロン不感応区間の幅の半分。'Epsilon''auto' または非負のスカラー値から構成されるコンマ区切りのペアとして指定します。

'auto' の場合、関数 fitrkernelEpsilon の値を iqr(Y)/13.49 に決定します。これは、応答変数 Y の四分位数間範囲を使用した標準偏差の 1/10 の推定値です。iqr(Y) がゼロに等しい場合、fitrkernelEpsilon の値を 0.1 に設定します。

'Epsilon' は、Learnersvm である場合のみ有効です。

例: 'Epsilon',0.3

データ型: single | double

拡張空間の次元数。'NumExpansionDimensions''auto' または正の整数から構成されるコンマ区切りのペアとして指定します。'auto' の場合、関数 fitrkernel2.^ceil(min(log2(p)+5,15)) を使用して次元数を選択します。p は予測子の個数です。

例: 'NumExpansionDimensions',2^15

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

カーネル スケール パラメーター。'KernelScale''auto' または正のスカラーから構成されるコンマ区切りのペアとして指定します。MATLAB® は、このカーネル スケール パラメーターを使用して、ランダムな特徴量拡張のためのランダムな基底を取得します。詳細については、ランダムな特徴量拡張を参照してください。

'auto' が指定された場合、MATLAB はヒューリスティック手法を使用して適切なカーネル スケール パラメーターを選択します。このヒューリスティック手法では副標本抽出を使用するので、呼び出すたびに推定値が変化する可能性があります。このため、結果を再現するには、学習の前に rng を使用して乱数シードを設定します。

例: 'KernelScale','auto'

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

正則化項の強度。'Lambda''auto' または非負のスカラーから構成されるコンマ区切りのペアとして指定します。

'auto' の場合、'Lambda' の値は 1/n です。n は観測値 (X の行) の個数です。

ボックス制約 (C) と正則化項の強度 (λ) には C = 1/(λn) という関係があるので、'BoxConstraint' または 'Lambda' のいずれかを指定できます。

例: 'Lambda',0.01

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

線形回帰モデルのタイプ。'Learner''svm' または 'leastsquares' から構成されるコンマ区切りのペアとして指定します。

次の表では f(x)=T(x)β+b. です。

  • x は p 個の予測子変数による観測値 (行ベクトル) です。

  • T(·) は特徴量を拡張するための観測値 (行ベクトル) の変換です。T(x)p 内の x を高次元空間 (m) にマッピングします。

  • β は m 個の係数のベクトルです。

  • b はスカラー バイアスです。

アルゴリズム応答の範囲損失関数
'leastsquares'通常の最小二乗による線形回帰y ∊ (-∞,∞)平均二乗誤差 (MSE): [y,f(x)]=12[yf(x)]2
'svm'サポート ベクター マシン回帰'leastsquares' と同じイプシロン不感応: [y,f(x)]=max[0,|yf(x)|ε]

例: 'Learner','leastsquares'

詳細レベル。'Verbose'0 または 1 のいずれかから構成されるコンマ区切りのペアとして指定します。Verbose は、fitrkernel がコマンド ラインに表示する診断情報の量を制御します。

説明
0fitrkernel は診断情報を表示しません。
1fitrkernel は、目的関数の値や勾配の大きさなどの診断情報を表示および格納します。診断情報は FitInfo.History に格納されます。

例: 'Verbose',1

データ型: single | double

割り当てられたメモリの最大容量 (メガバイト)。'BlockSize' と正のスカラーから構成されるコンマ区切りのペアとして指定します。

変換後の予測子データを保持するために fitrkernel で必要となるメモリが BlockSize の値より多い場合、MATLAB はブロック単位方式を使用します。ブロック単位方式の詳細については、アルゴリズムを参照してください。

例: 'BlockSize',1e4

データ型: single | double

データ変換の再現性を得るための乱数ストリーム。'RandomStream' と乱数ストリーム オブジェクトから構成されるコンマ区切りのペアとして指定します。詳細については、ランダムな特徴量拡張を参照してください。

X 内のデータを高次元空間に変換するために fitrkernel が使用するランダムな基底関数を再現するには、'RandomStream' を使用します。詳細は、グローバル ストリームの管理 (MATLAB) と 乱数ストリームの作成と管理 (MATLAB) を参照してください。

例: 'RandomStream',RandStream('mlfg6331_64')

応答の変換。'ResponseTransform''none' または関数ハンドルのいずれかから構成されるコンマ区切りのペアとして指定します。既定の設定は 'none' です。これは @(y)y、つまり変換なしを表します。MATLAB 関数またはユーザー定義関数の場合は、関数ハンドルを使用します。関数ハンドルは、ベクトル (元の応答値) を受け入れて同じサイズのベクトル (変換した応答値) を返さなければなりません。

例: myfunction = @(y)exp(y) を使用して、指数変換を入力ベクトルに適用する関数のハンドルを作成するとします。この場合、応答変換として 'ResponseTransform',myfunction を指定できます。

データ型: char | string | function_handle

観測値の重み。'Weights' と正の値の数値ベクトルから構成されるコンマ区切りのペアとして指定します。fitrkernel は、Weights 内の対応する値を使用して X 内の観測値に重みを付けます。Weights のサイズは、観測値の個数 n (X の行数) と同じでなければなりません。

fitrkernel は合計が 1 になるように Weights を正規化します。

データ型: double | single

交差検証オプション

すべて折りたたむ

交差検証フラグ。'Crossval''on' または 'off' から構成されるコンマ区切りのペアとして指定します。

'on' を指定した場合、10 分割の交差検証が実施されます。

名前と値のペアの引数 CVPartitionHoldoutKFold または Leaveout を使用すると、この交差検証の設定を変更できます。交差検証済みモデルを作成するときに使用できる交差検証の名前と値のペアの引数は、一度に 1 つだけです。

例: 'Crossval','on'

交差検証分割。'CVPartition' と、cvpartition で作成した cvpartition 分割オブジェクトから構成されるコンマ区切りのペアとして指定します。分割オブジェクトは、交差検証のタイプと、学習セットおよび検証セットのインデックス付けを指定します。

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

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

ホールドアウト検定に使用されるデータの比率。'Holdout' と範囲 (0,1) のスカラー値から構成されるコンマ区切りのペアとして指定します。'Holdout',p を指定した場合、以下の手順が実行されます。

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

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

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

例: 'Holdout',0.1

データ型: double | single

交差検証済みモデルで使用する分割数。'KFold' と 1 より大きい正の整数から構成されるコンマ区切りのペアとして指定します。'KFold',k を指定した場合、以下の手順が実行されます。

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

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

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

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

例: 'KFold',5

データ型: single | double

Leave-one-out 法の交差検証のフラグ。'Leaveout''on' または 'off' で構成されるコンマ区切りのペアとして指定します。'Leaveout','on' を指定した場合、n 個の観測値 (n は欠損観測値を除外した観測値の個数) のそれぞれについて以下の手順が実行されます。

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

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

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

例: 'Leaveout','on'

収束制御

すべて折りたたむ

線形係数およびバイアス項 (切片) の相対許容誤差。'BetaTolerance' と非負のスカラーから構成されるコンマ区切りのペアとして指定します。

Bt=[βtbt] であるとします。これは、最適化反復 t における係数およびバイアス項のベクトルです。BtBt1Bt2<BetaTolerance で最適化が終了します。

GradientTolerance も指定した場合、いずれかの終了条件が満たされると最適化が終了します。

例: 'BetaTolerance',1e-6

データ型: single | double

勾配の絶対許容誤差。'GradientTolerance' と非負のスカラーから構成されるコンマ区切りのペアとして指定します。

最適化反復 t における係数およびバイアス項に関する目的関数の勾配ベクトルを t とします。t=max|t|<GradientTolerance で最適化が終了します。

BetaTolerance も指定した場合、いずれかの終了条件が満たされると最適化が終了します。

例: 'GradientTolerance',1e-5

データ型: single | double

ヘッセ近似の履歴バッファーのサイズ。'HessianHistorySize' と正の整数から構成されるコンマ区切りのペアとして指定します。各反復において、fitrkernel は最新の HessianHistorySize 回の反復の統計量を使用してヘッシアンを構成します。

例: 'HessianHistorySize',10

データ型: single | double

最適化反復の最大回数。'IterationLimit' と正の整数から構成されるコンマ区切りのペアとして指定します。

BlockSize で指定されたメモリに変換後のデータが収まる場合、既定値は 1000 です。それ以外の場合、既定値は 100 です。

例: 'IterationLimit',500

データ型: single | double

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

すべて折りたたむ

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

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

  • 'auto'{'KernelScale','Lambda','Epsilon'} を使用します。

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

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

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

最適化では、パラメーターを変化させることにより、fitrkernel の交差検証損失 (誤差) を最小化しようとします。交差検証のタイプおよびその他の最適化の側面を制御するには、名前と値のペアの引数 HyperparameterOptimizationOptions を使用します。

メモ

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

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

  • Epsilonfitrkernel は、既定では範囲 [1e-3,1e2]*iqr(Y)/1.349 の対数スケールで、正の値を探索します。

  • KernelScalefitrkernel は、既定では範囲 [1e-3,1e3] の対数スケールで、正の値を探索します。

  • Lambdafitrkernel は、既定では範囲 [1e-3,1e3]/n の対数スケールで、正の値を探索します。n は観測値の個数です。

  • Learnerfitrkernel'svm''leastsquares' で探索します。

  • NumExpansionDimensionsfitrkernel は、既定では範囲 [100,10000] の対数スケールで、正の整数を探索します。

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

load carsmall
params = hyperparameters('fitrkernel',[Horsepower,Weight],MPG);
params(2).Range = [1e-4,1e6];

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

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

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

例: 'OptimizeHyperparameters','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)

データ型: 構造体

出力引数

すべて折りたたむ

学習済みのカーネル回帰モデル。RegressionKernel モデル オブジェクトまたは RegressionPartitionedKernel 交差検証済みモデル オブジェクトとして返されます。

以下の名前と値のペアの引数のうちいずれかが設定されている場合、MdlRegressionPartitionedKernel 交差検証済みモデルとなります。CrossValCVPartitionHoldoutKFold または Leaveout。それ以外の場合、MdlRegressionKernel モデルです。

Mdl のプロパティを参照するには、ドット表記を使用します。たとえば、拡張空間の次元数を表示するには、コマンド ウィンドウで Mdl.NumExpansionDimensions と入力します。

メモ

他の回帰モデルとは異なり、メモリ消費を節約するため、学習データや学習過程の詳細 (収束履歴など) は RegressionKernel モデル オブジェクトに格納されません。

最適化の詳細。次の表に記載されているフィールドを含む構造体配列として返されます。これらのフィールドには、最終的な値または名前と値のペアの引数の指定が格納されます。

フィールド説明
Solver

目的関数の最小化手法: 'LBFGS-fast''LBFGS-blockwise' または 'LBFGS-tall'。詳細については、アルゴリズムを参照してください。

LossFunction損失関数。線形回帰モデルのタイプに応じて、平均二乗誤差 (MSE) またはイプシロン不感応になります。Learner を参照してください。
Lambda正則化項の強度。Lambda を参照してください。
BetaTolerance線形係数およびバイアス項の相対許容誤差。BetaTolerance を参照してください。
GradientTolerance勾配の絶対許容誤差。GradientTolerance を参照してください。
ObjectiveValue最適化終了時の目的関数の値。回帰損失と正則化項を加算することにより目的関数が構成されます。
GradientMagnitude最適化終了時における目的関数の勾配ベクトルの無限大ノルム。GradientTolerance を参照してください。
RelativeChangeInBeta最適化終了時の線形係数およびバイアス項の相対的な変化。BetaTolerance を参照してください。
FitTimeモデルをデータにあてはめるためにかかった経過実時間 (秒単位)。
History最適化情報の履歴。このフィールドには Mdl の学習の最適化情報も格納されます。'Verbose',0 を指定した場合、このフィールドは空 ([]) になります。詳細については、Verboseアルゴリズムを参照してください。

フィールドにアクセスするには、ドット表記を使用します。たとえば、各反復における目的関数値のベクトルにアクセスするには、コマンド ウィンドウで FitInfo.ObjectiveValue と入力します。

FitInfo が提供する情報を確認して、収束が満足できるものであるかどうかを評価します。

ハイパーパラメーターの交差検証最適化。ハイパーパラメーターおよび関連する値が含まれている table または BayesianOptimization オブジェクトとして返されます。'OptimizeHyperparameters' の値が 'none' ではない場合、出力は空以外です。出力値は、名前と値のペアの引数 'HyperparameterOptimizationOptions'Optimizer フィールドの値に依存します。

Optimizer フィールドの値HyperparameterOptimizationResults の値
'bayesopt' (既定の設定)BayesianOptimization クラスのオブジェクト
'gridsearch' または 'randomsearch'使用したハイパーパラメーター、観測された目的関数の値 (交差検証損失)、および最低 (最良) から最高 (最悪) までの観測値の順位が格納されているテーブル

制限

  • fitrkernel は、決定関数 f(x)=T(x)β+b. を決定するために使用される線形係数ベータ (β) とバイアス項 (b) について初期条件を受け入れません。

  • fitrkernel は、標準化と交差検証のオプションをサポートしません。

  • fitrkernel は、テーブル入力を受け入れません。

詳細

すべて折りたたむ

ランダムな特徴量拡張

Random Kitchen Sink[1]や Fastfood[2]などのランダムな特徴量拡張では、ビッグ データに対するカーネル回帰アルゴリズムのガウス カーネルの近似値を計算効率が高い方法で求めます。ランダムな特徴量拡張は、大規模な学習セットが含まれているビッグ データ事例への適用の方がより有用ですが、メモリに収まる小規模なデータセットにも適用できます。

カーネル回帰アルゴリズムでは、予測子データを高次元空間にマッピングした後で、各応答データ点 (yi) からの逸脱がイプシロン マージン (ε) の値を超えない最適な関数を求めます。

一部の回帰問題は、線形モデルを使用して適切に表すことはできません。このような場合は、ドット積 x1x2' を非線形カーネル関数 G(x1,x2)=φ(x1),φ(x2) に置き換えることにより非線形回帰モデルを取得します。ここで、xi は i 番目の観測値 (行ベクトル)、φ(xi) は xi を高次元空間にマッピングする変換 ("カーネル トリック" と呼ばれます) です。しかし、(n が大きい) 大規模なデータセットでは、観測値の各ペアについて G(x1,x2) (グラム行列) を評価すると計算コストが高くなります。

ランダムな特徴量拡張の方式では、ドット積がガウス カーネルを近似するようなランダム変換を求めます。つまり、次のようになります。

G(x1,x2)=φ(x1),φ(x2)T(x1)T(x2)',

ここで、T(x)p における x を高次元空間 (m) にマッピングします。Random Kitchen Sink[1]方式では、次のランダムな変換を使用します。

T(x)=m1/2exp(iZx')',

ここで、Zm×pN(0,σ2) から抽出した標本、σ2 はカーネル スケールです。この方式では O(mp) の計算および格納が必要です。Fastfood[2]方式では、ガウス スケーリング行列と組み合わせたアダマール行列を使用して、Z の代わりに別のランダムな基底 V を導入します。このランダムな基底により、計算コストが O(mlogp) に、ストレージが O(m) に削減されます。

m および σ2 の値はそれぞれ、fitrkernel の名前と値のペアの引数 NumExpansionDimensions および KernelScale を使用して指定できます。

関数 fitrkernel は、ランダムな特徴量拡張に Fastfood 方式を使用し、線形回帰を使用してガウス カーネル回帰モデルに学習をさせます。関数 fitrsvm のソルバーでは n 行 n 列のグラム行列の計算が必要ですが、fitrkernel のソルバーに必要なのは、n 行 m 列の行列の形成だけです。ビッグ データの場合は一般に m が n よりはるかに小さくなります。

ボックス制約

ボックス制約は、イプシロン マージン (ε) の外部にある観測値に課せられる最大ペナルティを制御するパラメーターであり、過適合の防止 (正則化) に役立ちます。ボックス制約の値を大きくすると、学習時間が長くなる場合があります。

ボックス制約 (C) と正則化項の強度 (λ) には C = 1/(λn) という関係があります。n は観測値の個数です。

アルゴリズム

fitrkernel は、メモリ制限 Broyden-Fletcher-Goldfarb-Shanno (LBFGS) ソルバーとリッジ (L2) 正則化を使用して、正則化された目的関数を最小化します。学習に使用した LBFGS ソルバーのタイプを調べるには、コマンド ウィンドウで FitInfo.Solver と入力します。

  • 'LBFGS-fast' — LBFGS ソルバー。

  • 'LBFGS-blockwise' — ブロック単位方式を使用する LBFGS ソルバー。変換後の予測子データを保持するために fitrkernel で必要となるメモリが BlockSize の値より多い場合、ブロック単位方式が使用されます。

  • 'LBFGS-tall' — ブロック単位方式の tall 配列用 LBFGS ソルバー。

fitrkernel がブロック単位方式を使用する場合、fitrkernel は各反復で損失と勾配の計算をデータのさまざまな部分に分散させることにより LBFGS を実装します。また、fitrkernel は、データの一部に対して局所的にモデルをあてはめ、平均化で係数を結合することにより、線形係数およびバイアス項の初期推定値を改善します。'Verbose',1 が指定された場合、fitrkernel は各データ通過についての診断情報を表示し、情報を FitInfoHistory フィールドに格納します。

fitrkernel がブロック単位方式を使用しない場合、初期推定値はゼロになります。'Verbose',1 が指定された場合、fitrkernel は各反復についての診断情報を表示し、情報を FitInfoHistory フィールドに格納します。

参照

[1] Rahimi, A., and B. Recht. “Random Features for Large-Scale Kernel Machines.” Advances in Neural Information Processing Systems. Vol. 20, 2008, pp. 1177–1184.

[2] Le, Q., T. Sarlós, and A. Smola. “Fastfood — Approximating Kernel Expansions in Loglinear Time.” Proceedings of the 30th International Conference on Machine Learning. Vol. 28, No. 3, 2013, pp. 244–252.

[3] Huang, P. S., H. Avron, T. N. Sainath, V. Sindhwani, and B. Ramabhadran. “Kernel methods match Deep Neural Networks on TIMIT.” 2014 IEEE International Conference on Acoustics, Speech and Signal Processing. 2014, pp. 205–209.

拡張機能

R2018a で導入