ドキュメンテーション

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

fitclinear

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

説明

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

多数の予測子変数が含まれている高次元データセットに対する計算時間を短縮するには、fitclinear を使用して線形分類モデルに学習をさせます。低~中次元の予測子データセットについては、低次元データの代替方法を参照してください。

誤り訂正出力符号を使用して SVM またはロジスティック回帰バイナリ分類器を結合することによりマルチクラス学習用の線形分類モデルに学習をさせる方法については、fitcecoc を参照してください。

Mdl = fitclinear(X,Y) は、バイナリ サポート ベクター マシンを予測子 X と クラス ラベル Y にあてはめた結果が格納されている、学習済みの線形分類モデル オブジェクトを返します。

Mdl = fitclinear(X,Y,Name,Value) は、1 つ以上の Name,Value ペア引数で指定された追加オプションを使用して、学習済みの線形分類モデルを返します。たとえば、予測子行列の列が観測値に対応するように指定したり、ロジスティック回帰の実装や交差検証を指定することができます。Name,Value ペア引数 Kfold を使用して交差検証を実行することをお勧めします。交差検証の結果により、モデルがどの程度一般化を行うかを判断します。

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

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

すべて折りたたむ

サポート ベクター マシン、双対 SGD およびリッジ正則化を使用して、バイナリ線形分類モデルに学習をさせます。

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

load nlpdata

X は予測子データのスパース行列、Y はクラス ラベルの categorical ベクトルです。データには 2 つを超えるクラスがあります。

Statistics and Machine Learning Toolbox™ のドキュメンテーション Web ページに対応するラベルを特定します。

Ystats = Y == 'stats';

あるドキュメンテーション Web ページの単語数が Statistics and Machine Learning Toolbox™ ドキュメンテーションによるものであるかどうかを識別できるバイナリ線形分類モデルに学習をさせます。データセット全体を使用してモデルに学習をさせます。近似の要約を抽出して、最適化アルゴリズムによるモデルがどの程度データにあてはまるかを判断します。

rng(1); % For reproducibility 
[Mdl,FitInfo] = fitclinear(X,Ystats)
Mdl = 
  ClassificationLinear
      ResponseName: 'Y'
        ClassNames: [0 1]
    ScoreTransform: 'none'
              Beta: [34023x1 double]
              Bias: -1.0059
            Lambda: 3.1674e-05
           Learner: 'svm'


  Properties, Methods

FitInfo = struct with fields:
                    Lambda: 3.1674e-05
                 Objective: 5.3783e-04
                 PassLimit: 10
                 NumPasses: 10
                BatchLimit: []
             NumIterations: 238561
              GradientNorm: NaN
         GradientTolerance: 0
      RelativeChangeInBeta: 0.0562
             BetaTolerance: 1.0000e-04
             DeltaGradient: 1.4582
    DeltaGradientTolerance: 1
           TerminationCode: 0
         TerminationStatus: {'Iteration limit exceeded.'}
                     Alpha: [31572x1 double]
                   History: []
                   FitTime: 0.2112
                    Solver: {'dual'}

MdlClassificationLinear モデルです。Mdl と学習データまたは新しいデータを loss に渡して、標本内分類誤差を調べることができます。または、Mdl と新しい予測子データを predict に渡して、新しい観測値のクラス ラベルを予測することができます。

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

ロジスティック回帰学習器を使用する線形分類モデルに適した LASSO ペナルティの強度を決定するため、5 分割の交差検証を実装します。

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

load nlpdata

X は予測子データのスパース行列、Y はクラス ラベルの categorical ベクトルです。データには 2 つを超えるクラスがあります。

モデルでは、ある Web ページの単語数が Statistics and Machine Learning Toolbox™ ドキュメンテーションによるものであるかどうかを識別できなければなりません。したがって、Statistics and Machine Learning Toolbox™ のドキュメンテーション Web ページに対応するラベルを識別します。

Ystats = Y == 'stats';

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

Lambda = logspace(-6,-0.5,11);

モデルを交差検証します。実行速度を向上させるため、予測子データを転置し、観測値が列単位であることを指定します。SpaRSA を使用して係数を推定します。目的関数の勾配の許容誤差を 1e-8 に下げます。

