Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

fitclinear

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

説明

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

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

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

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

Mdl= fitclinear(Tbl,ResponseVarName)は、tableTbl内の予測子変数とTbl.ResponseVarName内のクラス ラベルを使用して、線形分類モデルを返します。

Mdl= fitclinear(Tbl,formula)は、tableTbl内の標本データを使用して、線形分類モデルを返します。入力引数formulaは、Mdlをあてはめるために使用するTbl内の予測子変数の応答およびサブセットの説明モデルです。

Mdl= fitclinear(Tbl,Y)は、tableTbl内の予測子変数とベクトルY内のクラス ラベルを使用して、線形分類モデルを返します。

Mdl= fitclinear(X,Y,Name,Value)では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値のペアの引数を使用してオプションを指定します。たとえば、予測子行列の列が観測値に対応するように指定したり、ロジスティック回帰の実装や交差検証を指定することができます。名前と値のペアの引数'Kfold'を使用して交差検証を行うことをお勧めします。交差検証の結果により、モデルがどの程度一般化を行うかを判断します。

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

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

すべて折りたたむ

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

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

loadnlpdata

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.1290 Solver: {'dual'}

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

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

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

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

loadnlpdata

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

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

Ystats = Y =='stats';

1 0 - 6 1 0 - 0 . 5 の範囲で対数間隔で配置された 11 個の正則化強度を作成します。

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

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

