ドキュメンテーション

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

fitrlinear

高次元データに対する線形回帰モデルのあてはめ

fitrlinear は、高次元の非スパースまたはスパース予測子データを使用して効率的に線形回帰モデルに学習をさせます。使用可能な線形回帰モデルには、正則化されたサポート ベクター マシン (SVM) と最小二乗回帰法があります。fitrlinear は、計算時間を短縮する手法 (確率的勾配降下法など) を使用して目的関数を最小化します。

高次元データセットには、多数の予測子変数が含まれています。このようなデータセットはメモリを大量に消費する可能性がありますが、MATLAB® ワークスペースに格納できなければなりません。低~中次元の予測子データセットについては、低次元データの代替方法を参照してください。

構文

Mdl = fitrlinear(X,Y)
Mdl = fitrlinear(X,Y,Name,Value)
[Mdl,FitInfo] = fitrlinear(___)
[Mdl,FitInfo,HyperparameterOptimizationResults] = fitrlinear(___)

説明

Mdl = fitrlinear(X,Y) は、サポート ベクター マシン回帰モデルを予測子 X および応答 Y にあてはめた結果が格納されている、学習済みの回帰モデル オブジェクトを返します。

Mdl = fitrlinear(X,Y,Name,Value) は、1 つ以上の Name,Value ペア引数で指定された追加オプションを使用して、学習済みの線形回帰モデルを返します。たとえば、最小二乗回帰の実装、交差検証、正則化のタイプを指定できます。Name,Value ペア引数 Kfold を使用して交差検証を実行することをお勧めします。交差検証の結果により、モデルがどの程度一般化を行うかを判断します。

[Mdl,FitInfo] = fitrlinear(___) は、前の構文のいずれかを使用して、最適化の詳細も返します。交差検証済みモデルについて FitInfo を要求することはできません。

[Mdl,FitInfo,HyperparameterOptimizationResults] = fitrlinear(___) は、名前と値のペア OptimizeHyperparameters が渡された場合に、ハイパーパラメーターの最適化の詳細も返します。

すべて折りたたむ

SVM、双対 SGD およびリッジ正則化を使用して線形回帰モデルに学習をさせます。

次のモデルにより、10000 個の観測値をシミュレートします。

  • は、10% の要素が非ゼロ標準正規である 10000 行 1000 列のスパース行列です。

  • e は、平均が 0、標準偏差が 0.3 のランダムな正規誤差です。

rng(1) % For reproducibility
n = 1e4;
d = 1e3;
nz = 0.1;
X = sprandn(n,d,nz);
Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1);

線形回帰モデルに学習をさせます。既定の設定では、fitrlinear はリッジ ペナルティがあるサポート ベクター マシンを使用し、SVM 用の双対 SGD を使用して最適化を行います。近似の要約を抽出して、最適化アルゴリズムによるモデルがどの程度データにあてはまるかを判断します。

[Mdl,FitInfo] = fitrlinear(X,Y)
Mdl = 
  RegressionLinear
         ResponseName: 'Y'
    ResponseTransform: 'none'
                 Beta: [1000x1 double]
                 Bias: -0.0056
               Lambda: 1.0000e-04
              Learner: 'svm'


  Properties, Methods

FitInfo = struct with fields:
                    Lambda: 1.0000e-04
                 Objective: 0.2725
                 PassLimit: 10
                 NumPasses: 10
                BatchLimit: []
             NumIterations: 100000
              GradientNorm: NaN
         GradientTolerance: 0
      RelativeChangeInBeta: 0.4907
             BetaTolerance: 1.0000e-04
             DeltaGradient: 1.5816
    DeltaGradientTolerance: 0.1000
           TerminationCode: 0
         TerminationStatus: {'Iteration limit exceeded.'}
                     Alpha: [10000x1 double]
                   History: []
                   FitTime: 0.1760
                    Solver: {'dual'}

MdlRegressionLinear モデルです。Mdl と学習データまたは新しいデータを loss に渡して、標本内二乗平均誤差を調べることができます。または、Mdl と新しい予測子データを predict に渡して、新しい観測値の応答を予測することができます。

FitInfo は、重要な情報として終了ステータス (TerminationStatus) とソルバーによるモデルのデータへのあてはめにかかった時間 (FitTime) が含まれている構造体配列です。FitInfo を使用して、最適化終了時の結果が満足できるものであるかどうかを判断することをお勧めします。この場合、fitrlinear は最大反復回数に達しました。モデルに再学習をさせることもできますが、学習時間は短いので、データを通す回数を増やしてください。または、LBFGS など別のソルバーを試してください。

最小二乗を使用する線形回帰モデルに適した LASSO ペナルティの強度を決定するため、5 分割の交差検証を実装します。

次のモデルにより、10000 個の観測値をシミュレートします。

  • は、10% の要素が非ゼロ標準正規である 10000 行 1000 列のスパース行列です。

  • e は、平均が 0、標準偏差が 0.3 のランダムな正規誤差です。

rng(1) % For reproducibility
n = 1e4;
d = 1e3;
nz = 0.1;
X = sprandn(n,d,nz);
Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1);

の範囲で対数間隔で配置された 15 個の正則化強度を作成します。

Lambda = logspace(-5,-1,15);

モデルを交差検証します。実行速度を向上させるため、予測子データを転置し、観測値が列単位であることを指定します。SpaRSA を使用して目的関数を最適化します。

X = X'; 
CVMdl = fitrlinear(X,Y,'ObservationsIn','columns','KFold',5,'Lambda',Lambda,...
    'Learner','leastsquares','Solver','sparsa','Regularization','lasso');

numCLModels = numel(CVMdl.Trained)
numCLModels = 5

CVMdlRegressionPartitionedLinear モデルです。fitrlinear は 5 分割の交差検証を実装するので、各分割について学習させる 5 つの RegressionLinear モデルが CVMdl に格納されます。

1 番目の学習済み線形回帰モデルを表示します。