X = X'; 
rng(10); % For reproducibility
CVMdl = fitclinear(X,Ystats,'ObservationsIn','columns','KFold',5,...
    'Learner','logistic','Solver','sparsa','Regularization','lasso',...
    'Lambda',Lambda,'GradientTolerance',1e-8)
CVMdl = 
  classreg.learning.partition.ClassificationPartitionedLinear
    CrossValidatedModel: 'Linear'
           ResponseName: 'Y'
        NumObservations: 31572
                  KFold: 5
              Partition: [1×1 cvpartition]
             ClassNames: [0 1]
         ScoreTransform: 'none'


  Properties, Methods

numCLModels = numel(CVMdl.Trained)
numCLModels = 5

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

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

Mdl1 = CVMdl.Trained{1}
Mdl1 = 
  ClassificationLinear
      ResponseName: 'Y'
        ClassNames: [0 1]
    ScoreTransform: 'logit'
              Beta: [34023×11 double]
              Bias: [-13.2904 -13.2904 -13.2904 -13.2904 -9.9357 -7.0782 -5.4335 -4.5473 -3.4223 -3.1649 -2.9795]
            Lambda: [1.0000e-06 3.5481e-06 1.2589e-05 4.4668e-05 1.5849e-04 5.6234e-04 0.0020 0.0071 0.0251 0.0891 0.3162]
           Learner: 'logistic'


  Properties, Methods

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

交差検証分類誤差を推定します。

ce = kfoldLoss(CVMdl);

11 個の正則化強度があるので、ce は 1 行 11 列の分類誤差率のベクトルです。

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

Mdl = fitclinear(X,Ystats,'ObservationsIn','columns',...
    'Learner','logistic','Solver','sparsa','Regularization','lasso',...
    'Lambda',Lambda,'GradientTolerance',1e-8);
numNZCoeff = sum(Mdl.Beta~=0);

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

figure;
[h,hL1,hL2] = plotyy(log10(Lambda),log10(ce),...
    log10(Lambda),log10(numNZCoeff)); 
hL1.Marker = 'o';
hL2.Marker = 'o';
ylabel(h(1),'log_{10} classification error')
ylabel(h(2),'log_{10} nonzero-coefficient frequency')
xlabel('log_{10} Lambda')
title('Test-Sample Statistics')
hold off

予測子変数のスパース性と分類誤差の低さのバランスがとれている正則化強度のインデックスを選択します。この場合、10-410-1 の値で十分なはずです。

idxFinal = 7;

選択した正則化強度のモデルを Mdl から選択します。

MdlFinal = selectModels(Mdl,idxFinal);

MdlFinal は、1 つの正則化強度が含まれている ClassificationLinear モデルです。新しい観測値のラベルを推定するには、MdlFinal と新しいデータを predict に渡します。

この例では、fitclinear を使用して線形分類器の交差検証損失を最小化する方法を示します。この例では、NLP のデータセットを使用します。

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

load nlpdata

X は予測子データのスパース行列、Y はクラス ラベルの categorical ベクトルです。データには 2 つを超えるクラスがあります。

モデルでは、ある Web ページの単語数が Statistics and Machine Learning Toolbox™ ドキュメンテーションによるものであるかどうかを識別できなければなりません。関連するラベルを識別します。

X = X';
Ystats = Y == 'stats';

'auto' パラメーターを使用して分類を最適化します。

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

rng default
Mdl = fitclinear(X,Ystats,'ObservationsIn','columns','Solver','sparsa',...
    'OptimizeHyperparameters','auto','HyperparameterOptimizationOptions',...
    struct('AcquisitionFunctionName','expected-improvement-plus'))