X = X'; rng(10);% For reproducibilityCVMdl = fitclinear(X,Ystats,'ObservationsIn','columns','KFold',5,...'Learner','logistic','Solver','sparsa','Regularization','lasso',...'Lambda',Lambda,'GradientTolerance',1e-8)
CVMdl = ClassificationPartitionedLinear CrossValidatedModel: 'Linear' ResponseName: 'Y' NumObservations: 31572 KFold: 5 Partition: [1x1 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: [34023x11 double] Bias: [1x11 double] Lambda: [1x11 double] 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') holdoff

Figure contains 2 axes. Axes 1 with title Test-Sample Statistics contains an object of type line. Axes 2 contains an object of type line.

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

idxFinal = 7;

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

MdlFinal = selectModels(Mdl,idxFinal);

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

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

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

loadnlpdata

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

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

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

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

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

rngdefaultMdl = 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 | 4.9044 | 0.041619 | 0.041619 | 0.077903 | logistic | | 2 | Best | 0.00072849 | 5.5945 | 0.00072849 | 0.0028767 | 2.1405e-09 | logistic | | 3 | Accept | 0.049221 | 6.1402 | 0.00072849 | 0.00075737 | 0.72101 | svm | | 4 | Accept | 0.00079184 | 5.3151 | 0.00072849 | 0.00074989 | 3.4734e-07 | svm | | 5 | Accept | 0.00076017 | 5.0914 | 0.00072849 | 0.00072915 | 1.1738e-08 | logistic | | 6 | Accept | 0.00085519 | 5.1964 | 0.00072849 | 0.00072735 | 2.473e-09 | svm | | 7 | Accept | 0.00079184 | 4.7775 | 0.00072849 | 0.00072504 | 3.1854e-08 | svm | | 8 | Accept | 0.00088686 | 5.298 | 0.00072849 | 0.00072219 | 3.1717e-10 | svm | | 9 | Accept | 0.00076017 | 5.1956 | 0.00072849 | 0.00068087 | 3.1837e-10 | logistic | | 10 | Accept | 0.00079184 | 5.4134 | 0.00072849 | 0.00072894 | 1.1258e-07 | svm | | 11 | Accept | 0.00072849 | 5.1418 | 0.00072849 | 0.00070014 | 3.0254e-09 | logistic | | 12 | Best | 0.00066515 | 7.8795 | 0.00066515 | 0.00074706 | 1.9706e-07 | logistic | | 13 | Accept | 0.00066515 | 5.399 | 0.00066515 | 0.00062538 | 6.3482e-08 | logistic | | 14 | Accept | 0.00069682 | 5.9721 | 0.00066515 | 0.00065022 | 7.5612e-08 | logistic | | 15 | Accept | 0.00066515 | 5.839 | 0.00066515 | 0.00065314 | 8.6693e-08 | logistic | | 16 | Accept | 0.00069682 | 5.6975 | 0.00066515 | 0.00066257 | 9.3481e-08 | logistic | | 17 | Accept | 0.00076017 | 5.6478 | 0.00066515 | 0.00066275 | 8.4679e-10 | logistic | | 18 | Accept | 0.00088686 | 10.386 | 0.00066515 | 0.00066414 | 3.0816e-07 | logistic | | 19 | Accept | 0.0012669 | 4.9849 | 0.00066515 | 0.00066548 | 0.0008715 | svm | | 20 | Accept | 0.00085519 | 4.4458 | 0.00066515 | 0.00066703 | 5.2543e-05 | svm | |=====================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Lambda | Learner | | | result | | runtime | (observed) | (estim.) | | | |=====================================================================================================| | 21 | Accept | 0.00091854 | 3.8254 | 0.00066515 | 0.00066729 | 0.00023384 | svm | | 22 | Accept | 0.00079184 | 8.0508 | 0.00066515 | 0.00066745 | 4.1954e-06 | svm | | 23 | Accept | 0.0010452 | 21.446 | 0.00066515 | 0.00068253 | 7.1565e-06 | logistic | | 24 | Accept | 0.0010136 | 22.172 | 0.00066515 | 0.00067696 | 1.9805e-06 | logistic | | 25 | Accept | 0.00079184 | 5.1075 | 0.00066515 | 0.00067719 | 1.2205e-06 | svm | | 26 | Accept | 0.00076017 | 5.4636 | 0.00066515 | 0.00068293 | 3.6687e-08 | logistic | | 27 | Accept | 0.00076017 | 5.1963 | 0.00066515 | 0.00068328 | 9.8797e-09 | svm | | 28 | Accept | 0.00082351 | 6.4698 | 0.00066515 | 0.00068351 | 1.2236e-05 | svm | | 29 | Accept | 0.049221 | 0.9651 | 0.00066515 | 0.00068257 | 3.1358 | logistic | | 30 | Accept | 0.0013303 | 9.8921 | 0.00066515 | 0.00067789 | 0.00072735 | logistic |

Figure contains an axes. The axes with title Min objective vs. Number of function evaluations contains 2 objects of type line. These objects represent Min observed objective, Estimated min objective.

Figure contains an axes. The axes with title Objective function model contains 5 objects of type line, surface, contour. These objects represent Observed points, Model mean, Next point, Model minimum feasible.

__________________________________________________________ Optimization completed. MaxObjectiveEvaluations of 30 reached. Total function evaluations: 30 Total elapsed time: 251.5088 seconds Total objective function evaluation time: 202.9092 Best observed feasible point: Lambda Learner __________ ________ 1.9706e-07 logistic Observed objective function value = 0.00066515 Estimated objective function value = 0.00073542 Function evaluation time = 7.8795 Best estimated feasible point (according to models): Lambda Learner __________ ________ 8.6693e-08 logistic Estimated objective function value = 0.00067789 Estimated function evaluation time = 5.8339
Mdl = ClassificationLinear ResponseName: 'Y' ClassNames: [0 1] ScoreTransform: 'logit' Beta: [34023x1 double] Bias: -10.0538 Lambda: 8.6693e-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またはTblの観測値の数と等しくなければなりません。

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

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

モデルを学習させるために使用する標本データ。テーブルとして指定します。Tblの各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。オプションとして、Tblに応答変数用の列を 1 つ追加できます。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。

  • Tblに応答変数が含まれている場合にTbl内の他の変数をすべて予測子として使用するには、ResponseVarNameを使用して応答変数を指定します。

  • Tblに応答変数が含まれている場合にTbl内の他の変数の一部のみを予測子として使用するには、formulaを使用して式を指定します。

  • Tblに応答変数が含まれていない場合は、Yを使用して応答変数を指定します。応答変数の長さとTblの行数は等しくなければなりません。

データ型:table

応答変数の名前。Tbl内の変数の名前で指定します。

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

応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。Yが文字配列である場合、応答変数の各要素は配列の 1 つの行に対応しなければなりません。

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

データ型:char|string

応答変数および予測子変数サブセットの説明モデル。'Y~x1+x2+x3'という形式の文字ベクトルまたは string スカラーを指定します。この形式では、Yは応答変数を、x1x2およびx3は予測子変数を表します。

モデルに学習をさせるための予測子としてTbl内の変数のサブセットを指定するには、式を使用します。式を指定した場合、formulaに現れないTbl内の変数は使用されません。

式の変数名はTblの変数名 (Tbl.Properties.VariableNames) であり、有効な MATLAB®識別子でなければなりません。関数isvarnameを使用してTblの変数名を検証できます。変数名が有効でない場合、関数matlab.lang.makeValidNameを使用してそれらを変換できます。

データ型:char|string

メモ:

ソフトウェアは、NaN、空の文字ベクトル ('')、空の string ("")、、およびの要素を欠損値として扱い、以下のいずれかの特性をもつ観測値を削除します。

  • 応答変数 (たとえば、YまたはValidationData{2}) の欠損値

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

  • NaN値または重み0(たとえば、WeightsまたはValidationData{3}内の値)

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

名前と値のペアの引数

オプションの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 は学習標本のサイズです。

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

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

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

    • fitclinearは、指定された正則化強度ごとに係数の推定値を返します。

例:'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 , 1 y f ( x ) ]
'logistic' ロジスティック回帰 'svm'と同じ 逸脱度 (ロジスティック): [ y , f ( x ) ] = log { 1 + exp [ y f ( x ) ] }

例:'Learner','logistic'

予測子データにおける観測値の次元。'rows'または'columns'として指定します。

メモ

観測値が列に対応するように予測子行列を配置して'ObservationsIn','columns'を指定すると、計算時間が大幅に短縮される可能性があります。table の予測子データに対して'ObservationsIn','columns'を指定することはできません。

例:'ObservationsIn','columns'

データ型:char|string

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

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

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

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

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

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

ヒント

  • 予測子変数を選択する場合は、'lasso'を指定します。変数の選択の詳細については、特徴選択の紹介を参照してください。

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

例:'Regularization','lasso'

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

説明 制限
'sgd' 確率的勾配降下法 (SGD)[4][2]
'asgd' 平均化確率的勾配降下法 (ASGD)[7]
'dual' SVM 用の双対 SGD[1][6] Regularization“岭”Learner'svm'でなければなりません。
'bfgs' Broyden-Fletcher-Goldfarb-Shanno 準ニュートン アルゴリズム (BFGS)[3] Xの次元数が非常に多い場合は非効率的です。
'lbfgs' 記憶制限 BFGS (LBFGS)[3] Regularization“岭”でなければなりません。
'sparsa' 可分近似によるスパース再構成 (SpaRSA)[5] 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がコマンド ラインに表示する診断情報の量を制御します。

説明
0 fitclinearは診断情報を表示しません。
1 fitclinearは、目的関数の値や勾配の大きさなどの診断情報を定期的に表示および格納します。診断情報は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“岭”の場合、LearnRateは初期学習率 γ0を指定します。fitclinearは、次の式を使用して、反復 t、γtについての学習率を決定します。

    γ t = γ 0 ( 1 + λ γ 0 t ) 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 = { β ^ j u t if β ^ j > u t , 0 if | β ^ j | u t , β ^ j + u t if β ^ j < u t .

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

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

Regularization“岭”の場合、TruncationPeriodは無視されます。

例:“TruncationPeriod”,100

データ型:single|double

その他の分類オプション

すべて折りたたむ

カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。説明は、予測子データの行に観測値、列に予測子があると仮定しています。

説明
正の整数のベクトル

ベクトルの各エントリは、カテゴリカル変数が含まれている予測子データの列に対応するインデックス値です。インデックス値の範囲は 1 ~pです。pはモデルの学習に使用した予測子の数です。

fitclinearが入力変数のサブセットを予測子として使用する場合、関数はサブセットのみを使用して予測子にインデックスを作成します。応答変数、観測値の重み変数、および関数で使用されないその他の変数は、'CategoricalPredictors'値でカウントされません。

logical ベクトル

trueというエントリは、予測子データの対応する列がカテゴリカル変数であることを意味します。ベクトルの長さはpです。

文字行列 行列の各行は予測子変数の名前です。名前はPredictorNamesのエントリに一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。
文字ベクトルの cell 配列または string 配列 配列の各要素は予測子変数の名前です。名前はPredictorNamesのエントリに一致しなくてはなりません。
'all' すべての予測子がカテゴリカルです。

既定では、予測子データがテーブル (Tbl) 内にある場合、fitclinearは、その変数が logical ベクトル、categorical ベクトル、文字配列、string 配列または文字ベクトルの cell 配列のいずれかである場合に、変数を categorical であると見なします。予測子データが行列 (X) である場合、fitclinearはすべての予測子が連続的であると見なします。他の予測子をカテゴリカル予測子として指定するには、名前と値の引数'CategoricalPredictors'を使用してそれらを指定します。

特定されたカテゴリカル予測子に対して,fitclinearはカテゴリカル変数に順序が設定されていないか順序が設定されているかに応じて、2 つの異なる方式を使用してダミー変数を作成します。順序付けのないカテゴリカル変数の場合、fitclinearは、そのカテゴリカル変数の各レベルについて 1 つずつダミー変数を作成します。順序付けされたカテゴリカル変数の場合、fitclinearは、カテゴリの数よりも 1 つ少ないダミー変数を作成します。詳細については、ダミー変数の自動作成を参照してください。

例:'CategoricalPredictors','all'

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

学習に使用するクラスの名前。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列として指定します。ClassNamesのデータ型はTbl内の応答変数またはYと同じでなければなりません。

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

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

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

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

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

ClassNamesの既定値は、Tbl内の応答変数またはYに含まれているすべての異なるクラス名の集合です。

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

データ型:categorical|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を使用して、之前で指定されたクラスの事前確率を調整します。その後、fitclinearは調整した事前確率を学習に使用し、コスト行列を既定設定にリセットします。

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

データ型:single|double|struct

予測子変数名。一意な名前の string 配列または一意な文字ベクトルの cell 配列として指定します。'PredictorNames'の機能は、学習データの提供方法によって決まります。

  • XYを指定した場合、'PredictorNames'を使用してX内の予測子変数に名前を割り当てることができます。

    • PredictorNames内の名前の順序は、Xの予測子の順序に一致しなければなりません。Xが既定の方向 (行に観測値、列に予測子) をもつと仮定すると、PredictorNames{1}X(:,1)の名前、PredictorNames{2}X(:,2)の名前 (以下同様) になります。また、size(X,2)numel(PredictorNames)は等しくなければなりません。

    • 既定ではPredictorNames{'x1','x2',...}です。

  • Tblが与えられた場合、'PredictorNames'を使用して学習に使用する予測子変数を選択できます。つまり、fitclinearは、学習中にPredictorNamesの予測子変数と応答変数のみを使用します。

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

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

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

例:'PredictorNames',{'SepalLength','SepalWidth','PetalLength','PetalWidth'}

データ型:string|cell

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

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

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

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

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

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

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

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

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

応答変数名。文字ベクトルまたは string スカラーとして指定します。

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

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

例:'ResponseName','response'

データ型:char|string

スコア変換。文字ベクトル、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

観測値の重み。非負の数値ベクトルまたはTbl内の変数の名前を指定します。ソフトウェアは、XまたはTblの各観測値に、Weightsの対応する値で重みを付けます。Weightsの長さは、XまたはTblの観測値の数と等しくなければなりません。

入力データをテーブルTblとして指定した場合、Weightsは数値ベクトルが含まれているTbl内の変数の名前にすることができます。この場合、Weightsには文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、重みベクトルWTbl.Wとして格納されている場合、'W'として指定します。それ以外の場合、モデルに学習をさせるときに、Tblの列はWを含めてすべて予測子または応答変数として扱われます。

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

合計が各クラスの事前確率の値と等しくなるようにWeightsが正規化されます。

データ型:single|double|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'と非負のスカラーから構成されるコンマ区切りのペアとして指定します。

B t = [ β t b t ] であるとします。これは、最適化反復 t における係数およびバイアス項のベクトルです。 B t B t 1 B t 2 < 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など交差検証のオプションを参照してください。

応答変数を含む予測子データの tableTblを使用する場合、ValidationDataを table として指定できます。この場合、ValidationDataは、Tbl内に含まれるものと同じ予測子および応答を格納していなければなりません。ソフトウェアは、Tblが重さのベクトルを含む場合であっても、観測値に重みを適用することはありません。重みを指定するには、ValidationDataを cell 配列として指定しなければなりません。

ValidationDataを cell 配列として指定する場合、次の形式でなければなりません。

  • ValidationData{1}は、予測子データと同じデータ型および方向でなければなりません。つまり、予測子行列Xを使用する場合、ValidationData{1}は、予測子データがXと同じ方向で格納されている m 行 p 列または p 行 m 列の非スパース行列またはスパース行列でなければなりません。学習データXの予測子変数とValidationData{1}の予測子変数は対応していなければなりません。同様に、予測子データの予測子 tableTblを使用する場合、ValidationData{1}は、Tblに含まれるものと同じ予測子変数を格納していなければなりません。ValidationData{1}と予測子データの観測値の数が同じである必要はありません。

  • ValidationData{2}は応答変数 (YまたはResponseVarName) のデータ型および形式と一致しなければなりません。ValidationData{2}がクラス ラベルの配列である場合、ValidationData{1}にある観測値の数と同じ数の要素を指定しなければなりません。ValidationData{2}に含まれているすべての異なるラベルの集合は、Yに含まれているすべての異なるラベルの部分集合でなければなりません。ValidationData{1}が table である場合、ValidationData{2}はその table 内の応答変数の名前とすることができます。同じResponseVarNameまたはformulaを使用する場合、ValidationData{2}[]として指定できます。

  • 必要に応じて、ValidationData{3}を観測値の重みについての m 次元の数値ベクトル、または観測値の重みを含むテーブルValidationData{1}内の変数名として指定できます。検証データに関する重みは、合計が 1 になるように正規化されます。

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

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

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

双対 SGD の収束制御

すべて折りたたむ

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

B t = [ β t b t ] であるとします。これは、最適化反復 t における係数およびバイアス項のベクトルです。 B t B t 1 B t 2 < 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など交差検証のオプションを参照してください。

応答変数を含む予測子データの tableTblを使用する場合、ValidationDataを table として指定できます。この場合、ValidationDataは、Tbl内に含まれるものと同じ予測子および応答を格納していなければなりません。ソフトウェアは、Tblが重さのベクトルを含む場合であっても、観測値に重みを適用することはありません。重みを指定するには、ValidationDataを cell 配列として指定しなければなりません。

ValidationDataを cell 配列として指定する場合、次の形式でなければなりません。

  • ValidationData{1}は、予測子データと同じデータ型および方向でなければなりません。つまり、予測子行列Xを使用する場合、ValidationData{1}は、予測子データがXと同じ方向で格納されている m 行 p 列または p 行 m 列の非スパース行列またはスパース行列でなければなりません。学習データXの予測子変数とValidationData{1}の予測子変数は対応していなければなりません。同様に、予測子データの予測子 tableTblを使用する場合、ValidationData{1}は、Tblに含まれるものと同じ予測子変数を格納していなければなりません。ValidationData{1}と予測子データの観測値の数が同じである必要はありません。

  • ValidationData{2}は応答変数 (YまたはResponseVarName) のデータ型および形式と一致しなければなりません。ValidationData{2}がクラス ラベルの配列である場合、ValidationData{1}にある観測値の数と同じ数の要素を指定しなければなりません。ValidationData{2}に含まれているすべての異なるラベルの集合は、Yに含まれているすべての異なるラベルの部分集合でなければなりません。ValidationData{1}が table である場合、ValidationData{2}はその table 内の応答変数の名前とすることができます。同じResponseVarNameまたはformulaを使用する場合、ValidationData{2}[]として指定できます。

  • 必要に応じて、ValidationData{3}を観測値の重みについての m 次元の数値ベクトル、または観測値の重みを含むテーブルValidationData{1}内の変数名として指定できます。検証データに関する重みは、合計が 1 になるように正規化されます。

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

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

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

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

すべて折りたたむ

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

B t = [ β t b t ] であるとします。これは、最適化反復 t における係数およびバイアス項のベクトルです。 B t B t 1 B t 2 < 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など交差検証のオプションを参照してください。

応答変数を含む予測子データの tableTblを使用する場合、ValidationDataを table として指定できます。この場合、ValidationDataは、Tbl内に含まれるものと同じ予測子および応答を格納していなければなりません。ソフトウェアは、Tblが重さのベクトルを含む場合であっても、観測値に重みを適用することはありません。重みを指定するには、ValidationDataを cell 配列として指定しなければなりません。

ValidationDataを cell 配列として指定する場合、次の形式でなければなりません。

  • ValidationData{1}は、予測子データと同じデータ型および方向でなければなりません。つまり、予測子行列Xを使用する場合、ValidationData{1}は、予測子データがXと同じ方向で格納されている m 行 p 列または p 行 m 列の非スパース行列またはスパース行列でなければなりません。学習データXの予測子変数とValidationData{1}の予測子変数は対応していなければなりません。同様に、予測子データの予測子 tableTblを使用する場合、ValidationData{1}は、Tblに含まれるものと同じ予測子変数を格納していなければなりません。ValidationData{1}と予測子データの観測値の数が同じである必要はありません。

  • ValidationData{2}は応答変数 (YまたはResponseVarName) のデータ型および形式と一致しなければなりません。ValidationData{2}がクラス ラベルの配列である場合、ValidationData{1}にある観測値の数と同じ数の要素を指定しなければなりません。ValidationData{2}に含まれているすべての異なるラベルの集合は、Yに含まれているすべての異なるラベルの部分集合でなければなりません。ValidationData{1}が table である場合、ValidationData{2}はその table 内の応答変数の名前とすることができます。同じResponseVarNameまたはformulaを使用する場合、ValidationData{2}[]として指定できます。

  • 必要に応じて、ValidationData{3}を観測値の重みについての m 次元の数値ベクトル、または観測値の重みを含むテーブルValidationData{1}内の変数名として指定できます。検証データに関する重みは、合計が 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は、“岭”'lasso'で探索します。

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

loadfisheririsparams = hyperparameters('fitclinear',meas,species); params(1).Range = [1e-4,1e6];

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

既定では、コマンド ラインに反復表示が表示され、最適化のハイパーパラメーターの個数に従ってプロットが表示されます。最適化とプロットにおける目的関数は、回帰の場合はlog(1 + cross-validation loss)、分類の場合は誤分類率です。反復表示を制御するには、名前と値のペアの引数'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
SaveIntermediateResults Optimizer'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 つだけ使用できます。
CVPartition cvpartitionによって作成されるcvpartitionオブジェクト。 交差検証フィールドが指定されていない場合'Kfold',5
Holdout ホールドアウトの比率を表す範囲(0,1)のスカラー。
Kfold 1 より大きい整数。

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

データ型:struct

出力引数

すべて折りたたむ

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

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

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

メモ

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

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

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

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

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

  • TerminationCodeの値に対応

FitTime 秒単位の経過実時間
History

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

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

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

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

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

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

詳細

すべて折りたたむ

ウォーム スタート

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

低次元データの代替方法

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

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

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

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

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

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

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

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

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

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

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

ヒント

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

  • 予測子データが高次元でRegularization値が“岭”のときに最適化の精度を向上させるには、Solverに次のいずれかのオプションを設定します。

    • 'sgd'

    • 'asgd'

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

    • {'sgd','lbfgs'}

    • {'asgd','lbfgs'}

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

    他のオプションでは、最適化の精度が低下する可能性があります。

  • 予測子データが中~低次元でRegularization値が“岭”のときに最適化の精度を向上させるには、Solver'bfgs'に設定します。

  • Regularization'lasso'の場合、Solverに次のいずれかのオプションを設定します。

    • 'sgd'

    • 'asgd'

    • 'sparsa'

    • {'sgd','sparsa'}

    • {'asgd','sparsa'}

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

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

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

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

    • '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(またはTbl) を無作為に分割します。

    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 で導入