Mdl1 = CVMdl.Trained{1}
Mdl1 = 
  RegressionLinear
         ResponseName: 'Y'
    ResponseTransform: 'none'
                 Beta: [1000x15 double]
                 Bias: [1x15 double]
               Lambda: [1x15 double]
              Learner: 'leastsquares'


  Properties, Methods

Mdl1RegressionLinear モデル オブジェクトです。fitrlinear は最初の 4 つの分割に対して学習を行うことにより Mdl1 を構築しました。Lambda は正則化強度のシーケンスなので、Mdl1 はそれぞれが Lambda の各正則化強度に対応する 15 個のモデルであると考えることができます。

交差検証された MSE を推定します。

mse = kfoldLoss(CVMdl);

Lambda の値が大きくなると、予測子変数がスパースになります。これは回帰モデルの品質として優れています。データセット全体を使用し、モデルの交差検証を行ったときと同じオプションを指定して、各正則化強度について線形回帰モデルに学習をさせます。モデルごとに非ゼロの係数を特定します。

Mdl = fitrlinear(X,Y,'ObservationsIn','columns','Lambda',Lambda,...
    'Learner','leastsquares','Solver','sparsa','Regularization','lasso');
numNZCoeff = sum(Mdl.Beta~=0);

同じ図に、各正則化強度についての交差検証された MSE と非ゼロ係数の頻度をプロットします。すべての変数を対数スケールでプロットします。

figure
[h,hL1,hL2] = plotyy(log10(Lambda),log10(mse),...
    log10(Lambda),log10(numNZCoeff)); 
hL1.Marker = 'o';
hL2.Marker = 'o';
ylabel(h(1),'log_{10} MSE')
ylabel(h(2),'log_{10} nonzero-coefficient frequency')
xlabel('log_{10} Lambda')
hold off

予測子変数のスパース性と MSE の低さのバランスがとれている正則化強度 (Lambda(10) など) のインデックスを選択します。

idxFinal = 10;

最小の MSE に対応するモデルを抽出します。

MdlFinal = selectModels(Mdl,idxFinal)
MdlFinal = 
  RegressionLinear
         ResponseName: 'Y'
    ResponseTransform: 'none'
                 Beta: [1000x1 double]
                 Bias: -0.0050
               Lambda: 0.0037
              Learner: 'leastsquares'


  Properties, Methods

idxNZCoeff = find(MdlFinal.Beta~=0)
idxNZCoeff = 2×1

   100
   200

EstCoeff = Mdl.Beta(idxNZCoeff)
EstCoeff = 2×1

    1.0051
    1.9965

MdlFinal は、1 つの正則化強度がある RegressionLinear モデルです。非ゼロ係数 EstCoeff は、データをシミュレートした係数に近くなっています。

この例では、fitrlinear を使用して自動的にハイパーパラメーターを最適化する方法を示します。この例では、人為的な (シミュレートされた) データをモデルに対して使用します。

  • は、10% の要素が非ゼロ標準正規である 10000 行 1000 列のスパース行列です。

  • e は、平均が 0、標準偏差が 0.3 のランダムな正規誤差です。

rng(1) % For reproducibility
n = 1e4;
d = 1e3;
nz = 0.1;
X = sprandn(n,d,nz);
Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1);

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

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

hyperopts = struct('AcquisitionFunctionName','expected-improvement-plus');
[Mdl,FitInfo,HyperparameterOptimizationResults] = fitrlinear(X,Y,...
    'OptimizeHyperparameters','auto',...
    'HyperparameterOptimizationOptions',hyperopts)

|=====================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Lambda |      Learner |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |
|=====================================================================================================|
|    1 | Best   |     0.16029 |      1.4333 |     0.16029 |     0.16029 |   2.4206e-09 |          svm |
|    2 | Best   |     0.14496 |     0.91125 |     0.14496 |     0.14601 |     0.001807 |          svm |
|    3 | Best   |     0.13879 |     0.52115 |     0.13879 |     0.14065 |   2.4681e-09 | leastsquares |
|    4 | Best   |       0.115 |     0.56169 |       0.115 |     0.11501 |     0.021027 | leastsquares |
|    5 | Accept |     0.44352 |     0.57853 |       0.115 |      0.1159 |       4.6795 | leastsquares |
|    6 | Best   |     0.11025 |     0.53683 |     0.11025 |     0.11024 |     0.010671 | leastsquares |
|    7 | Accept |     0.13222 |     0.58753 |     0.11025 |     0.11024 |   8.6067e-08 | leastsquares |
|    8 | Accept |     0.13262 |     0.61166 |     0.11025 |     0.11023 |   8.5109e-05 | leastsquares |
|    9 | Accept |     0.13543 |     0.52043 |     0.11025 |     0.11021 |   2.7562e-06 | leastsquares |
|   10 | Accept |     0.15751 |     0.53914 |     0.11025 |     0.11022 |   5.0559e-06 |          svm |
|   11 | Accept |     0.40673 |     0.55968 |     0.11025 |      0.1102 |      0.52074 |          svm |
|   12 | Accept |     0.16057 |      0.5804 |     0.11025 |      0.1102 |   0.00014292 |          svm |
|   13 | Accept |     0.16105 |      1.2364 |     0.11025 |     0.11018 |   1.0079e-07 |          svm |
|   14 | Accept |     0.12763 |      1.0407 |     0.11025 |     0.11019 |    0.0012085 | leastsquares |
|   15 | Accept |     0.13504 |     0.54357 |     0.11025 |     0.11019 |   1.3981e-08 | leastsquares |
|   16 | Accept |     0.11041 |     0.59713 |     0.11025 |     0.11026 |    0.0093968 | leastsquares |
|   17 | Best   |     0.10954 |     0.59094 |     0.10954 |     0.11003 |     0.010393 | leastsquares |
|   18 | Accept |     0.10998 |     0.61795 |     0.10954 |     0.11002 |     0.010254 | leastsquares |
|   19 | Accept |     0.45314 |     0.81681 |     0.10954 |     0.11001 |       9.9932 |          svm |
|   20 | Best   |     0.10753 |     0.98538 |     0.10753 |     0.10759 |     0.022576 |          svm |
|=====================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Lambda |      Learner |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |
|=====================================================================================================|
|   21 | Best   |     0.10737 |     0.81492 |     0.10737 |     0.10728 |     0.010171 |          svm |
|   22 | Accept |     0.13448 |      0.4704 |     0.10737 |     0.10727 |   1.5344e-05 | leastsquares |
|   23 | Best   |     0.10645 |     0.86429 |     0.10645 |     0.10565 |     0.015495 |          svm |
|   24 | Accept |     0.13598 |     0.47948 |     0.10645 |     0.10559 |   4.5984e-07 | leastsquares |
|   25 | Accept |     0.15962 |     0.71129 |     0.10645 |     0.10556 |   1.4302e-08 |          svm |
|   26 | Accept |     0.10689 |     0.52899 |     0.10645 |     0.10616 |     0.015391 |          svm |
|   27 | Accept |     0.13748 |     0.40371 |     0.10645 |     0.10614 |    1.001e-09 | leastsquares |
|   28 | Accept |     0.10692 |     0.50687 |     0.10645 |     0.10639 |     0.015761 |          svm |
|   29 | Accept |     0.10681 |     0.63654 |     0.10645 |     0.10649 |     0.015777 |          svm |
|   30 | Accept |     0.34314 |     0.45156 |     0.10645 |     0.10651 |      0.39671 | leastsquares |

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