|=====================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Lambda |      Learner |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |
|=====================================================================================================|
|    1 | Best   |    0.041619 |      3.7102 |    0.041619 |    0.041619 |     0.077903 |     logistic |
|    2 | Best   |  0.00072849 |      3.6146 |  0.00072849 |   0.0028767 |   2.1405e-09 |     logistic |
|    3 | Accept |    0.049221 |       4.383 |  0.00072849 |  0.00075737 |      0.72101 |          svm |
|    4 | Accept |  0.00079184 |      4.0362 |  0.00072849 |  0.00074989 |   3.4734e-07 |          svm |
|    5 | Accept |  0.00082351 |      3.6567 |  0.00072849 |  0.00072924 |   1.1738e-08 |     logistic |
|    6 | Accept |  0.00085519 |      3.8855 |  0.00072849 |  0.00072746 |   2.4529e-09 |          svm |
|    7 | Accept |  0.00079184 |      3.8795 |  0.00072849 |  0.00072518 |   3.1854e-08 |          svm |
|    8 | Accept |  0.00088686 |      4.1503 |  0.00072849 |  0.00072236 |   3.1717e-10 |          svm |
|    9 | Accept |  0.00076017 |      3.5691 |  0.00072849 |  0.00068304 |   3.1837e-10 |     logistic |
|   10 | Accept |  0.00079184 |       4.203 |  0.00072849 |  0.00072853 |   1.1258e-07 |          svm |
|   11 | Accept |  0.00076017 |      3.8095 |  0.00072849 |  0.00072144 |   2.1214e-09 |     logistic |
|   12 | Accept |  0.00079184 |      6.3278 |  0.00072849 |  0.00075984 |   2.2819e-07 |     logistic |
|   13 | Accept |  0.00072849 |      3.9257 |  0.00072849 |  0.00075648 |   6.6161e-08 |     logistic |
|   14 | Best   |  0.00069682 |      4.1709 |  0.00069682 |  0.00069781 |   7.4324e-08 |     logistic |
|   15 | Best   |  0.00066515 |      4.1086 |  0.00066515 |  0.00068861 |   7.6994e-08 |     logistic |
|   16 | Accept |  0.00076017 |       3.685 |  0.00066515 |  0.00068881 |   7.0687e-10 |     logistic |
|   17 | Accept |  0.00066515 |      4.1488 |  0.00066515 |   0.0006838 |   7.7159e-08 |     logistic |
|   18 | Accept |   0.0012353 |      4.5418 |  0.00066515 |  0.00068521 |   0.00083275 |          svm |
|   19 | Accept |  0.00076017 |      4.0808 |  0.00066515 |  0.00068508 |   5.0781e-05 |          svm |
|   20 | Accept |  0.00085519 |      3.1398 |  0.00066515 |  0.00068527 |   0.00022104 |          svm |
|=====================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Lambda |      Learner |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |
|=====================================================================================================|
|   21 | Accept |  0.00082351 |      6.2676 |  0.00066515 |  0.00068569 |   4.5396e-06 |          svm |
|   22 | Accept |   0.0010769 |      14.789 |  0.00066515 |  0.00070107 |   5.1931e-06 |     logistic |
|   23 | Accept |  0.00095021 |      16.747 |  0.00066515 |  0.00069594 |   1.3051e-06 |     logistic |
|   24 | Accept |  0.00085519 |      5.2072 |  0.00066515 |  0.00069625 |   1.6481e-05 |          svm |
|   25 | Accept |  0.00085519 |       4.265 |  0.00066515 |  0.00069643 |    1.157e-06 |          svm |
|   26 | Accept |  0.00079184 |      3.4761 |  0.00066515 |  0.00069667 |   1.0016e-08 |          svm |
|   27 | Accept |  0.00072849 |      3.7038 |  0.00066515 |  0.00069848 |   4.2234e-08 |     logistic |
|   28 | Accept |    0.049221 |     0.48067 |  0.00066515 |  0.00069842 |       3.1608 |     logistic |
|   29 | Accept |  0.00085519 |      4.0213 |  0.00066515 |  0.00069855 |   8.5626e-10 |          svm |
|   30 | Accept |  0.00076017 |      3.6389 |  0.00066515 |  0.00069837 |   3.1946e-10 |     logistic |

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

Best observed feasible point:
      Lambda      Learner 
    __________    ________

    7.6994e-08    logistic

Observed objective function value = 0.00066515
Estimated objective function value = 0.00069837
Function evaluation time = 4.1086

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

    7.4324e-08    logistic

Estimated objective function value = 0.00069837
Estimated function evaluation time = 4.0948
Mdl = 
  ClassificationLinear
      ResponseName: 'Y'
        ClassNames: [0 1]
    ScoreTransform: 'logit'
              Beta: [34023×1 double]
              Bias: -10.1723
            Lambda: 7.4324e-08
           Learner: 'logistic'


  Properties, Methods

入力引数

すべて折りたたむ

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

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

メモ

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

データ型: single | double

