最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。
高次元データに対する線形回帰モデルのあてはめ
fitrlinear
は、高次元の非スパースまたはスパース予測子データを使用して効率的に線形回帰モデルに学習をさせます。使用可能な線形回帰モデルには、正則化されたサポート ベクター マシン (SVM) と最小二乗回帰法があります。fitrlinear
は、計算時間を短縮する手法 (確率的勾配降下法など) を使用して目的関数を最小化します。
多数の予測子変数が含まれている高次元データセットに対する計算時間を短縮するには、fitrlinear
を使用して線形回帰モデルに学習をさせます。低~中次元の予測子データセットについては、低次元データの代替方法を参照してください。
は、1 つ以上の Mdl
= fitrlinear(X
,Y
,Name,Value
)Name,Value
ペア引数で指定された追加オプションを使用して、学習済みの線形回帰モデルを返します。たとえば、最小二乗回帰の実装、交差検証、正則化のタイプを指定できます。Name,Value
ペア引数 Kfold
を使用して交差検証を実行することをお勧めします。交差検証の結果により、モデルがどの程度一般化を行うかを判断します。
[
は、名前と値のペア 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.6345
Solver: {'dual'}
Mdl
は RegressionLinear
モデルです。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
CVMdl
は RegressionPartitionedLinear
モデルです。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
Mdl1
は RegressionLinear
モデル オブジェクトです。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 | log(1+loss) | runtime | (observed) | (estim.) | | | |=====================================================================================================| | 1 | Best | 0.16029 | 0.41774 | 0.16029 | 0.16029 | 2.4206e-09 | svm |
| 2 | Best | 0.14496 | 0.32058 | 0.14496 | 0.14601 | 0.001807 | svm |
| 3 | Best | 0.13879 | 0.28024 | 0.13879 | 0.14065 | 2.4681e-09 | leastsquares |
| 4 | Best | 0.115 | 0.27266 | 0.115 | 0.11501 | 0.021027 | leastsquares |
| 5 | Accept | 0.44352 | 0.27558 | 0.115 | 0.1159 | 4.6795 | leastsquares |
| 6 | Best | 0.11025 | 0.27333 | 0.11025 | 0.11024 | 0.010671 | leastsquares |
| 7 | Accept | 0.13222 | 0.27212 | 0.11025 | 0.11024 | 8.6067e-08 | leastsquares |
| 8 | Accept | 0.13262 | 0.26992 | 0.11025 | 0.11023 | 8.5109e-05 | leastsquares |
| 9 | Accept | 0.13543 | 0.2732 | 0.11025 | 0.11021 | 2.7562e-06 | leastsquares |
| 10 | Accept | 0.15751 | 0.34766 | 0.11025 | 0.11022 | 5.0559e-06 | svm |
| 11 | Accept | 0.40673 | 0.32948 | 0.11025 | 0.1102 | 0.52074 | svm |
| 12 | Accept | 0.16057 | 0.33499 | 0.11025 | 0.1102 | 0.00014292 | svm |
| 13 | Accept | 0.16105 | 0.33584 | 0.11025 | 0.11018 | 1.0079e-07 | svm |
| 14 | Accept | 0.12763 | 0.27263 | 0.11025 | 0.11019 | 0.0012085 | leastsquares |
| 15 | Accept | 0.13504 | 0.27125 | 0.11025 | 0.11019 | 1.3981e-08 | leastsquares |
| 16 | Accept | 0.11041 | 0.27367 | 0.11025 | 0.11026 | 0.0093968 | leastsquares |
| 17 | Best | 0.10954 | 0.27352 | 0.10954 | 0.11003 | 0.010393 | leastsquares |
| 18 | Accept | 0.10998 | 0.2712 | 0.10954 | 0.11002 | 0.010254 | leastsquares |
| 19 | Accept | 0.45314 | 0.27275 | 0.10954 | 0.11001 | 9.9932 | svm |
| 20 | Best | 0.10753 | 0.33512 | 0.10753 | 0.10759 | 0.022576 | svm |
|=====================================================================================================| | Iter | Eval | Objective: | Objective | BestSoFar | BestSoFar | Lambda | Learner | | | result | log(1+loss) | runtime | (observed) | (estim.) | | | |=====================================================================================================| | 21 | Best | 0.10737 | 0.33442 | 0.10737 | 0.10728 | 0.010171 | svm |
| 22 | Accept | 0.13448 | 0.28528 | 0.10737 | 0.10727 | 1.5344e-05 | leastsquares |
| 23 | Best | 0.10645 | 0.33892 | 0.10645 | 0.10565 | 0.015495 | svm |
| 24 | Accept | 0.13598 | 0.27017 | 0.10645 | 0.10559 | 4.5984e-07 | leastsquares |
| 25 | Accept | 0.15962 | 0.3451 | 0.10645 | 0.10556 | 1.4302e-08 | svm |
| 26 | Accept | 0.10689 | 0.33135 | 0.10645 | 0.10616 | 0.015391 | svm |
| 27 | Accept | 0.13748 | 0.26642 | 0.10645 | 0.10614 | 1.001e-09 | leastsquares |
| 28 | Accept | 0.10692 | 0.33264 | 0.10645 | 0.10639 | 0.015761 | svm |
| 29 | Accept | 0.10681 | 0.32913 | 0.10645 | 0.10649 | 0.015777 | svm |
| 30 | Accept | 0.34314 | 0.26817 | 0.10645 | 0.10651 | 0.39671 | leastsquares |
__________________________________________________________ Optimization completed. MaxObjectiveEvaluations of 30 reached. Total function evaluations: 30 Total elapsed time: 29.0513 seconds. Total objective function evaluation time: 9.0751 Best observed feasible point: Lambda Learner __________________ _______ 0.0154950548329524 svm Observed objective function value = 0.10645 Estimated objective function value = 0.10651 Function evaluation time = 0.33892 Best estimated feasible point (according to models): Lambda Learner _________________ _______ 0.015777492256035 svm Estimated objective function value = 0.10651 Estimated function evaluation time = 0.33362
Mdl = RegressionLinear ResponseName: 'Y' ResponseTransform: 'none' Beta: [1000×1 double] Bias: -0.001764448684672 Lambda: 0.015777492256035 Learner: 'svm' Properties, Methods
FitInfo = struct with fields:
Lambda: 0.015777492256035
Objective: 0.230889727364096
PassLimit: 10
NumPasses: 10
BatchLimit: []
NumIterations: 99989
GradientNorm: NaN
GradientTolerance: 0
RelativeChangeInBeta: 0.064063563056079
BetaTolerance: 1.000000000000000e-04
DeltaGradient: 1.169701423362251
DeltaGradientTolerance: 0.100000000000000
TerminationCode: 0
TerminationStatus: {'Iteration limit exceeded.'}
Alpha: [10000×1 double]
History: []
FitTime: 0.050041900000000
Solver: {'dual'}
HyperparameterOptimizationResults = BayesianOptimization with properties: ObjectiveFcn: @createObjFcn/inMemoryObjFcn VariableDescriptions: [3×1 optimizableVariable] Options: [1×1 struct] MinObjective: 0.106451249084752 XAtMinObjective: [1×2 table] MinEstimatedObjective: 0.106505444701403 XAtMinEstimatedObjective: [1×2 table] NumObjectiveEvaluations: 30 TotalElapsedTime: 29.051285600000000 NextPoint: [1×2 table] XTrace: [30×2 table] ObjectiveTrace: [30×1 double] ConstraintsTrace: [] UserDataTrace: {30×1 cell} ObjectiveEvaluationTimeTrace: [30×1 double] IterationTimeTrace: [30×1 double] ErrorTrace: [30×1 double] FeasibilityTrace: [30×1 logical] FeasibilityProbabilityTrace: [30×1 double] IndexOfMinimumTrace: [30×1 double] ObjectiveMinimumTrace: [30×1 double] EstimatedObjectiveMinimumTrace: [30×1 double]
この最適化手法は交差検証の使用による適切な LASSO ペナルティの特定で示されているものよりシンプルですが、モデルの複雑度と交差検証損失との間のトレードオフはできません。
X
— 予測子データ予測子データ。n 行 p 列の非スパース行列またはスパース行列を指定します。
Y
の長さと X
の観測値数は同じでなければなりません。
メモ
観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns'
を指定すると、最適化実行時間が大幅に短縮される可能性があります。
データ型: single
| double
Y
— 応答データ応答データ。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'
— イプシロン不感応区間の幅の半分iqr(Y)/13.49
(既定値) | 非負のスカラー値イプシロン不感応区間の幅の半分。'Epsilon'
と非負のスカラー値から構成されるコンマ区切りのペアとして指定します。'Epsilon'
は SVM 学習器のみに適用されます。
Epsilon
の既定値は、iqr(Y)/13.49
です。これは、応答変数 Y
の四分位数間範囲を使用した標準偏差の推定値です。iqr(Y)
がゼロに等しい場合、Epsilon
の既定値は 0.1 になります。
例: 'Epsilon',0.3
データ型: single
| double
'Lambda'
— 正則化項の強度'auto'
(既定値) | 非負のスカラー | 非負値のベクトル。正則化項の強度。'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'
線形回帰モデルのタイプ。'Learner'
と 'svm'
または 'leastsquares'
から構成されるコンマ区切りのペアとして指定します。
次の表では、 です。
β は p 個の係数のベクトルです。
x は p 個の予測子変数による観測値です。
b はスカラー バイアスです。
値 | アルゴリズム | 応答の範囲 | 損失関数 |
---|---|---|---|
'leastsquares' | 通常の最小二乗による線形回帰 | y ∊ (-∞,∞) | 平均二乗誤差 (MSE): |
'svm' | サポート ベクター マシン回帰 | 'leastsquares' と同じ | イプシロン不感応: |
例: 'Learner','leastsquares'
'ObservationsIn'
— 予測子データにおける観測値の次元'rows'
(既定値) | 'columns'
予測子データにおける観測値の次元。'ObservationsIn'
と 'columns'
または 'rows'
から構成されるコンマ区切りのペアとして指定します。
メモ
観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns'
を指定すると、最適化実行時間が大幅に短縮される可能性があります。
'Regularization'
— 複雑度ペナルティのタイプ'lasso'
| 'ridge'
複雑度ペナルティのタイプ。'Regularization'
と 'lasso'
または 'ridge'
から構成されるコンマ区切りのペアとして指定します。
最小化のための目的関数は、平均損失関数 (Learner
を参照) と次の表の正則化項を加算することにより作成されます。
値 | 説明 |
---|---|
'lasso' | LASSO (L1) ペナルティ: |
'ridge' | リッジ (L2) ペナルティ: |
正則化項の強度 (式の λ) を指定するには、Lambda
を使用します。
バイアス項 (β0) は正則化ペナルティから除外されます。
Solver
が 'sparsa'
の場合、Regularization
の既定値は 'lasso'
になります。それ以外の場合は、既定値は 'ridge'
です。
例: 'Regularization','lasso'
'Solver'
— 目的関数の最小化手法'sgd'
| 'asgd'
| 'dual'
| 'bfgs'
| 'lbfgs'
| 'sparsa'
| string 配列 | 文字ベクトルの cell 配列目的関数の最小化手法。'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'
— 線形係数の初期推定値zeros(p
,1)
(既定値) | 数値ベクトル | 数値行列線形係数の初期推定値 (β)、'Beta'
と p 次元の数値ベクトルまたは p 行 L 列の数値行列から構成されるコンマ区切りのペアとして指定します。p は X
の予測子変数の数、L は正則化強度値の数です (詳細については、Lambda
を参照)。
p 次元ベクトルを指定した場合、次のプロセスを使用して目的関数が L 回最適化されます。
初期値として Beta
、正則化強度として Lambda
の最小値を使用して最適化を行う。
前回の最適化で生成された推定値をウォーム スタートとして使用し、Lambda
内の次に小さい値を正則化強度として使用して、再度最適化を行う。
Lambda
の値をすべて使用するまでステップ 2 を繰り返す。
p 行 L 列の行列を指定した場合、目的関数が L 回最適化されます。反復 j
では、初期値として Beta(:,
が使用され、j
)Lambda
を昇順で並べ替えた後で正則化強度として Lambda(
が使用されます。j
)
'Solver','dual'
を設定した場合、Beta
は無視されます。
データ型: single
| double
'Bias'
— 切片の初期推定値切片の初期推定値 (b)。'Bias'
と数値スカラーまたは L 次元の数値ベクトルから構成されるコンマ区切りのペアとして指定します。L は正則化強度値の数です (詳細については、Lambda
を参照)。
スカラーを指定した場合、次のプロセスを使用して目的関数が L 回最適化されます。
初期値として Bias
、正則化強度として Lambda
の最小値を使用して最適化を行う。
生成された推定値を次回の最適化の反復でウォーム スタートとして使用し、Lambda
内の次に小さい値を正則化強度として使用する。
Lambda
の値をすべて使用するまでステップ 2 を繰り返す。
L 次元ベクトルを指定した場合、目的関数が L 回最適化されます。反復 j
では、初期値として Bias(
が使用され、j
)Lambda
を昇順で並べ替えた後で正則化強度として Lambda(
が使用されます。j
)
既定の設定では、次のようになります。
データ型: single
| double
'FitBias'
— 線形モデルの切片使用フラグtrue
(既定値) | false
線形モデルの切片使用フラグ。'FitBias'
と true
または false
から構成されるコンマ区切りのペアとして指定します。
値 | 説明 |
---|---|
true | 線形モデルにバイアス項 b が追加され、推定されます。 |
false | 推定時に b = 0 に設定されます。 |
例: 'FitBias',false
データ型: logical
'PostFitBias'
— 最適化後に線形モデルの切片をあてはめるフラグfalse
(既定値) | true
最適化後に線形モデルの切片をあてはめるフラグ。'PostFitBias'
と true
または false
から構成されるコンマ区切りのペアとして指定します。
値 | 説明 |
---|---|
false | 最適化時にバイアス項 b と係数 β が推定されます。 |
true |
b を推定するため、以下が行われます。
|
true
を指定する場合、FitBias
は true でなければなりません。
例: 'PostFitBias',true
データ型: logical
'Verbose'
— 詳細レベル0
(既定値) | 非負の整数詳細レベル。'Verbose'
と非負の整数から構成されるコンマ区切りのペアとして指定します。Verbose
は、fitrlinear
がコマンド ラインに表示する診断情報の量を制御します。
値 | 説明 |
---|---|
0 | fitrlinear は診断情報を表示しません。 |
1 | fitrlinear は、目的関数の値や勾配の大きさなどの診断情報を定期的に表示および格納します。診断情報は FitInfo.History に格納されます。 |
他の正の整数 | fitrlinear は、各最適化反復における診断情報を表示および格納します。診断情報は FitInfo.History に格納されます。 |
例: 'Verbose',1
データ型: double
| single
'BatchSize'
— ミニバッチのサイズミニバッチのサイズ。'BatchSize'
と正の整数から構成されるコンマ区切りのペアとして指定します。各反復では、学習データの観測値を BatchSize
個使用して劣勾配が推定されます。
X
が数値行列の場合、既定値は 10
です。
X
がスパース行列の場合、既定値は max([10,ceil(sqrt(ff))])
です。ここで、ff = numel(X)/nnz(X)
(X
の "スパース性係数") です。
例: 'BatchSize',100
データ型: single
| double
'LearnRate'
— 学習率学習率。'LearnRate'
と正のスカラーから構成されるコンマ区切りのペアとして指定します。LearnRate
では、各反復で実行するステップの回数を指定します。各反復では、各ステップの方向と大きさが勾配により指定されます。
Regularization
が 'ridge'
の場合、LearnRate
は初期学習率 γ0 を指定します。反復 t の学習率 γt は、次の式を使用して決定されます。
Regularization
が 'lasso'
の場合、すべての反復について LearnRate
は一定になります。
既定の設定では、LearnRate
は 1/sqrt(1+max((sum(X.^2,obsDim))))
です。obsDim
は、観測値が X
の列である場合は 1
、それ以外の場合は 2
です。
例: 'LearnRate',0.01
データ型: single
| double
'OptimizeLearnRate'
— 学習率を減少させるフラグtrue
(既定値) | false
発散 (最小値の限度を超える状態) が検出された場合に学習率を減少させるフラグ。'OptimizeLearnRate'
と true
または false
から構成されるコンマ区切りのペアとして指定します。
OptimizeLearnRate
が 'true'
の場合、次のようになります。
数回の最適化反復について、LearnRate
を学習率として使用して最適化が開始される。
目的関数の値が増加した場合、現在の学習率の半分の値を使用して再開される。
目的関数が減少するまで、ステップ 2 が繰り返される。
例: 'OptimizeLearnRate',true
データ型: logical
'TruncationPeriod'
— LASSO 切り捨て実行間のミニバッチの回数10
(既定値) | 正の整数LASSO 切り捨て実行間のミニバッチの回数。'TruncationPeriod'
と正の整数から構成されるコンマ区切りのペアとして指定します。
切り捨て実行の後で、ソフトしきい値が線形係数に適用されます。つまり、k = TruncationPeriod
回のミニバッチが処理された後で、次を使用して係数推定 j が切り捨てられます。
SGD の場合、 はミニバッチを次を満たす k の回数処理した後の係数 j の推定値です。γt は反復 t における学習率です。λ は Lambda
の値です。
ASGD の場合、 はミニバッチを次を満たす k の回数処理した後の係数 j の平均推定値です。
Regularization
が 'ridge'
の場合、TruncationPeriod
は無視されます。
例: 'TruncationPeriod',100
データ型: single
| double
'Weights'
— 観測値の重みones(n,1)/n
(既定値) | 正の値の数値ベクトル観測値の重み。'Weights'
と正の値の数値ベクトルから構成されるコンマ区切りのペアとして指定します。fitrlinear
は、Weights
の対応する値を使用して X
の観測値に重みを付けます。Weights
のサイズは X
の観測値の個数 n と同じでなければなりません。
fitrlinear
は合計が 1 になるように Weights
を正規化します。
データ型: double
| single
'ResponseName'
— 応答変数名'Y'
(既定値) | 文字ベクトル | string スカラー応答変数名。'ResponseName'
と文字ベクトルまたは string スカラーから構成されるコンマ区切りのペアとして指定します。
Y
を指定した場合、'ResponseName'
を使用して応答変数の名前を指定できます。
ResponseVarName
または formula
を指定した場合、'ResponseName'
を使用することはできません。
例: 'ResponseName','response'
データ型: char
| string
'ResponseTransform'
— 応答の変換'none'
(既定値) | 関数ハンドル応答の変換。'ResponseTransform'
と 'none'
または関数ハンドルのいずれかから構成されるコンマ区切りのペアとして指定します。既定の設定は 'none'
です。これは @(y)y
、つまり変換なしを表します。MATLAB® 関数またはユーザー定義関数の場合は、関数ハンドルを使用します。関数ハンドルは、ベクトル (元の応答値) を受け入れて同じサイズのベクトル (変換した応答値) を返さなければなりません。
例: myfunction = @(y)exp(y)
を使用して、指数変換を入力ベクトルに適用する関数のハンドルを作成するとします。この場合、応答変換として 'ResponseTransform',myfunction
を指定できます。
データ型: char
| string
| function_handle
'CrossVal'
— 交差検証フラグ'off'
(既定値) | 'on'
交差検証フラグ。'Crossval'
と 'on'
または 'off'
から構成されるコンマ区切りのペアとして指定します。
'on'
を指定した場合、10 分割の交差検証が実施されます。
この交差検証の設定をオーバーライドするには、名前と値のペアの引数 CVPartition
、Holdout
、KFold
のいずれかを使用します。交差検証済みモデルを作成するために使用できる交差検証の名前と値のペアの引数は、一度に 1 つだけです。
例: 'Crossval','on'
'CVPartition'
— 交差検証分割[]
(既定値) | cvpartition
分割オブジェクト交差検証分割。'CVPartition'
と cvpartition
により作成された cvpartition
分割オブジェクトで構成されるコンマ区切りのペアとして指定します。分割オブジェクトは交差検証のタイプおよび学習と検証セットのインデックス付けを指定します。
交差検証済みモデルを作成するために使用できるオプションは、'
CVPartition
'
、'
Holdout
'
、'
KFold
'
のいずれかのみです。
'Holdout'
— ホールドアウト検証の対象データの比率ホールドアウト検証に使用されるデータの比率。'Holdout'
と、(0,1) の範囲内のスカラー値から成るコンマ区切りのペアとして指定します。'Holdout',
を指定すると、次が実行されます。 p
% のデータを検証データとして無作為に予約し、残りのデータを使用してモデルを学習させるp
*100
コンパクトな学習済みモデルを交差検証済みモデルの Trained
プロパティに格納する。
交差検証済みモデルを作成するために使用できるオプションは、'
CVPartition
'
、'
Holdout
'
、'
KFold
'
のいずれかのみです。
例: 'Holdout',0.1
データ型: double
| single
'KFold'
— 分割の数10
(既定値) | 1 より大きい正の整数値交差検証分類器で使用する分割の数。'KFold'
と 1 より大きい正の整数値から構成されるコンマ区切りのペアとして指定します。たとえば 'KFold',k
を指定すると、次が実行されます。
データを無作為に k 個のセットに分割する
各セットについて、そのセットを検定データとして予約し、他の k – 1 個のセットを使用してモデルに学習をさせる
k
個のコンパクトな学習済みモデルを、交差検証済みモデルの Trained
プロパティに含まれている k
行 1 列の cell ベクトルのセルに格納する。
交差検証済みモデルを作成するために使用できるオプションは、'
CVPartition
'
、'
Holdout
'
、'
KFold
'
のいずれかのみです。
例: 'KFold',8
データ型: single
| double
'BatchLimit'
— バッチの最大回数バッチを処理する最大回数。'BatchLimit'
と正の整数から構成されるコンマ区切りのペアとして指定します。BatchLimit
回のバッチが処理されると、最適化が終了します。
例: 'BatchLimit',100
データ型: single
| double
'BetaTolerance'
— 線形係数およびバイアス項の相対許容誤差1e-4
(既定値) | 非負のスカラー線形係数およびバイアス項 (切片) の相対許容誤差。'BetaTolerance'
と非負のスカラーから構成されるコンマ区切りのペアとして指定します。
であるとします。これは、最適化反復 t における係数およびバイアス項のベクトルです。 で最適化が終了します。
Solver
で指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver
で指定された次のソルバーが使用されます。
例: 'BetaTolerance',1e-6
データ型: single
| double
'NumCheckConvergence'
— 次回の収束チェックの前にバッチを処理する回数次回の収束チェックの前にバッチを処理する回数。'NumCheckConvergence'
と正の整数から構成されるコンマ区切りのペアとして指定します。
バッチのサイズの指定について、BatchSize
を参照してください。
既定の設定では、データセット全体が通されるたびに約 10 回収束がチェックされます。
例: 'NumCheckConvergence',100
データ型: single
| double
'PassLimit'
— 最大通過回数1
(既定値) | 正の整数データを通す最大回数。'PassLimit'
と正の整数から構成されるコンマ区切りのペアとして指定します。
データが完全に 1 回通されると、すべての観測値が fitrlinear
で処理されます。
データが通される回数が PassLimit
になると、fitrlinear
は最適化を終了します。
'
BatchLimit
'
と PassLimit
を指定した場合、処理する観測値の数が最も少なくなる引数が fitrlinear
により選択されます。詳細は、アルゴリズムを参照してください。
例: 'PassLimit',5
データ型: single
| double
'ValidationData'
— 最適化の収束を検出するための検証データ最適化の収束を検出するためのデータ。'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'
— 勾配の絶対許容誤差1e-6
(既定値) | 非負のスカラー勾配の絶対許容誤差。'GradientTolerance'
と非負のスカラーから構成されるコンマ区切りのペアとして指定します。GradientTolerance
は、Solver
の値が 'bfgs'
、'lbfgs'
または 'sparsa'
である場合に適用されます。
最適化反復 t における係数およびバイアス項に関する目的関数の勾配ベクトルを とします。 で最適化が終了します。
BetaTolerance
も指定した場合、いずれかの終了条件が fitrlinear
で満たされると最適化が終了します。
Solver
で指定された最後のソルバーで fitrlinear
が収束する場合、最適化が終了します。それ以外の場合、fitrlinear
は Solver
で指定された次のソルバーを使用します。
例: 'GradientTolerance',eps
データ型: single
| double
'IterationLimit'
— 最適化反復の最大回数1000
(既定値) | 正の整数最適化反復の最大回数。'IterationLimit'
と正の整数から構成されるコンマ区切りのペアとして指定します。IterationLimit
は、Solver
の値が 'bfgs'
、'lbfgs'
または 'sparsa'
である場合に適用されます。
例: 'IterationLimit',1e7
データ型: single
| double
'BetaTolerance'
— 線形係数およびバイアス項の相対許容誤差1e-4
(既定値) | 非負のスカラー線形係数およびバイアス項 (切片) の相対許容誤差。'BetaTolerance'
と非負のスカラーから構成されるコンマ区切りのペアとして指定します。
であるとします。これは、最適化反復 t における係数およびバイアス項のベクトルです。 で最適化が終了します。
DeltaGradientTolerance
も指定した場合、いずれかの終了条件が満たされると最適化が終了します。
Solver
で指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver
で指定された次のソルバーが使用されます。
例: 'BetaTolerance',1e-6
データ型: single
| double
'DeltaGradientTolerance'
— 勾配差分の許容誤差0.1
(既定値) | 非負のスカラー上位および下位プールのカルーシュ・キューン・タッカー (KKT) 相補性条件違反値の間における勾配差分の許容誤差。'DeltaGradientTolerance'
と非負のスカラーから構成されるコンマ区切りのペアとして指定します。DeltaGradientTolerance
は、Solver
の値が 'dual'
である場合のみ適用されます。
KKT 違反値の大きさが DeltaGradientTolerance
より小さい場合、fitrlinear
は最適化を終了させます。
Solver
で指定された最後のソルバーで fitrlinear
が収束する場合、最適化が終了します。それ以外の場合、fitrlinear
は Solver
で指定された次のソルバーを使用します。
例: 'DeltaGapTolerance',1e-2
データ型: double
| single
'NumCheckConvergence'
— 次回の収束チェックの前に処理するデータセット全体が通される回数5
(既定値) | 正の整数次回の収束チェックの前に処理するデータセット全体が通される回数。'NumCheckConvergence'
と正の整数から構成されるコンマ区切りのペアとして指定します。
例: 'NumCheckConvergence',100
データ型: single
| double
'PassLimit'
— 最大通過回数10
(既定値) | 正の整数データを通す最大回数。'PassLimit'
と正の整数から構成されるコンマ区切りのペアとして指定します。
データが完全に 1 回通されると、すべての観測値が処理されます。
データが通される回数が PassLimit
になると、最適化が終了します。
例: 'PassLimit',5
データ型: single
| double
'ValidationData'
— 最適化の収束を検出するための検証データ最適化の収束を検出するためのデータ。'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
で指定された次のソルバーが使用されます。
既定の設定では、検証データの損失を監視することによる収束の検出は行われません。
'BetaTolerance'
— 線形係数およびバイアス項の相対許容誤差1e-4
(既定値) | 非負のスカラー線形係数およびバイアス項 (切片) の相対許容誤差。'BetaTolerance'
と非負のスカラーから構成されるコンマ区切りのペアとして指定します。
であるとします。これは、最適化反復 t における係数およびバイアス項のベクトルです。 で最適化が終了します。
GradientTolerance
も指定した場合、いずれかの終了条件が満たされると最適化が終了します。
Solver
で指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver
で指定された次のソルバーが使用されます。
例: 'BetaTolerance',1e-6
データ型: single
| double
'GradientTolerance'
— 勾配の絶対許容誤差1e-6
(既定値) | 非負のスカラー勾配の絶対許容誤差。'GradientTolerance'
と非負のスカラーから構成されるコンマ区切りのペアとして指定します。
最適化反復 t における係数およびバイアス項に関する目的関数の勾配ベクトルを とします。 で最適化が終了します。
BetaTolerance
も指定した場合、いずれかの終了条件が満たされると最適化が終了します。
指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver
で指定された次のソルバーが使用されます。
例: 'GradientTolerance',1e-5
データ型: single
| double
'HessianHistorySize'
— ヘッセ近似の履歴バッファーのサイズ15
(既定値) | 正の整数ヘッセ近似の履歴バッファーのサイズ。'HessianHistorySize'
と正の整数から構成されるコンマ区切りのペアとして指定します。各反復において、最新の HessianHistorySize
回の反復の統計量を使用してヘッシアンが構成されます。
SpaRSA の場合、'HessianHistorySize'
はサポートされません。
例: 'HessianHistorySize',10
データ型: single
| double
'IterationLimit'
— 最適化反復の最大回数1000
(既定値) | 正の整数最適化反復の最大回数。'IterationLimit'
と正の整数から構成されるコンマ区切りのペアとして指定します。IterationLimit
は、Solver
の値が 'bfgs'
、'lbfgs'
または 'sparsa'
である場合に適用されます。
例: 'IterationLimit',500
データ型: single
| double
'ValidationData'
— 最適化の収束を検出するための検証データ最適化の収束を検出するためのデータ。'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'
| 'all'
| 使用可能パラメーター名の string 配列または cell 配列 | optimizableVariable
オブジェクトのベクトル最適化するパラメーター。'OptimizeHyperparameters'
と次のいずれかから構成されるコンマ区切りのペアとして指定します。
'none'
— 最適化を行いません。
'auto'
— {'Lambda','Learner'}
を使用します。
'all'
— すべての使用可能パラメーターを最適化します。
使用可能パラメーター名の string 配列または cell 配列。
optimizableVariable
オブジェクトのベクトル。通常は hyperparameters
の出力です。
最適化では、パラメーターを変化させることにより、fitrlinear
の交差検証損失 (誤差) を最小化しようとします。交差検証のタイプおよびその他の最適化の側面を制御するには、名前と値のペア HyperparameterOptimizationOptions
を使用します。
メモ
'OptimizeHyperparameters'
の値は、他の名前と値のペアの引数を使用して設定した値より優先されます。たとえば、'OptimizeHyperparameters'
を 'auto'
に設定すると、'auto'
の値が適用されます。
fitrlinear
では、以下のパラメーターを使用できます。
Lambda
— fitrlinear
は、既定では範囲 [1e-5/NumObservations,1e5/NumObservations]
の対数スケールで、正の値を探索します。
Learner
— fitrlinear
は、'svm'
と 'leastsquares'
で探索します。
Regularization
— fitrlinear
は、'ridge'
と 'lasso'
で探索します。
既定以外のパラメーターを設定するには、既定以外の値が含まれている optimizableVariable
オブジェクトのベクトルを渡します。たとえば、以下のようにします。
load carsmall params = hyperparameters('fitrlinear',[Horsepower,Weight],MPG); params(1).Range = [1e-3,2e4];
OptimizeHyperparameters
の値として params
を渡します。
既定では、コマンド ラインに反復表示が表示され、最適化のハイパーパラメーターの個数に従ってプロットが表示されます。最適化とプロットにおける目的関数は、回帰の場合は log(1 + cross-validation loss)、分類の場合は誤分類率です。反復表示を制御するには、名前と値のペアの引数 'HyperparameterOptimizationOptions'
の Verbose
フィールドを設定します。プロットを制御するには、名前と値のペアの引数 'HyperparameterOptimizationOptions'
の ShowPlots
フィールドを設定します。
たとえば、線形回帰の最適化を参照してください。
例: 'OptimizeHyperparameters','auto'
'HyperparameterOptimizationOptions'
— 最適化のオプション最適化のオプション。'HyperparameterOptimizationOptions'
と構造体から構成されるコンマ区切りのペアとして指定します。この引数を指定すると、名前と値のペアの引数 OptimizeHyperparameters
の効果が変化します。この構造体のフィールドは、すべてオプションです。
フィールド名 | 値 | 既定の設定 |
---|---|---|
Optimizer |
| 'bayesopt' |
AcquisitionFunctionName |
オブジェクト関数のランタイムによって最適化が異なるので、名前に | 'expected-improvement-per-second-plus' |
MaxObjectiveEvaluations | 目的関数評価の最大数。 | 'bayesopt' または 'randomsearch' の場合は 30 、'gridsearch' の場合はグリッド全体 |
MaxTime | 制限時間。正の実数を指定します。制限時間の単位は、 | Inf |
NumGridDivisions | 'gridsearch' における各次元の値の個数。値は、各次元の値の個数を表す正の整数のベクトル、またはすべての次元に適用されるスカラーが可能です。カテゴリカル変数の場合、このフィールドは無視されます。 | 10 |
ShowPlots | プロットを表示するかどうかを示す論理値。true の場合、最良の目的関数の値が反復回数に対してプロットされます。1 つまたは 2 つの最適化パラメーターがあり、Optimizer が 'bayesopt' である場合、ShowPlots はパラメーターに対する目的関数のモデルのプロットも行います。 | true |
SaveIntermediateResults | Optimizer が 'bayesopt' である場合に結果を保存するかどうかを示す論理値。true の場合、'BayesoptResults' という名前のワークスペース変数が反復ごとに上書きされます。この変数は BayesianOptimization オブジェクトです。 | false |
Verbose | コマンド ラインへの表示。
詳細については、 | 1 |
UseParallel | ベイズ最適化を並列実行するかどうかを示す論理値。並列実行には Parallel Computing Toolbox™ が必要です。並列でのタイミングに再現性がないため、並列ベイズ最適化で再現性のある結果が生成されるとは限りません。詳細については、並列ベイズ最適化を参照してください。 | false |
Repartition | 反復ごとに交差検証を再分割するかどうかを示す論理値。 分割ノイズが考慮されるので、通常は | false |
以下の 3 つのフィールド名は 1 つだけ使用できます。 | ||
CVPartition | cvpartition によって作成される cvpartition オブジェクト。 | 交差検証フィールドが指定されていない場合 'Kfold',5 |
Holdout | ホールドアウトの比率を表す範囲 (0,1) のスカラー。 | |
Kfold | 1 より大きい整数。 |
例: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)
データ型: struct
Mdl
— 学習済みの線形回帰モデルRegressionLinear
モデル オブジェクト | RegressionPartitionedLinear
交差検証済みモデル オブジェクト学習済みの線形回帰モデル。RegressionLinear
モデル オブジェクトまたは RegressionPartitionedLinear
交差検証済みモデル オブジェクトとして返されます。
名前と値のペアの引数 KFold
、Holdout
、CrossVal
、CVPartition
のいずれかを設定した場合、Mdl
は RegressionPartitionedLinear
交差検証済みモデル オブジェクトになります。それ以外の場合、Mdl
は RegressionLinear
モデル オブジェクトになります。
Mdl
のプロパティを参照するには、ドット表記を使用します。たとえば、推定された係数のベクトルまたは行列を表示するには、コマンド ウィンドウに Mdl.Beta
と入力します。
メモ
他の回帰モデルとは異なり、また、メモリ消費を節約するため、学習データや最適化の詳細 (収束履歴など) は RegressionLinear
および RegressionPartitionedLinear
モデル オブジェクトに格納されません。
FitInfo
— 最適化の詳細最適化の詳細。構造体配列として返されます。
各フィールドには、最終的な値または名前と値のペアの引数の指定が格納されます。たとえば、Objective
は最適化が終了したときの目的関数の値です。多次元フィールドの行は Lambda
の値に、列は Solver
の値に対応します。
次の表で、主なフィールドを説明します。
フィールド | 説明 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
TerminationStatus |
| ||||||||||||||
FitTime | 秒単位の経過実時間 | ||||||||||||||
History | 各反復における最適化情報の構造体配列。
|
フィールドにアクセスするには、ドット表記を使用します。たとえば、各反復における目的関数値のベクトルにアクセスするには、FitInfo.History.Objective
と入力します。
FitInfo
を確認して、収束が満足できるものであるかどうかを評価することをお勧めします。
HyperparameterOptimizationResults
— ハイパーパラメーターの交差検証最適化BayesianOptimization
オブジェクト | ハイパーパラメーターおよび関連する値のテーブルハイパーパラメーターの交差検証最適化。ハイパーパラメーターおよび関連する値が含まれている table または BayesianOptimization
オブジェクトとして返されます。'OptimizeHyperparameters'
の値が 'none'
ではない場合、出力は空以外です。出力値は、名前と値のペアの引数 'HyperparameterOptimizationOptions'
の Optimizer
フィールドの値に依存します。
Optimizer フィールドの値 | HyperparameterOptimizationResults の値 |
---|---|
'bayesopt' (既定の設定) | BayesianOptimization クラスのオブジェクト |
'gridsearch' または 'randomsearch' | 使用したハイパーパラメーター、観測された目的関数の値 (交差検証損失)、および最低 (最良) から最高 (最悪) までの観測値の順位が格納されているテーブル |
メモ
Learner
が 'leastsquares'
の場合、目的関数の損失項は MSE の半分になります。既定の設定では、loss
は MSE を返します。したがって、loss
を使用して再代入誤差または学習誤差をチェックした場合、loss
によって返される MSE は、FitInfo
の最適化結果や、Verbose
を使用して正の詳細レベルを設定した場合にコマンド ラインに返される結果と異なります。
"ウォーム スタート" は、収束時間を短縮するために最適化ルーチンに与えられるベータ係数およびバイアス項の初期推定値です。
高次元の線形分類および回帰モデルでは比較的高速に目的関数を最小化できますが、精度が犠牲になり、予測子変数が数値のみに制限され、モデルがパラメーターに関して線形でなければなりません。予測子データセットが低~中次元の場合、または種類の異なる変数が混在している場合、適切な分類または回帰近似関数を使用する必要があります。次の表は、どの近似関数が低次元データセットに適しているかを判断するために役立ちます。
近似させるモデル | 関数 | 主なアルゴリズムの違い |
---|---|---|
SVM |
| |
線形回帰 |
| |
ロジスティック回帰 |
|
観測値が列に対応するように予測子行列を配置して '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
を試してください。たとえば、TruncationPeriod
を 1
、10
に設定してから 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
を指定して交差検証ルーチン (CrossVal
、CVPartition
、Holdout
または KFold
) を実装した場合、次のようになります。
fitrlinear
は、学習データの分割を使用してモデルに学習をさせます。目的関数の最適化時に、fitrlinear
は最適化を終了させるための他の可能な方法として ValidationData
を使用します (詳細については、前の項目を参照)。
終了条件が満たされると、fitrlinear
は最適化された線形係数および切片に基づいて学習済みのモデルを構築します。
k 分割交差検証を実装した場合、fitrlinear
が網羅していない学習セット分割があると、fitrlinear
はステップ 2 に戻り、次の学習セット分割を使用して学習を行います。
それ以外の場合、fitrlinear
は学習を終了させ、交差検証済みのモデルを返します。
交差検証済みモデルの品質を判断できます。以下に例を示します。
ステップ 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.
使用上の注意事項および制限事項:
一部の名前と値のペアの引数は、インメモリの関数 fitrlinear
と既定値および値が異なります。サポートされる名前と値のペアの引数および違いは次のとおりです。
'Epsilon'
'ObservationsIn'
— 'rows'
のみをサポートします。
'Lambda'
— 'auto'
(既定値) またはスカラーを指定できます。
'Learner'
'Regularization'
— 'ridge'
のみをサポートします。
'Solver'
— 'lbfgs'
のみをサポートします。
'Verbose'
— 既定値は 1
'Beta'
'Bias'
'FitBias'
— true
のみをサポートします。
'Weights'
— 値は tall 配列でなければなりません。
'HessianHistorySize'
'BetaTolerance'
— 既定値は 1e-3
に緩和されます。
'GradientTolerance'
— 既定値は 1e-3
に緩和されます。
'IterationLimit'
— 既定値は 20
に緩和されます。
'OptimizeHyperparameters'
— 'Regularization'
パラメーターの値は 'ridge'
でなければなりません。
'HyperparameterOptimizationOptions'
— 交差検証として、tall 最適化では 'Holdout'
検証のみがサポートされます。たとえば、fitrlinear(X,Y,'OptimizeHyperparameters','auto','HyperparameterOptimizationOptions',struct('Holdout',0.2))
を指定できます。
tall 配列の場合、fitrlinear
は各反復で損失と勾配の計算を tall 配列のさまざまな部分に分散させることにより LBFGS を実装します。他のソルバーでは tall 配列を使用できません。
Beta
と Bias
の初期値が与えられなかった場合、fitrlinear
はデータの一部に対して局所的にモデルをあてはめ、平均化で係数を結合することにより、はじめにパラメーターの初期推定値を改善します。
詳細は、tall 配列を参照してください。
並列実行するには、'UseParallel'
オプションを true
に設定します。
ハイパーパラメーターの最適化を並列実行するため、この関数を呼び出すときに名前と値のペアの引数 'HyperparameterOptions', struct('UseParallel',true)
を指定します。
並列的なハイパーパラメーターの最適化の詳細については、並列ベイズ最適化を参照してください。
並列計算の全般的な情報については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
fitclinear
| fitlm
| fitrsvm
| kfoldLoss
| kfoldPredict
| lasso
| predict
| RegressionLinear
| RegressionPartitionedLinear
| ridge
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
Select web siteYou can also select a web site from the following list:
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.