Best observed feasible point:
     Lambda     Learner
    ________    _______

    0.015495      svm  

Observed objective function value = 0.10645
Estimated objective function value = 0.10651
Function evaluation time = 0.86429

Best estimated feasible point (according to models):
     Lambda     Learner
    ________    _______

    0.015777      svm  

Estimated objective function value = 0.10651
Estimated function evaluation time = 0.72046
Mdl = 
  RegressionLinear
         ResponseName: 'Y'
    ResponseTransform: 'none'
                 Beta: [1000x1 double]
                 Bias: -0.0018
               Lambda: 0.0158
              Learner: 'svm'


  Properties, Methods

FitInfo = struct with fields:
                    Lambda: 0.0158
                 Objective: 0.2309
                 PassLimit: 10
                 NumPasses: 10
                BatchLimit: []
             NumIterations: 99989
              GradientNorm: NaN
         GradientTolerance: 0
      RelativeChangeInBeta: 0.0641
             BetaTolerance: 1.0000e-04
             DeltaGradient: 1.1697
    DeltaGradientTolerance: 0.1000
           TerminationCode: 0
         TerminationStatus: {'Iteration limit exceeded.'}
                     Alpha: [10000x1 double]
                   History: []
                   FitTime: 0.1051
                    Solver: {'dual'}

HyperparameterOptimizationResults = 
  BayesianOptimization with properties:

                      ObjectiveFcn: @createObjFcn/inMemoryObjFcn
              VariableDescriptions: [3x1 optimizableVariable]
                           Options: [1x1 struct]
                      MinObjective: 0.1065
                   XAtMinObjective: [1x2 table]
             MinEstimatedObjective: 0.1065
          XAtMinEstimatedObjective: [1x2 table]
           NumObjectiveEvaluations: 30
                  TotalElapsedTime: 72.9410
                         NextPoint: [1x2 table]
                            XTrace: [30x2 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]

この最適化手法は交差検証の使用による適切な LASSO ペナルティの特定で示されているものよりシンプルですが、モデルの複雑度と交差検証損失との間のトレードオフはできません。

入力引数

すべて折りたたむ

予測子データ。n 行 p 列の非スパース行列またはスパース行列を指定します。

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

メモ

観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns' を指定すると、最適化実行時間が大幅に短縮される可能性があります。

データ型: single | double

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

データ型: single | double

メモ:

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

  • 応答 (Y または ValidationData{2}) 内の NaN 要素

  • 予測子の観測値 (X または ValidationData{1} の行) 内の少なくとも 1 つの NaN

  • 重み (Weights または ValidationData{3}) が NaN 値または 0

メモリを節約するため、学習を行う前に欠損値が含まれている観測値を学習データから手動で削除することをお勧めします。

名前と値のペアの引数

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

例: Mdl = fitrlinear(X,Y,'Learner','leastsquares','CrossVal','on','Regularization','lasso') は、最小二乗回帰の実装、10 分割交差検証の実装、および LASSO 正則化項を含めることを指定します。

メモ

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

線形回帰のオプション

すべて折りたたむ

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

Epsilon の既定値は、iqr(Y)/1.349 です。これは、応答変数 Y の四分位数間範囲を使用した標準偏差の推定値です。iqr(Y) がゼロに等しい場合、Epsilon の既定値は 0.1 になります。

例: 'Epsilon',0.3

データ型: single | double

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

  • 'auto' の場合、Lambda = 1/n です。

    • 交差検証の名前と値のペアの引数 (CrossVal など) を指定した場合、n は分割内観測値の数です。

    • それ以外の場合、n は学習標本のサイズです。

  • 非負値のベクトルの場合、Lambda の異なる値それぞれについて目的関数の最適化が逐次的に昇順で実行されます。

    • Solver'sgd' または 'asgd'Regularization'lasso' の場合、前回の係数の推定値が次回の最適化反復のウォーム スタートとして使用されることはありません。それ以外の場合、ウォーム スタートが使用されます。

    • Regularization'lasso' の場合、Lambda の以後の値を使用して最適化を行うときに、係数の推定値 0 は値が保持されます。

    すべての最適化の反復について係数の推定値を返します。

例: 'Lambda',10.^(-(10:-2:2))

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

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

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

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

  • x は p 個の予測子変数による観測値です。

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

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