分類モデルが学習するクラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。

  • fitclinear はバイナリ分類のみをサポートします。Y に正確に 2 つの異なるクラスを含めるか、名前と値のペアの引数 'ClassNames' を使用して学習用の 2 つのクラスを指定しなければなりません。マルチクラス学習については、fitcecoc を参照してください。

  • Y が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。

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

  • ClassNames 名前と値のペアの引数を使用したクラスの順序を指定することをお勧めします。

データ型: char | string | cell | カテゴリカル | logical | single | double

メモ:

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

  • 応答 (Y または ValidationData{2}) 内の NaN、空文字ベクトル ('')、空の string ("")、<missing> および <undefined> 要素

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

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

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

名前と値のペアの引数

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

例: 'ObservationsIn','columns','Learner','logistic','CrossVal','on' は、予測子行列の列が観測値に対応すること、ロジスティック回帰の実装、および 10 分割交差検証の実装を指定します。

メモ

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

線形分類のオプション

すべて折りたたむ

正則化項の強度。'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' または 'logistic' から構成されるコンマ区切りのペアとして指定します。

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

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

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

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

アルゴリズム応答の範囲損失関数
'svm'サポート ベクター マシンy ∊ {–1,1}。陽性クラスの場合は 1、それ以外の場合は –1ヒンジ: [y,f(x)]=max[0,1yf(x)]
'logistic'ロジスティック回帰'svm' と同じ逸脱度 (ロジスティック): [y,f(x)]=log{1+exp[yf(x)]}

例: 'Learner','logistic'

予測子データにおける観測値の次元。'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' でなければなりません。

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

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

  • X に 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'logistic' の場合、gjY(j) が陽性クラスであれば 1、そうでなければ -1 になります。Bias は、学習の場合は g の、交差検証の場合は分割内観測値の加重平均になります。

    • Learner'svm' の場合、Bias は 0 になります。

データ型: 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 を再度あてはめる

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

例: 'PostFitBias',true

データ型: logical

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

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

  • 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

その他の分類オプション

すべて折りたたむ

学習に使用するクラスの名前。'ClassNames' と categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列から構成されるコンマ区切りのペアとして指定します。ClassNames のデータ型は Y と同じでなければなりません。

ClassNames が文字配列の場合、各要素は配列の 1 つの "行" に対応しなければなりません。

ClassNames の使用目的は次のとおりです。

  • 学習時のクラスの順序を指定する。

  • クラスの順序に対応する入力または出力引数の次元の順序を指定する。たとえば、Cost の次元の順序や predict によって返される分類スコアの列の順序を指定するために ClassNames を使用します。

  • 学習用にクラスのサブセットを選択する。たとえば、Y に含まれているすべての異なるクラス名の集合が {'a','b','c'} であるとします。クラス 'a' および 'c' のみの観測値を使用してモデルに学習をさせるには、'ClassNames',{'a','c'} を指定します。

ClassNames の既定値は、Y に含まれているすべての異なるクラス名の集合です。

例: 'ClassNames',{'b','g'}

データ型: カテゴリカル | char | string | logical | single | double | cell

誤分類のコスト。'Cost' と正方行列または構造体から構成されるコンマ区切りペアとして指定します。

  • 正方行列 cost を指定する場合 ('Cost',cost)、cost(i,j) は真のクラスが i である点をクラス j に分類するコストです。つまり、行は真のクラスに、列は予測するクラスに対応します。cost の対応する行と列についてクラスの順序を指定するには、名前と値のペアの引数 ClassNames を使用します。

  • 構造体 S を指定する場合 ('Cost',S)、次の 2 つのフィールドが必要です。

    • S.ClassNames: Y と同じデータ型のクラス名を表す変数を含む。

    • S.ClassificationCosts。行と列の順序が S.ClassNames と同じコスト行列。

Cost の既定値は ones(K) – eye(K) です。K は異なるクラスの個数です。

fitclinearCost を使用して、Prior で指定されたクラスの事前確率を調整します。その後、fitclinear は調整した事前確率を学習に使用し、コスト行列を既定設定にリセットします。

例: 'Cost',[0 2; 1 0]

データ型: single | double | 構造体

各クラスの事前確率。'Prior''empirical''uniform'、数値ベクトルまたは構造体配列から構成されるコンマ区切りのペアとして指定します。