例: 'Learner','leastsquares'

予測子データにおける観測値の次元。'ObservationsIn''columns' または 'rows' から構成されるコンマ区切りのペアとして指定します。

メモ

観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns' を指定すると、最適化実行時間が大幅に短縮される可能性があります。

複雑度ペナルティのタイプ。'Regularization''lasso' または 'ridge' から構成されるコンマ区切りのペアとして指定します。

最小化のための目的関数は、平均損失関数 (Learner を参照) と次の表の正則化項を加算することにより作成されます。

説明
'lasso'LASSO (L1) ペナルティ: λj=1p|βj|
'ridge'リッジ (L2) ペナルティ: λ2j=1pβj2

正則化項の強度 (式の λ) を指定するには、Lambda を使用します。

バイアス項 (β0) は正則化ペナルティから除外されます。

Solver'sparsa' の場合、Regularization の既定値は 'lasso' になります。それ以外の場合は、既定値は 'ridge' です。

ヒント

  • 予測子変数を選択する場合は、'lasso' を指定します。

  • 最適化の精度を向上させるには、'ridge' を指定します。

例: 'Regularization','lasso'

目的関数の最小化手法。'Solver' と次の表の値をもつ文字ベクトル、string スカラー、string 配列、または文字ベクトルの cell 配列から構成されるコンマ区切りのペアとして指定します。

説明制限
'sgd'確率的勾配降下法 (SGD) [5][3] 
'asgd'平均化確率的勾配降下法 (ASGD) [8] 
'dual'SVM 用の双対 SGD [2][7]Regularization'ridge'Learner'svm' でなければなりません。
'bfgs'Broyden-Fletcher-Goldfarb-Shanno 準ニュートン アルゴリズム (BFGS) [4]X の次元数が非常に多い場合は非効率的です。
'lbfgs'記憶制限 BFGS (LBFGS) [4]Regularization'ridge' でなければなりません。
'sparsa'可分近似によるスパース再構成 (SpaRSA) [6]Regularization'lasso' でなければなりません。

指定する項目によって、内容は次のように変わります。

  • size(X,1) <= 100 (予測子変数が 100 個以下) の場合にリッジ ペナルティ (Regularization を参照) を指定すると、既定のソルバーは 'bfgs' になります。

  • size(X,1) > 100 (予測子変数が 100 個超) の場合に SVM 回帰モデル (Learner を参照) とリッジ ペナルティを指定すると、既定のソルバーは 'dual' になります。

  • X に 100 個以下の予測子変数が格納されている場合に LASSO ペナルティを指定すると、既定のソルバーは 'sparsa' になります。

それ以外の場合、既定のソルバーは 'sgd' になります。

ソルバー名の string 配列または cell 配列を指定した場合、指定した順序ですべてのソルバーが各 Lambda について使用されます。

選択するソルバーの詳細は、ヒントを参照してください。

例: 'Solver',{'sgd','lbfgs'}

線形係数の初期推定値 (β)、'Beta' と p 次元の数値ベクトルまたは p 行 L 列の数値行列から構成されるコンマ区切りのペアとして指定します。p は X の予測子変数の数、L は正則化強度値の数です (詳細については、Lambda を参照)。

  • p 次元ベクトルを指定した場合、次のプロセスを使用して目的関数が L 回最適化されます。

    1. 初期値として Beta、正則化強度として Lambda の最小値を使用して最適化を行う。

    2. 前回の最適化で生成された推定値をウォーム スタートとして使用し、Lambda 内の次に小さい値を正則化強度として使用して、再度最適化を行う。

    3. Lambda の値をすべて使用するまでステップ 2 を繰り返す。

  • p 行 L 列の行列を指定した場合、目的関数が L 回最適化されます。反復 j では、初期値として Beta(:,j) が使用され、Lambda を昇順で並べ替えた後で正則化強度として Lambda(j) が使用されます。

'Solver','dual' を設定した場合、Beta は無視されます。

データ型: single | double

切片の初期推定値 (b)。'Bias' と数値スカラーまたは L 次元の数値ベクトルから構成されるコンマ区切りのペアとして指定します。L は正則化強度値の数です (詳細については、Lambda を参照)。

  • スカラーを指定した場合、次のプロセスを使用して目的関数が L 回最適化されます。

    1. 初期値として Bias、正則化強度として Lambda の最小値を使用して最適化を行う。

    2. 生成された推定値を次回の最適化の反復でウォーム スタートとして使用し、Lambda 内の次に小さい値を正則化強度として使用する。

    3. Lambda の値をすべて使用するまでステップ 2 を繰り返す。

  • L 次元ベクトルを指定した場合、目的関数が L 回最適化されます。反復 j では、初期値として Bias(j) が使用され、Lambda を昇順で並べ替えた後で正則化強度として Lambda(j) が使用されます。

  • 既定の設定では、次のようになります。

    • Learner'leastsquares' の場合、Bias は学習の場合は Y の、交差検証の場合は分割内応答の加重平均になります。

    • Learner'svm' の場合、Bias は学習の場合はすべての学習についての Y の、交差検証の場合は Epsilon より大きい分割内観測値の加重中央値になります。

データ型: single | double

線形モデルの切片使用フラグ。'FitBias'true または false から構成されるコンマ区切りのペアとして指定します。

説明
true線形モデルにバイアス項 b が追加され、推定されます。
false推定時に b = 0 に設定されます。

例: 'FitBias',false

データ型: logical

最適化後に線形モデルの切片をあてはめるフラグ。'PostFitBias'true または false から構成されるコンマ区切りのペアとして指定します。

説明
false最適化時にバイアス項 b と係数 β が推定されます。
true

b を推定するため、以下が行われます。

  1. モデルを使用して β と b を推定する。

  2. 残差を計算する。

  3. b を再度あてはめる。最小二乗の場合、b は残差の加重平均です。SVM 回帰の場合、b は大きさが Epsilon より大きいすべての残差の加重中央値です。

true を指定する場合、FitBias は true でなければなりません。

例: 'PostFitBias',true

データ型: logical

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

説明
0fitrlinear は診断情報を表示しません。
1fitrlinear は、目的関数の値や勾配の大きさなどの診断情報を定期的に表示および格納します。診断情報は FitInfo.History に格納されます。
他の正の整数fitrlinear は、各最適化反復における診断情報を表示および格納します。診断情報は FitInfo.History に格納されます。

例: 'Verbose',1

データ型: double | single

SGD および ASGD ソルバーのオプション

すべて折りたたむ

ミニバッチのサイズ。'BatchSize' と正の整数から構成されるコンマ区切りのペアとして指定します。各反復では、学習データの観測値を BatchSize 個使用して劣勾配が推定されます。

  • X が数値行列の場合、既定値は 10 です。

  • X がスパース行列の場合、既定値は max([10,ceil(sqrt(ff))]) です。ここで、ff = numel(X)/nnz(X) (X"スパース性係数") です。

例: 'BatchSize',100

データ型: single | double

学習率。'LearnRate' と正のスカラーから構成されるコンマ区切りのペアとして指定します。LearnRate では、各反復で実行するステップの回数を指定します。各反復では、各ステップの方向と大きさが勾配により指定されます。

  • Regularization'ridge' の場合、LearnRate は初期学習率 γ0 を指定します。反復 t の学習率 γt は、次の式を使用して決定されます。

    γt=γ0(1+λγ0t)c.

    • λ は Lambda の値です。

    • Solver'sgd' の場合、c = 1 です。

    • Solver'asgd' の場合、c は次のようになります。

      • Learner'leastsquares' の場合は 2/3

      • Learner'svm' の場合は 3/4 [8]

  • Regularization'lasso' の場合、すべての反復について LearnRate は一定になります。

既定の設定では、LearnRate1/sqrt(1+max((sum(X.^2,obsDim)))) です。obsDim は、観測値が X の列である場合は 1、それ以外の場合は 2 です。

例: 'LearnRate',0.01

データ型: single | double

発散 (最小値の限度を超える状態) が検出された場合に学習率を減少させるフラグ。'OptimizeLearnRate'true または false から構成されるコンマ区切りのペアとして指定します。

OptimizeLearnRate'true' の場合、次のようになります。

  1. 数回の最適化反復について、LearnRate を学習率として使用して最適化が開始される。

  2. 目的関数の値が増加した場合、現在の学習率の半分の値を使用して再開される。

  3. 目的関数が減少するまで、ステップ 2 が繰り返される。

例: 'OptimizeLearnRate',true

データ型: logical

LASSO 切り捨て実行間のミニバッチの回数。'TruncationPeriod' と正の整数から構成されるコンマ区切りのペアとして指定します。

切り捨て実行の後で、ソフトしきい値が線形係数に適用されます。つまり、k = TruncationPeriod 回のミニバッチが処理された後で、次を使用して係数推定 j が切り捨てられます。