次の表は、事前確率の設定に使用できるオプションの一覧です。

説明
'empirical'クラスの事前確率は、Y のクラスの相対的頻度です。
'uniform'クラスの事前確率はいずれも 1/K (K はクラス数) となります。
数値ベクトル各要素はクラスの事前確率です。Y 内の順序に従って要素の順序を指定します。名前と値のペアの引数 'ClassNames' を使用して順序を指定した場合は、それに従って要素の順序が設定されます。
構造体配列

構造体 S には 2 つのフィールドがあります。

  • S.ClassNames: Y と同じ型の変数のクラス名が格納されます。

  • S.ClassProbs: 対応する事前確率のベクトルが格納されます。

fitclinear は、合計が 1 になるように Prior の事前確率を正規化します。

例: 'Prior',struct('ClassNames',{{'setosa','versicolor'}},'ClassProbs',1:2)

データ型: char | string | double | single | 構造体

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

次の表は、使用可能な文字ベクトルおよび string スカラーをまとめています。

説明
'doublelogit'1/(1 + e–2x)
'invlogit'log(x / (1 – x))
'ismax'最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを 0 に設定します。
'logit'1/(1 + e–x)
'none' または 'identity'x (変換なし)
'sign'x < 0 のとき –1
x = 0 のとき 0
x > 0 のとき 1
'symmetric'2x – 1
'symmetricismax'最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを –1 に設定します。
'symmetriclogit'2/(1 + e–x) – 1

MATLAB® 関数またはユーザー定義関数の場合は、スコア変換用の関数ハンドルを使用します。関数ハンドルは、行列 (元のスコア) を受け入れて同じサイズの行列 (変換したスコア) を返さなければなりません。

例: 'ScoreTransform','logit'

データ型: char | string | function_handle

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

fitclinear は、合計がそれぞれのクラスの事前確率の値になるように Weights を正規化します。

既定の設定では、Weightsones(n,1) です。nX の観測値数です。

データ型: double | single

交差検証オプション

すべて折りたたむ

交差検証フラグ。'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 回通されると、すべての観測値が fitclinear で処理されます。

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

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

例: 'PassLimit',5

データ型: single | double

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

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

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

  • ValidationData{2}Y は、データ型が同じでなければなりません。ValidationData{2} に含まれているすべての異なるラベルの集合は、Y に含まれているすべての異なるラベルの部分集合でなければなりません。

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

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

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

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

双対 SGD の収束制御

すべて折りたたむ

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

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

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

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

例: 'BetaTolerance',1e-6

データ型: single | double

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

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

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

例: '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}Y は、データ型が同じでなければなりません。ValidationData{2} に含まれているすべての異なるラベルの集合は、Y に含まれているすべての異なるラベルの部分集合でなければなりません。

  • オプションとして、観測値の重みの 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}Y は、データ型が同じでなければなりません。ValidationData{2} に含まれているすべての異なるラベルの集合は、Y に含まれているすべての異なるラベルの部分集合でなければなりません。

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

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

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

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

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

すべて折りたたむ

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

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

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

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

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

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

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

メモ

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

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

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

  • Learnerfitclinear は、'svm''logistic' で探索します。

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

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

load fisheriris
params = hyperparameters('fitclinear',meas,species);
params(1).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)

データ型: 構造体

出力引数

すべて折りたたむ

学習済みの線形分類モデル。ClassificationLinear モデル オブジェクトまたは ClassificationPartitionedLinear 交差検証済みモデル オブジェクトとして返されます。

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

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

メモ

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

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

各フィールドには、最終的な値または名前と値のペアの引数の指定が格納されます。たとえば、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'使用したハイパーパラメーター、観測された目的関数の値 (交差検証損失)、および最低 (最良) から最高 (最悪) までの観測値の順位が格納されているテーブル

詳細

すべて折りたたむ

ウォーム スタート

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

低次元データの代替方法

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

近似させるモデル関数主なアルゴリズムの違い
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 が小さすぎる場合、fitclinear が最小値を計算するための反復回数は多くなりますが、反復ごとの勾配の計算時間は短くなります。

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

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

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

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

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

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

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

アルゴリズム

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

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

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

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

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

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

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

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

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

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

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

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

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

参照

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

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

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

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

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

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

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

拡張機能

R2016a で導入