β^j={β^jutifβ^j>ut,0if|β^j|ut,β^j+utifβ^j<ut.

  • SGD の場合、β^j はミニバッチを次を満たす k の回数処理した後の係数 j の推定値です。ut=kγtλ.γt は反復 t における学習率です。λ は Lambda の値です。

  • ASGD の場合、β^j はミニバッチを次を満たす k の回数処理した後の係数 j の平均推定値です。ut=kλ.

Regularization'ridge' の場合、TruncationPeriod は無視されます。

例: 'TruncationPeriod',100

データ型: single | double

他の回帰のオプション

すべて折りたたむ

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

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

データ型: double | single

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

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

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

例: 'ResponseName','response'

データ型: char | string

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

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

データ型: char | string | 関数ハンドル

交差検証オプション

すべて折りたたむ

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

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

この交差検証の設定をオーバーライドするには、名前と値のペアの引数 CVPartitionHoldoutKFold のいずれかを使用します。交差検証済みモデルを作成するために使用できる交差検証の名前と値のペアの引数は、一度に 1 つだけです。

例: 'Crossval','on'

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

交差検証済みモデルを作成するために使用できるオプションは、'CVPartition''Holdout''KFold' のいずれかのみです。

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

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

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

交差検証済みモデルを作成するために使用できるオプションは、'CVPartition''Holdout''KFold' のいずれかのみです。

例: 'Holdout',0.1

データ型: double | single

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

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

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

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

交差検証済みモデルを作成するために使用できるオプションは、'CVPartition''Holdout''KFold' のいずれかのみです。

例: 'KFold',8

データ型: single | double

SGD と ASGD の収束制御

すべて折りたたむ

バッチを処理する最大回数。'BatchLimit' と正の整数から構成されるコンマ区切りのペアとして指定します。BatchLimit 回のバッチが処理されると、最適化が終了します。

  • 既定の設定では、次のようになります。

    • データを通す回数は PassLimit 回です。

    • 複数のソルバーを指定し、SGD または ASGD を使用して次のソルバーの初期近似値を取得する場合、既定値は ceil(1e6/BatchSize) です。BatchSize は名前と値のペアの引数 'BatchSize' の値です。

  • 'BatchLimit''PassLimit' を指定した場合、処理する観測値の数が最も少なくなる引数が選択されます。

  • 'BatchLimit' を指定し、'PassLimit' は指定しなかった場合、データ全体を完全に 1 回通すのに十分な回数のバッチが処理されます。

例: 'BatchLimit',100

データ型: single | double

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

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

Solver で指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver で指定された次のソルバーが使用されます。

例: 'BetaTolerance',1e-6

データ型: single | double

次回の収束チェックの前にバッチを処理する回数。'NumCheckConvergence' と正の整数から構成されるコンマ区切りのペアとして指定します。

バッチのサイズの指定について、BatchSize を参照してください。

既定の設定では、データセット全体が通されるたびに約 10 回収束がチェックされます。

例: 'NumCheckConvergence',100

データ型: single | double

データを通す最大回数。'PassLimit' と正の整数から構成されるコンマ区切りのペアとして指定します。

データが完全に 1 回通されると、すべての観測値が fitrlinear で処理されます。

データが通される回数が PassLimit になると、fitrlinear は最適化を終了します。

'BatchLimit'PassLimit を指定した場合、処理する観測値の数が最も少なくなる引数が fitrlinear により選択されます。詳細は、アルゴリズムを参照してください。

例: 'PassLimit',5

データ型: single | double

最適化の収束を検出するためのデータ。'ValidationData' と cell 配列から構成されるコンマ区切りのペアとして指定します。

最適化時に、ValidationData の損失が定期的に推定されます。検証データの損失が増加する場合、最適化が終了します。詳細は、アルゴリズムを参照してください。交差検証を使用してハイパーパラメーターを最適化する方法については、CrossVal など交差検証のオプションを参照してください。

  • ValidationData(1) には、予測子データが X と同じ配置で格納されている m 行 p 列または p 行 m 列の非スパース行列またはスパース行列が格納されていなければなりません。学習データ X の予測子変数と ValidationData{1} の予測子変数は対応していなければなりません。両方のセットの観測値数が同じである必要はありません。

  • ValidationData(2) には、ValidationData{1} の観測値数に長さが対応する m 個の応答の配列が格納されていなければなりません。

  • オプションとして、観測値の重みの ValidationData(3) 次元数値ベクトルを m に格納できます。検証データに関する重みは、合計が 1 になるように正規化されます。

ValidationData を指定した場合にコマンド ラインで検定損失を表示するには、0 より大きい値を Verbose に指定します。

Solver で指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver で指定された次のソルバーが使用されます。

既定の設定では、検証データの損失を監視することによる収束の検出は行われません。

勾配の絶対許容誤差。'GradientTolerance' と非負のスカラーから構成されるコンマ区切りのペアとして指定します。GradientTolerance は、Solver の値が 'bfgs''lbfgs' または 'sparsa' である場合に適用されます。

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

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

Solver で指定された最後のソルバーで fitrlinear が収束する場合、最適化が終了します。それ以外の場合、fitrlinearSolver で指定された次のソルバーを使用します。

例: 'GradientTolerance',eps

データ型: single | double

最適化反復の最大回数。'IterationLimit' と正の整数から構成されるコンマ区切りのペアとして指定します。IterationLimit は、Solver の値が 'bfgs''lbfgs' または 'sparsa' である場合に適用されます。

例: 'IterationLimit',1e7

データ型: single | double

双対 SGD 最適化の収束制御

すべて折りたたむ

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

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

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

Solver で指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver で指定された次のソルバーが使用されます。

例: 'BetaTolerance',1e-6

データ型: single | double

上位および下位プールのカルーシュ・キューン・タッカー (KKT) 相補性条件違反値の間における勾配差分の許容誤差。'DeltaGradientTolerance' と非負のスカラーから構成されるコンマ区切りのペアとして指定します。DeltaGradientTolerance は、Solver の値が 'dual' である場合のみ適用されます。

  • KKT 違反値の大きさが DeltaGradientTolerance より小さい場合、fitrlinear は最適化を終了させます。

  • Solver で指定された最後のソルバーで fitrlinear が収束する場合、最適化が終了します。それ以外の場合、fitrlinearSolver で指定された次のソルバーを使用します。

例: 'DeltaGapTolerance',1e-2

データ型: double | single

次回の収束チェックの前に処理するデータセット全体が通される回数。'NumCheckConvergence' と正の整数から構成されるコンマ区切りのペアとして指定します。

例: 'NumCheckConvergence',100

データ型: single | double

データを通す最大回数。'PassLimit' と正の整数から構成されるコンマ区切りのペアとして指定します。

データが完全に 1 回通されると、すべての観測値が処理されます。

データが通される回数が PassLimit になると、最適化が終了します。

例: 'PassLimit',5

データ型: single | double

最適化の収束を検出するためのデータ。'ValidationData' と cell 配列から構成されるコンマ区切りのペアとして指定します。

最適化時に、ValidationData の損失が定期的に推定されます。検証データの損失が増加する場合、最適化が終了します。詳細は、アルゴリズムを参照してください。交差検証を使用してハイパーパラメーターを最適化する方法については、CrossVal など交差検証のオプションを参照してください。

  • ValidationData(1) には、予測子データが X と同じ配置で格納されている m 行 p 列または p 行 m 列の非スパース行列またはスパース行列が格納されていなければなりません。学習データ X の予測子変数と ValidationData{1} の予測子変数は対応していなければなりません。両方のセットの観測値数が同じである必要はありません。

  • ValidationData(2) には、ValidationData{1} の観測値数に長さが対応する m 個の応答の配列が格納されていなければなりません。

  • オプションとして、観測値の重みの ValidationData(3) 次元数値ベクトルを m に格納できます。検証データに関する重みは、合計が 1 になるように正規化されます。

ValidationData を指定した場合にコマンド ラインで検定損失を表示するには、0 より大きい値を Verbose に指定します。

Solver で指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver で指定された次のソルバーが使用されます。

既定の設定では、検証データの損失を監視することによる収束の検出は行われません。

BFGS、LBFGS および SpaRSA の収束制御

すべて折りたたむ

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

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

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

Solver で指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver で指定された次のソルバーが使用されます。

例: 'BetaTolerance',1e-6

データ型: single | double

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

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

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

指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver で指定された次のソルバーが使用されます。

例: 'GradientTolerance',1e-5

データ型: single | double

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

SpaRSA の場合、'HessianHistorySize' はサポートされません。

例: 'HessianHistorySize',10

データ型: single | double

最適化反復の最大回数。'IterationLimit' と正の整数から構成されるコンマ区切りのペアとして指定します。IterationLimit は、Solver の値が 'bfgs''lbfgs' または 'sparsa' である場合に適用されます。

例: 'IterationLimit',500

データ型: single | double

最適化の収束を検出するためのデータ。'ValidationData' と cell 配列から構成されるコンマ区切りのペアとして指定します。

最適化時に、ValidationData の損失が定期的に推定されます。検証データの損失が増加する場合、最適化が終了します。詳細は、アルゴリズムを参照してください。交差検証を使用してハイパーパラメーターを最適化する方法については、CrossVal など交差検証のオプションを参照してください。

  • ValidationData(1) には、予測子データが X と同じ配置で格納されている m 行 p 列または p 行 m 列の非スパース行列またはスパース行列が格納されていなければなりません。学習データ X の予測子変数と ValidationData{1} の予測子変数は対応していなければなりません。両方のセットの観測値数が同じである必要はありません。

  • ValidationData(2) には、ValidationData{1} の観測値数に長さが対応する m 個の応答の配列が格納されていなければなりません。

  • オプションとして、観測値の重みの ValidationData(3) 次元数値ベクトルを m に格納できます。検証データに関する重みは、合計が 1 になるように正規化されます。

ValidationData を指定した場合にコマンド ラインで検定損失を表示するには、0 より大きい値を Verbose に指定します。

Solver で指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver で指定された次のソルバーが使用されます。

既定の設定では、検証データの損失を監視することによる収束の検出は行われません。

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

すべて折りたたむ

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

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

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

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

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

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

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

メモ

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

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

  • Lambdafitrlinear は、既定では範囲 [1e-5/NumObservations,1e5/NumObservations] の対数スケールで、正の値を探索します。

  • Learnerfitrlinear は、'svm''leastsquares' で探索します。

  • Regularizationfitrlinear は、'ridge''lasso' で探索します。

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

load carsmall
params = hyperparameters('fitrlinear',[Horsepower,Weight],MPG);
params(1).Range = [1e-3,2e4];

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'

詳細については、bayesopt の名前と値のペアの引数 AcquisitionFunctionName または獲得関数のタイプを参照してください。

'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)

データ型: 構造体

出力引数

すべて折りたたむ

学習済みの線形回帰モデル。RegressionLinear モデル オブジェクトまたは RegressionPartitionedLinear 交差検証済みモデル オブジェクトとして返されます。

名前と値のペアの引数 KFoldHoldoutCrossValCVPartition のいずれかを設定した場合、MdlRegressionPartitionedLinear 交差検証済みモデル オブジェクトになります。それ以外の場合、MdlRegressionLinear モデル オブジェクトになります。

Mdl のプロパティを参照するには、ドット表記を使用します。たとえば、推定された係数のベクトルまたは行列を表示するには、コマンド ウィンドウに Mdl.Beta と入力します。

メモ

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

最適化の詳細。構造体配列として返されます。

各フィールドには、最終的な値または名前と値のペアの引数の指定が格納されます。たとえば、Objective は最適化が終了したときの目的関数の値です。多次元フィールドの行は Lambda の値に、列は Solver の値に対応します。

次の表で、主なフィールドを説明します。

フィールド説明
TerminationStatus
  • 最適化の終了理由

  • TerminationCode の値に対応

FitTime秒単位の経過実時間
History

各反復における最適化情報の構造体配列。Solver フィールドには、整数符号化を使用してソルバーのタイプが格納されます。

整数ソルバー
1SGD
2ASGD
3SVM 用の双対 SGD
4LBFGS
5BFGS
6SpaRSA

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

FitInfo を確認して、収束が満足できるものであるかどうかを評価することをお勧めします。

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

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

メモ

Learner'leastsquares' の場合、目的関数の損失項は MSE の半分になります。既定の設定では、loss は MSE を返します。したがって、loss を使用して再代入誤差または学習誤差をチェックした場合、loss によって返される MSE は、FitInfo の最適化結果や、Verbose を使用して正の詳細レベルを設定した場合にコマンド ラインに返される結果と異なります。

詳細

すべて折りたたむ

ウォーム スタート

"ウォーム スタート" は、収束時間を短縮するために最適化ルーチンに与えられるベータ係数およびバイアス項の初期推定値です。

低次元データの代替方法

高次元の線形分類および回帰モデルでは比較的高速に目的関数を最小化できますが、精度が犠牲になり、予測子変数が数値のみに制限され、モデルがパラメーターに関して線形でなければなりません。予測子データセットが低~中次元の場合、または種類の異なる変数が混在している場合、適切な分類または回帰近似関数を使用する必要があります。次の表は、どの近似関数が低次元データセットに適しているかを判断するために役立ちます。

近似させるモデル関数主なアルゴリズムの違い
SVM
  • 非線形カーネル変換に適している、予測子変数のグラム行列を計算します。

  • quadprog を使用して二次計画法で SMO、ISDA または L1 最小化により双対問題を解きます。

線形回帰
  • 正則化を行わない最小二乗: fitlm

  • LASSO ペナルティを使用する正則化最小二乗: lasso

  • リッジ回帰: ridge または lasso

  • lasso は、循環的な座標降下を実装します。

ロジスティック回帰
  • 正則化を行わないロジスティック回帰: fitglm

  • LASSO ペナルティを使用する正則化ロジスティック回帰: lassoglm

  • fitglm は、反復的に再重み付けした最小二乗を実装します。

  • lassoglm は、循環的な座標降下を実装します。

ヒント

  • 観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns' を指定することをお勧めします。このようにすると、最適化実行時間が大幅に短縮される可能性があります。

  • X が高次元で Regularization'ridge' の場合に最適化の精度を向上させるには、次の Solver の組み合わせのいずれかを設定します。

    • 'sgd'

    • 'asgd'

    • 'dual' (Learner'svm' の場合)

    • {'sgd','lbfgs'}

    • {'asgd','lbfgs'}

    • {'dual','lbfgs'} (Learner'svm' の場合)

    他の組み合わせでは、最適化の精度が低下する可能性があります。

  • X が中~低次元で Regularization'ridge' の場合に最適化の精度を向上させるには、Solver'bfgs' に設定します。

  • Regularization'lasso' の場合、次の Solver の組み合わせのいずれかを設定します。

    • 'sgd'

    • 'asgd'

    • 'sparsa'

    • {'sgd','sparsa'}

    • {'asgd','sparsa'}

  • SGD と ASGD のいずれかを選択する場合、以下を考慮します。

    • SGD は反復あたりの時間が短くなりますが、収束するまでに必要な反復回数が多くなります。

    • ASGD は収束するまでに必要な反復回数が少なくなりますが、反復あたりの時間が長くなります。

  • X に含まれている観測値の数が少なく、予測子変数の数が多い場合、次のようにします。

    • 'PostFitBias',true を指定します。

    • ソルバーが SGD または ASGD の場合、PassLimit を 1 より大きい正の整数 (5 や 10 など) に設定します。このように設定すると、多くの場合に精度が向上します。

  • ソルバーが SGD または ASGD の場合、BatchSize は収束速度に影響を与えます。

    • BatchSize が小さすぎる場合、fitrlinear が最小値を計算するための反復回数は多くなりますが、反復ごとの勾配の計算時間は短くなります。

    • BatchSize が大きすぎる場合、fitrlinear が最小値を計算するための反復回数は少なくなりますが、反復ごとの勾配の計算時間は長くなります。

  • 学習率 (LearnRate を参照) が大きいと、最小値への収束が高速になりますが、発散 (最小値の限度を超える状態) の可能性があります。学習率が小さいと最小値への収束が保証されますが、終了までに時間がかかる可能性があります。

  • LASSO ペナルティを使用する場合は、さまざまな値の TruncationPeriod を試してください。たとえば、TruncationPeriod110 に設定してから 100 に設定します。

  • 効率のため、fitrlinear は予測子データを標準化しません。X を標準化するには、次のように入力します。

    X = bsxfun(@rdivide,bsxfun(@minus,X,mean(X,2)),std(X,0,2));

    このコードでは、予測子が行、観測値が列に対応するように X が配置されている必要があります。また、メモリを節約するため、このコードは元の予測子データを標準化されたデータに置き換えます。

  • モデルに学習をさせた後で、新しいデータについて応答を予測する C/C++ コードを生成できます。C/C++ コードの生成には MATLAB Coder™ が必要です。詳細については、コード生成の紹介を参照してください。

アルゴリズム

  • ValidationData を指定した場合、目的関数の最適化時に以下が行われます。

    • fitrlinear は、現在のモデルを使用して ValidationData の検定損失を定期的に推定し、最小の推定値を追跡します。

    • fitrlinear は、検定損失を推定するときに、推定値を最小の推定値と比較します。

    • 以後の検定損失の推定値が最小推定値の 5 倍より大きくなった場合、fitrlinear は最適化を終了します。

  • ValidationData を指定して交差検証ルーチン (CrossValCVPartitionHoldout または KFold) を実装した場合、次のようになります。

    1. fitrlinear は、指定された交差検証ルーチンに従って XY を無作為に分割します。

    2. fitrlinear は、学習データの分割を使用してモデルに学習をさせます。目的関数の最適化時に、fitrlinear は最適化を終了させるための他の可能な方法として ValidationData を使用します (詳細については、前の項目を参照)。

    3. 終了条件が満たされると、fitrlinear は最適化された線形係数および切片に基づいて学習済みのモデルを構築します。

      1. k 分割交差検証を実装した場合、fitrlinear が網羅していない学習セット分割があると、fitrlinear はステップ 2 に戻り、次の学習セット分割を使用して学習を行います。

      2. それ以外の場合、fitrlinear は学習を終了させ、交差検証済みのモデルを返します。

    4. 交差検証済みモデルの品質を判断できます。次に例を示します。

      • ステップ 1 のホールドアウトまたは分割外データを使用して検定損失を決定するには、交差検証済みのモデルを kfoldLoss に渡します。

      • ステップ 1 のホールドアウトまたは分割外データで観測値を予測するには、交差検証済みのモデルを kfoldPredict に渡します。

参照

[1] Ho, C. H. and C. J. Lin. “Large-Scale Linear Support Vector Regression.” Journal of Machine Learning Research, Vol. 13, 2012, pp. 3323–3348.

[2] Hsieh, C. J., K. W. Chang, C. J. Lin, S. S. Keerthi, and S. Sundararajan. “A Dual Coordinate Descent Method for Large-Scale Linear SVM.” Proceedings of the 25th International Conference on Machine Learning, ICML ’08, 2001, pp. 408–415.

[3] Langford, J., L. Li, and T. Zhang. “Sparse Online Learning Via Truncated Gradient.” J. Mach. Learn. Res., Vol. 10, 2009, pp. 777–801.

[4] Nocedal, J. and S. J. Wright. Numerical Optimization, 2nd ed., New York: Springer, 2006.

[5] Shalev-Shwartz, S., Y. Singer, and N. Srebro. “Pegasos: Primal Estimated Sub-Gradient Solver for SVM.” Proceedings of the 24th International Conference on Machine Learning, ICML ’07, 2007, pp. 807–814.

[6] Wright, S. J., R. D. Nowak, and M. A. T. Figueiredo. “Sparse Reconstruction by Separable Approximation.” Trans. Sig. Proc., Vol. 57, No 7, 2009, pp. 2479–2493.

[7] Xiao, Lin. “Dual Averaging Methods for Regularized Stochastic Learning and Online Optimization.” J. Mach. Learn. Res., Vol. 11, 2010, pp. 2543–2596.

[8] Xu, Wei. “Towards Optimal One Pass Large Scale Learning with Averaged Stochastic Gradient Descent.” CoRR, abs/1107.2490, 2011.

拡張機能

R2016a で導入