fitrlinear
高次元データに対する線形回帰モデルの当てはめ
構文
説明
fitrlinear は、高次元の完全なまたはスパース予測子データを使用して効率的に線形回帰モデルに学習をさせます。使用可能な線形回帰モデルには、正則化されたサポート ベクター マシン (SVM) と最小二乗回帰法があります。fitrlinear は、計算時間を短縮する手法 (確率的勾配降下法など) を使用して目的関数を最小化します。
多数の予測子変数が含まれている高次元データ セットに対する計算時間を短縮するには、fitrlinear を使用して線形回帰モデルに学習をさせます。低~中次元の予測子データ セットについては、低次元データの代替方法を参照してください。
は、table Mdl = fitrlinear(Tbl,ResponseVarName)Tbl 内の予測子変数と Tbl.ResponseVarName 内の応答値を使用して、線形回帰モデルを返します。
では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値のペアの引数を使用してオプションを指定します。たとえば、交差検証の指定、最小二乗回帰の実装、正則化のタイプの指定が可能です。名前と値のペアの引数 Mdl = fitrlinear(X,Y,Name,Value)'Kfold' を使用して交差検証を行うことをお勧めします。交差検証の結果により、モデルがどの程度一般化を行うかを判断します。
[ は、Mdl,FitInfo,HyperparameterOptimizationResults] = fitrlinear(___)OptimizeHyperparameters が指定されている場合に、ハイパーパラメーターの最適化の結果も返します。
[ は、名前と値の引数 Mdl,FitInfo,AggregateOptimizationResults] = fitrlinear(___)OptimizeHyperparameters と HyperparameterOptimizationOptions が指定されている場合に、ハイパーパラメーターの最適化の結果が格納された AggregateOptimizationResults も返します。HyperparameterOptimizationOptions の ConstraintType オプションと ConstraintBounds オプションも指定する必要があります。この構文を使用すると、交差検証損失ではなくコンパクトなモデル サイズに基づいて最適化したり、オプションは同じでも制約範囲は異なる複数の一連の最適化問題を実行したりできます。
例
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: [1000×1 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: [10000×1 double]
History: []
FitTime: 0.0675
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: [1000×15 double]
Bias: [-0.0049 -0.0049 -0.0049 -0.0049 -0.0049 -0.0048 -0.0044 -0.0037 -0.0030 -0.0031 -0.0033 -0.0036 -0.0041 -0.0051 -0.0071]
Lambda: [1.0000e-05 1.9307e-05 3.7276e-05 7.1969e-05 1.3895e-04 2.6827e-04 5.1795e-04 1.0000e-03 0.0019 0.0037 0.0072 0.0139 0.0268 0.0518 0.1000]
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: [1000×1 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.10584 | 1.5375 | 0.10584 | 0.10584 | 2.4206e-09 | svm |
| 2 | Best | 0.10564 | 1.1663 | 0.10564 | 0.10564 | 0.001807 | svm |
| 3 | Best | 0.10091 | 0.38098 | 0.10091 | 0.10092 | 2.4681e-09 | leastsquares |
| 4 | Accept | 0.11397 | 0.33001 | 0.10091 | 0.10094 | 0.021027 | leastsquares |
| 5 | Accept | 0.10091 | 0.39719 | 0.10091 | 0.10091 | 2.0258e-09 | leastsquares |
| 6 | Accept | 0.45312 | 0.65637 | 0.10091 | 0.10091 | 9.8803 | svm |
| 7 | Accept | 0.10582 | 1.2603 | 0.10091 | 0.10091 | 9.6038e-06 | svm |
| 8 | Best | 0.10091 | 0.35157 | 0.10091 | 0.10087 | 1.6009e-05 | leastsquares |
| 9 | Accept | 0.44998 | 0.21356 | 0.10091 | 0.10089 | 9.9615 | leastsquares |
| 10 | Best | 0.10069 | 0.32634 | 0.10069 | 0.10067 | 0.00079258 | leastsquares |
| 11 | Accept | 0.10586 | 1.1769 | 0.10069 | 0.10065 | 9.7512e-08 | svm |
| 12 | Accept | 0.10091 | 0.32572 | 0.10069 | 0.10085 | 3.0897e-07 | leastsquares |
| 13 | Accept | 0.10577 | 1.2404 | 0.10069 | 0.10085 | 0.00019626 | svm |
| 14 | Best | 0.10062 | 0.35156 | 0.10062 | 0.10043 | 0.0037706 | leastsquares |
| 15 | Accept | 0.10091 | 0.32826 | 0.10062 | 0.10085 | 2.4399e-08 | leastsquares |
| 16 | Accept | 0.10091 | 0.3498 | 0.10062 | 0.10087 | 2.4005e-06 | leastsquares |
| 17 | Accept | 0.10091 | 0.3369 | 0.10062 | 0.10089 | 1.0029e-09 | leastsquares |
| 18 | Accept | 0.10584 | 1.2046 | 0.10062 | 0.10089 | 1.0049e-09 | svm |
| 19 | Accept | 0.10088 | 0.3595 | 0.10062 | 0.10089 | 0.00010204 | leastsquares |
| 20 | Accept | 0.10583 | 1.2326 | 0.10062 | 0.10089 | 9.8999e-07 | svm |
|=====================================================================================================|
| Iter | Eval | Objective: | Objective | BestSoFar | BestSoFar | Lambda | Learner |
| | result | log(1+loss) | runtime | (observed) | (estim.) | | |
|=====================================================================================================|
| 21 | Best | 0.10052 | 0.32086 | 0.10052 | 0.10025 | 0.002124 | leastsquares |
| 22 | Accept | 0.10091 | 0.3624 | 0.10052 | 0.10024 | 8.7079e-08 | leastsquares |
| 23 | Best | 0.10052 | 0.34039 | 0.10052 | 0.10033 | 0.0021352 | leastsquares |
| 24 | Accept | 0.10091 | 0.37178 | 0.10052 | 0.10033 | 8.0672e-09 | leastsquares |
| 25 | Accept | 0.10052 | 0.36927 | 0.10052 | 0.10038 | 0.0021099 | leastsquares |
| 26 | Accept | 0.10091 | 0.36543 | 0.10052 | 0.10038 | 8.5163e-07 | leastsquares |
| 27 | Accept | 0.1009 | 0.34399 | 0.10052 | 0.10038 | 3.8212e-05 | leastsquares |
| 28 | Accept | 0.31858 | 0.9691 | 0.10052 | 0.10046 | 0.17205 | svm |
| 29 | Accept | 0.10574 | 1.22 | 0.10052 | 0.10047 | 0.00070859 | svm |
| 30 | Accept | 0.10082 | 0.38007 | 0.10052 | 0.10047 | 0.00028825 | leastsquares |
__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 32.7363 seconds
Total objective function evaluation time: 18.5696
Best observed feasible point:
Lambda Learner
_________ ____________
0.0021352 leastsquares
Observed objective function value = 0.10052
Estimated objective function value = 0.10047
Function evaluation time = 0.34039
Best estimated feasible point (according to models):
Lambda Learner
_________ ____________
0.0021352 leastsquares
Estimated objective function value = 0.10047
Estimated function evaluation time = 0.34314


Mdl =
RegressionLinear
ResponseName: 'Y'
ResponseTransform: 'none'
Beta: [1000×1 double]
Bias: -0.0071
Lambda: 0.0021
Learner: 'leastsquares'
Properties, Methods
FitInfo = struct with fields:
Lambda: 0.0021
Objective: 0.0472
IterationLimit: 1000
NumIterations: 15
GradientNorm: 2.4347e-06
GradientTolerance: 1.0000e-06
RelativeChangeInBeta: 3.3860e-05
BetaTolerance: 1.0000e-04
DeltaGradient: []
DeltaGradientTolerance: []
TerminationCode: 1
TerminationStatus: {'Tolerance on coefficients satisfied.'}
History: []
FitTime: 0.0563
Solver: {'lbfgs'}
HyperparameterOptimizationResults =
BayesianOptimization with properties:
ObjectiveFcn: @createObjFcn/inMemoryObjFcn
VariableDescriptions: [3×1 optimizableVariable]
Options: [1×1 struct]
MinObjective: 0.1005
XAtMinObjective: [1×2 table]
MinEstimatedObjective: 0.1005
XAtMinEstimatedObjective: [1×2 table]
NumObjectiveEvaluations: 30
TotalElapsedTime: 32.7363
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 ペナルティの特定で示されているものよりシンプルですが、モデルの複雑度と交差検証損失との間のトレードオフはできません。
入力引数
予測子データ。n 行 p 列の完全な行列またはスパース行列を指定します。
Y の長さと X の観測値数は同じでなければなりません。
メモ
観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns' を指定すると、最適化実行時間が大幅に短縮される可能性があります。
データ型: single | double
モデルを学習させるために使用する標本データ。table として指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。オプションとして、Tbl に応答変数用の列を 1 つ追加できます。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
Tblに応答変数が含まれている場合にTbl内の他の変数をすべて予測子として使用するには、ResponseVarNameを使用して応答変数を指定します。Tblに応答変数が含まれている場合にTbl内の他の変数の一部のみを予測子として使用するには、formulaを使用して式を指定します。Tblに応答変数が含まれていない場合は、Yを使用して応答変数を指定します。応答変数の長さとTblの行数は等しくなければなりません。
応答変数および予測子変数サブセットの説明モデル。"Y~x1+x2+x3" という形式の文字ベクトルまたは string スカラーを指定します。この形式では、Y は応答変数を、x1、x2 および x3 は予測子変数を表します。
モデルに学習をさせるための予測子として Tbl 内の変数のサブセットを指定するには、式を使用します。式を指定した場合、formula に現れない Tbl 内の変数は使用されません。
式の変数名は Tbl の変数名 (Tbl.Properties.VariableNames) であり、有効な MATLAB® 識別子でなければなりません。関数 isvarname を使用して Tbl の変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName を使用してそれらを変換できます。
データ型: char | string
メモ:
ソフトウェアは、NaN、空の文字ベクトル ('')、空の string ("")、<missing>、および <undefined> の要素を欠損値として扱い、以下のいずれかの特性をもつ観測値を削除します。
応答の欠損値 (たとえば、
YまたはValidationData{2})予測子の観測値 (たとえば、
XまたはValidationData{1}の行) 内の少なくとも 1 つの欠損値NaN値または重み0(たとえば、WeightsまたはValidationData{3}内の値)
メモリを節約するため、学習を行う前に欠損値が含まれている観測値を学習データから手動で削除することをお勧めします。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。
例: Mdl = fitrlinear(X,Y,'Learner','leastsquares','CrossVal','on','Regularization','lasso') は、最小二乗回帰の実装、10 分割交差検証の実装、および LASSO 正則化項を含めることを指定します。
メモ
交差検証の名前と値の引数は、名前と値の引数 OptimizeHyperparameters と一緒には使用できません。OptimizeHyperparameters の場合の交差検証は、名前と値の引数 HyperparameterOptimizationOptions を使用することのみによって変更できます。
線形回帰のオプション
イプシロン不感応区間の幅の半分。'Epsilon' と非負のスカラー値から構成されるコンマ区切りのペアとして指定します。'Epsilon' は SVM 学習器のみに適用されます。
Epsilon の既定値は、iqr(Y)/13.49 です。これは、応答変数 Y の四分位数間範囲を使用した標準偏差の推定値です。iqr(Y) がゼロに等しい場合、Epsilon の既定値は 0.1 になります。
例: 'Epsilon',0.3
データ型: single | double
正則化項の強度。'Lambda' と 'auto'、非負のスカラーまたは非負値のベクトルから構成されるコンマ区切りのペアとして指定します。
'auto'の場合、Lambda= 1/n です。交差検証の名前と値のペアの引数 (
CrossValなど) を指定した場合、n は分割内観測値の数です。それ以外の場合、n は学習標本のサイズです。
非負値のベクトルの場合、
fitrlinearは、Lambdaの異なる値それぞれについて目的関数の最適化を逐次的に昇順で実行します。Solverが'sgd'または'asgd'でRegularizationが'lasso'の場合、fitrlinearが前の係数の推定値を次の最適化反復のウォーム スタートとして使用することはありません。それ以外の場合、fitrlinearはウォーム スタートを使用します。Regularizationが'lasso'の場合、fitrlinearがLambdaの以後の値を使用して最適化を行うときに、係数の推定値 0 は値が保持されます。fitrlinearは、指定された正則化強度ごとに係数の推定値を返します。
例: 'Lambda',10.^(-(10:-2:2))
データ型: char | string | double | single
線形回帰モデルのタイプ。'Learner' と 'svm' または 'leastsquares' から構成されるコンマ区切りのペアとして指定します。
次の表では、 です。
β は p 個の係数のベクトルです。
x は p 個の予測子変数による観測値です。
b はスカラー バイアスです。
| 値 | アルゴリズム | 応答の範囲 | 損失関数 |
|---|---|---|---|
'leastsquares' | 通常の最小二乗による線形回帰 | y ∊ (-∞,∞) | 平均二乗誤差 (MSE): |
'svm' | サポート ベクター マシン回帰 | 'leastsquares' と同じ | イプシロン不感応: |
例: 'Learner','leastsquares'
予測子データにおける観測値の次元。"rows" または "columns" として指定します。
メモ
観測値が列に対応するように予測子行列を配置して ObservationsIn="columns" を指定すると、計算時間が大幅に短縮される可能性があります。table の予測子データに対して ObservationsIn="columns" を指定することはできません。
例: ObservationsIn="columns"
データ型: char | string
複雑度ペナルティのタイプ。'Regularization' と 'lasso' または 'ridge' から構成されるコンマ区切りのペアとして指定します。
最小化のための目的関数は、平均損失関数 (Learner を参照) と次の表の正則化項を加算することにより作成されます。
| 値 | 説明 |
|---|---|
'lasso' | LASSO (L1) ペナルティ: |
'ridge' | リッジ (L2) ペナルティ: |
正則化項の強度 (式の λ) を指定するには、Lambda を使用します。
バイアス項 (β0) は正則化ペナルティから除外されます。
Solver が 'sparsa' の場合、Regularization の既定値は '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 の次元数が非常に多い場合は非効率的です。Regularization は 'ridge' でなければなりません。 |
'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 のそれぞれの値に対して、ソルバー j の解がソルバー j + 1 のウォーム スタートとして使用されます。
例: {'sgd' 'lbfgs'} は、オブジェクティブを解決するために SGD を適用し、解を LBFGS のウォーム スタートとして使用します。
ヒント
SGD および ASGD は他のソルバーより高速に目的関数を解決できるのに対し、LBFGS および SpaRSA は他のソルバーより正確な解が得られます。
{'sgd' 'lbfgs'}や{'sgd' 'sparsa'}のようにソルバーを組み合わせると、速度と精度の最適化のバランスをとることができます。SGD と ASGD のいずれかを選択する場合、以下を考慮します。
SGD は反復あたりの時間が短くなりますが、収束するまでに必要な反復回数が多くなります。
ASGD は収束するまでに必要な反復回数が少なくなりますが、反復あたりの時間が長くなります。
予測子データが高次元で
Regularizationが'ridge'の場合、Solverに次の組み合わせのいずれかを設定します。'sgd''asgd''dual'(Learnerが'svm'の場合)'lbfgs'{'sgd','lbfgs'}{'asgd','lbfgs'}{'dual','lbfgs'}(Learnerが'svm'の場合)
他の組み合わせも設定できますが、多くの場合、不十分な精度の解となります。
予測子データが中~低次元で
Regularizationが'ridge'の場合、Solverを'bfgs'に設定します。Regularizationが'lasso'の場合、Solverに次の組み合わせのいずれかを設定します。'sgd''asgd''sparsa'{'sgd','sparsa'}{'asgd','sparsa'}
例: 'Solver',{'sgd','lbfgs'}
線形係数の初期推定値 (β)、'Beta' と p 次元の数値ベクトルまたは p 行 L 列の数値行列から構成されるコンマ区切りのペアとして指定します。p はカテゴリカル変数用にダミー変数が作成された後の予測子変数の数 (詳細については、CategoricalPredictors を参照)、L は正則化強度値の数 (詳細については、Lambda を参照) です。
p 次元ベクトルを指定した場合、次のプロセスを使用して目的関数が L 回最適化されます。
初期値として
Beta、正則化強度としてLambdaの最小値を使用して最適化を行う。前回の最適化で生成された推定値をウォーム スタートとして使用し、
Lambda内の次に小さい値を正則化強度として使用して、再度最適化を行う。Lambdaの値をすべて使用するまでステップ 2 を繰り返す。
p 行 L 列の行列を指定した場合、目的関数が L 回最適化されます。反復
jでは、初期値としてBeta(:,が使用され、j)Lambdaを昇順で並べ替えた後で正則化強度としてLambda(が使用されます。j)
'Solver','dual' を設定した場合、Beta は無視されます。
データ型: single | double
切片の初期推定値 (b)。'Bias' と数値スカラーまたは L 次元の数値ベクトルから構成されるコンマ区切りのペアとして指定します。L は正則化強度値の数です (詳細については、Lambda を参照)。
スカラーを指定した場合、次のプロセスを使用して目的関数が L 回最適化されます。
初期値として
Bias、正則化強度としてLambdaの最小値を使用して最適化を行う。生成された推定値を次回の最適化の反復でウォーム スタートとして使用し、
Lambda内の次に小さい値を正則化強度として使用する。Lambdaの値をすべて使用するまでステップ 2 を繰り返す。
L 次元ベクトルを指定した場合、目的関数が L 回最適化されます。反復
jでは、初期値としてBias(が使用され、j)Lambdaを昇順で並べ替えた後で正則化強度としてLambda(が使用されます。j)既定の設定では、次のようになります。
データ型: single | double
線形モデルの切片使用フラグ。'FitBias' と true または false から構成されるコンマ区切りのペアとして指定します。
| 値 | 説明 |
|---|---|
true | 線形モデルにバイアス項 b が追加され、推定されます。 |
false | 推定時に b = 0 に設定されます。 |
例: 'FitBias',false
データ型: logical
最適化後に線形モデルの切片を当てはめるフラグ。'PostFitBias' と true または false から構成されるコンマ区切りのペアとして指定します。
| 値 | 説明 |
|---|---|
false | 最適化時にバイアス項 b と係数 β が推定されます。 |
true | b を推定するため、以下が行われます。
|
true を指定する場合、FitBias は true でなければなりません。
例: 'PostFitBias',true
データ型: logical
詳細レベル。'Verbose' と非負の整数から構成されるコンマ区切りのペアとして指定します。Verbose は、fitrlinear がコマンド ラインに表示する診断情報の量を制御します。
| 値 | 説明 |
|---|---|
0 | fitrlinear は診断情報を表示しません。 |
1 | fitrlinear は、目的関数の値や勾配の大きさなどの診断情報を定期的に表示および格納します。診断情報は FitInfo.History に格納されます。 |
| 他の正の整数 | fitrlinear は、各最適化反復における診断情報を表示および格納します。診断情報は FitInfo.History に格納されます。 |
例: 'Verbose',1
データ型: double | single
SGD および ASGD ソルバーのオプション
ミニバッチのサイズ。'BatchSize' と正の整数から構成されるコンマ区切りのペアとして指定します。各反復では、学習データの観測値を BatchSize 個使用して劣勾配が推定されます。
Xが数値行列の場合、既定値は10です。Xがスパース行列の場合、既定値はmax([10,ceil(sqrt(ff))])です。ここで、ff = numel(X)/nnz(X)(Xの "スパース性係数") です。
例: 'BatchSize',100
データ型: single | double
学習率。'LearnRate' と正のスカラーから構成されるコンマ区切りのペアとして指定します。LearnRate では、各反復で実行するステップの回数を指定します。各反復では、各ステップの方向と大きさが勾配により指定されます。
Regularizationが'ridge'の場合、LearnRateは初期学習率 γ0 を指定します。反復 t の学習率 γt は、次の式を使用して決定されます。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' の場合、次のようになります。
数回の最適化反復について、
LearnRateを学習率として使用して最適化が開始される。目的関数の値が増加した場合、現在の学習率の半分の値を使用して再開される。
目的関数が減少するまで、ステップ 2 が繰り返される。
例: 'OptimizeLearnRate',true
データ型: logical
LASSO 切り捨て実行間のミニバッチの回数。'TruncationPeriod' と正の整数から構成されるコンマ区切りのペアとして指定します。
切り捨て実行の後で、ソフトしきい値が線形係数に適用されます。つまり、k = TruncationPeriod 回のミニバッチが処理された後で、次を使用して係数推定 j が切り捨てられます。
SGD の場合、 はミニバッチを次を満たす k の回数処理した後の係数 j の推定値です。γt は反復 t における学習率です。λ は
Lambdaの値です。ASGD の場合、 はミニバッチを次を満たす k の回数処理した後の係数 j の平均推定値です。
Regularization が 'ridge' の場合、TruncationPeriod は無視されます。
例: 'TruncationPeriod',100
データ型: single | double
他の回帰のオプション
カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。説明は、予測子データの行に観測値、列に予測子があると仮定しています。
| 値 | 説明 |
|---|---|
| 正の整数のベクトル | ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~
|
| logical ベクトル |
|
| 文字行列 | 行列の各行は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。 |
| 文字ベクトルの cell 配列または string 配列 | 配列の各要素は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。 |
"all" | すべての予測子がカテゴリカルです。 |
既定では、予測子データが table (Tbl) 内にある場合、fitrlinear は、その変数が logical ベクトル、categorical ベクトル、文字配列、string 配列または文字ベクトルの cell 配列のいずれかである場合に、変数を categorical であると見なします。予測子データが行列 (X) である場合、fitrlinear はすべての予測子が連続的であると見なします。他の予測子をカテゴリカル予測子として指定するには、名前と値の引数 CategoricalPredictors を使用してそれらを指定します。
特定されたカテゴリカル予測子に対して、fitrlinear はカテゴリカル変数に順序が設定されていないか順序が設定されているかに応じて、2 つの異なる方式を使用してダミー変数を作成します。順序付けのないカテゴリカル変数の場合、fitrlinear は、そのカテゴリカル変数の各レベルについて 1 つずつダミー変数を作成します。順序付けされたカテゴリカル変数の場合、fitrlinear は、カテゴリの数よりも 1 つ少ないダミー変数を作成します。詳細については、ダミー変数の自動作成を参照してください。
例: CategoricalPredictors="all"
データ型: single | double | logical | char | string | cell
予測子変数名。一意な名前の string 配列または一意な文字ベクトルの cell 配列として指定します。PredictorNames の機能は、学習データの提供方法によって決まります。
XとYを指定した場合、PredictorNamesを使用してX内の予測子変数に名前を割り当てることができます。PredictorNames内の名前の順序は、Xの予測子の順序に一致しなければなりません。Xが既定の方向 (行に観測値、列に予測子) をもつと仮定すると、PredictorNames{1}はX(:,1)の名前、PredictorNames{2}はX(:,2)の名前 (以下同様) になります。また、size(X,2)とnumel(PredictorNames)は等しくなければなりません。既定では
PredictorNamesは{'x1','x2',...}です。
Tblを指定する場合、PredictorNamesを使用して学習に使用する予測子変数を選択できます。つまり、fitrlinearは、学習中にPredictorNamesの予測子変数と応答変数のみを使用します。PredictorNamesはTbl.Properties.VariableNamesのサブセットでなければならず、応答変数の名前を含めることはできません。既定では、すべての予測子変数の名前が
PredictorNamesに格納されます。PredictorNamesとformulaの両方ではなく、いずれか一方を使用して学習用の予測子を指定することをお勧めします。
例: PredictorNames=["SepalLength","SepalWidth","PetalLength","PetalWidth"]
データ型: string | cell
応答変数名。文字ベクトルまたは string スカラーとして指定します。
Yを指定した場合、ResponseNameを使用して応答変数の名前を指定できます。ResponseVarNameまたはformulaを指定した場合、ResponseNameを使用できません。
例: ResponseName="response"
データ型: char | string
生の応答値を変換するための関数。関数ハンドルまたは関数名として指定します。既定の設定は "none" です。これは @(y)y、つまり変換なしを表します。関数ハンドルは、ベクトル (元の応答値) を受け入れて同じサイズのベクトル (変換した応答値) を返さなければなりません。
例: myfunction = @(y)exp(y) を使用して、指数変換を入力ベクトルに適用する関数のハンドルを作成するとします。この場合、応答変換として ResponseTransform=myfunction を指定できます。
データ型: char | string | function_handle
観測値の重み。'Weights' と、正の数値ベクトル (または Tbl に含まれる変数の名前) から構成されるコンマ区切りのペアとして指定します。ソフトウェアは、X または Tbl の各観測値に、Weights の対応する値で重みを付けます。Weights の長さは、X または Tbl の観測値の数と等しくなければなりません。
入力データを table Tbl として指定した場合、Weights は数値ベクトルが含まれている Tbl 内の変数の名前にすることができます。この場合、Weights には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、重みのベクトル W が Tbl.W として格納されている場合、'W' として指定します。それ以外の場合、モデルを学習させるときに、Tbl の列は W を含めてすべて予測子として扱われます。
既定の設定では、Weights は ones(n,1) です。n は X または Tbl の観測値数です。
fitrlinear は合計が 1 になるように重みを正規化します。Inf の重みはサポートされません。
データ型: single | double | char | string
交差検証オプション
交差検証フラグ。'Crossval' と 'on' または 'off' から構成されるコンマ区切りのペアとして指定します。
'on' を指定した場合、10 分割の交差検証が実施されます。
この交差検証の設定をオーバーライドするには、名前と値のペアの引数 CVPartition、Holdout、KFold、Leaveout のいずれかを使用します。交差検証済みモデルを作成するために使用できる交差検証の名前と値のペアの引数は、一度に 1 つだけです。
例: 'Crossval','on'
交差検証分割。'CVPartition' と cvpartition により作成された cvpartition 分割オブジェクトで構成されるコンマ区切りのペアとして指定します。分割オブジェクトは交差検証のタイプおよび学習と検証セットのインデックス付けを指定します。
交差検証済みモデルを作成するために使用できるオプションは、CVPartition、Holdout、KFold、Leaveout のいずれかのみです。
ホールドアウト検証に使用されるデータの比率。'Holdout' と、(0,1) の範囲内のスカラー値から成るコンマ区切りのペアとして指定します。'Holdout', を指定すると、次が実行されます。 p
% のデータを検証データとして無作為に予約し、残りのデータを使用してモデルを学習させるp*100コンパクトな学習済みモデルを交差検証済みモデルの
Trainedプロパティに格納する。
交差検証済みモデルを作成するために使用できるオプションは、CVPartition、Holdout、KFold、Leaveout のいずれかのみです。
例: 'Holdout',0.1
データ型: double | single
交差検証分類器で使用する分割の数。'KFold' と 1 より大きい正の整数値から構成されるコンマ区切りのペアとして指定します。たとえば 'KFold',k を指定すると、次が実行されます。
データを無作為に k 個のセットに分割する
各セットについて、そのセットを検証データとして予約し、他の k – 1 個のセットを使用してモデルに学習をさせる
k個のコンパクトな学習済みモデルを、交差検証済みモデルのTrainedプロパティに含まれているk行 1 列の cell ベクトルのセルに格納する。
交差検証済みモデルを作成するために使用できるオプションは、CVPartition、Holdout、KFold、Leaveout のいずれかのみです。
例: 'KFold',8
データ型: single | double
leave-one-out 交差検証。"off" または "on" として指定します。
Leaveout を "on" として指定すると、各観測値について、fitrlinear はその観測値をテスト データとして確保し、それ以外の観測値を使用してモデルに学習させます。
名前と値の引数 CVPartition、Holdout、KFold、Leaveout については、これらのうちのいずれか 1 つのみを使用できます。
例: Leaveout="on"
データ型: single | double
SGD と ASGD の収束制御
バッチを処理する最大回数。'BatchLimit' と正の整数から構成されるコンマ区切りのペアとして指定します。BatchLimit 回のバッチが処理されると、最適化が終了します。
例: 'BatchLimit',100
データ型: single | double
線形係数およびバイアス項 (切片) の相対許容誤差。'BetaTolerance' と非負のスカラーから構成されるコンマ区切りのペアとして指定します。
であるとします。これは、最適化反復 t における係数およびバイアス項のベクトルです。 で最適化が終了します。
Solver で指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver で指定された次のソルバーが使用されます。
例: 'BetaTolerance',1e-6
データ型: single | double
次回の収束チェックの前にバッチを処理する回数。'NumCheckConvergence' と正の整数から構成されるコンマ区切りのペアとして指定します。
バッチのサイズの指定について、BatchSize を参照してください。
既定の設定では、データ セット全体が通されるたびに約 10 回収束がチェックされます。
例: 'NumCheckConvergence',100
データ型: single | double
データを通す最大回数。'PassLimit' と正の整数から構成されるコンマ区切りのペアとして指定します。
データが完全に 1 回通されると、すべての観測値が fitrlinear で処理されます。
データが通される回数が PassLimit になると、fitrlinear は最適化を終了します。
BatchLimit を指定した場合、fitrlinear では、BatchLimit と PassLimit の引数のうち、処理する観測値の数が少なくなる方が使用されます。詳細は、アルゴリズムを参照してください。
例: 'PassLimit',5
データ型: single | double
最適化の収束を検出するための検証データ。'ValidationData' と cell 配列または table で構成されるコンマ区切りのペアとして指定します。
最適化時に、ValidationData の損失が定期的に推定されます。検証データの損失が増加する場合、最適化が終了します。詳細は、アルゴリズムを参照してください。交差検証を使用してハイパーパラメーターを最適化する方法については、CrossVal など交差検証のオプションを参照してください。
応答変数を含む予測子データの table Tbl を使用する場合、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{1}が table である場合、ValidationData{2}はその table 内の応答変数の名前とすることができます。同じResponseVarNameまたはformulaを使用する場合、ValidationData{2}を[]として指定できます。必要に応じて、
ValidationData{3}を観測値の重みについての m 次元の数値ベクトル、または観測値の重みを含む tableValidationData{1}内の変数名として指定できます。検証データに関する重みは、合計が 1 になるように正規化されます。
ValidationData を指定し、コマンド ラインで検証損失を表示するには、0 より大きい値を Verbose に指定します。
Solver で指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver で指定された次のソルバーが使用されます。
既定の設定では、検証データの損失を監視することによる収束の検出は行われません。
勾配の絶対許容誤差。'GradientTolerance' と非負のスカラーから構成されるコンマ区切りのペアとして指定します。GradientTolerance は、Solver の値が 'bfgs'、'lbfgs' または 'sparsa' である場合に適用されます。
最適化反復 t における係数およびバイアス項に関する目的関数の勾配ベクトルを とします。 で最適化が終了します。
BetaTolerance も指定した場合、いずれかの終了条件が fitrlinear で満たされると最適化が終了します。
Solver で指定された最後のソルバーで fitrlinear が収束する場合、最適化が終了します。それ以外の場合、fitrlinear は Solver で指定された次のソルバーを使用します。
例: 'GradientTolerance',eps
データ型: single | double
最適化反復の最大回数。'IterationLimit' と正の整数から構成されるコンマ区切りのペアとして指定します。IterationLimit は、Solver の値が 'bfgs'、'lbfgs' または 'sparsa' である場合に適用されます。
例: 'IterationLimit',1e7
データ型: single | double
双対 SGD 最適化の収束制御
線形係数およびバイアス項 (切片) の相対許容誤差。'BetaTolerance' と非負のスカラーから構成されるコンマ区切りのペアとして指定します。
であるとします。これは、最適化反復 t における係数およびバイアス項のベクトルです。 で最適化が終了します。
DeltaGradientTolerance も指定した場合、いずれかの終了条件が満たされると最適化が終了します。
Solver で指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver で指定された次のソルバーが使用されます。
例: 'BetaTolerance',1e-6
データ型: single | double
上位および下位プールのカルーシュ・キューン・タッカー (KKT) 相補性条件違反値の間における勾配差分の許容誤差。非負のスカラーとして指定します。DeltaGradientTolerance は、Solver の値が 'dual' である場合のみ適用されます。
KKT 違反値の大きさが
DeltaGradientToleranceより小さい場合、fitrlinearは最適化を終了させます。Solverで指定された最後のソルバーでfitrlinearが収束する場合、最適化が終了します。それ以外の場合、fitrlinearはSolverで指定された次のソルバーを使用します。
例: 'DeltaGradientTolerance',1e-2
データ型: double | single
次回の収束チェックの前に処理するデータ セット全体が通される回数。'NumCheckConvergence' と正の整数から構成されるコンマ区切りのペアとして指定します。
例: 'NumCheckConvergence',100
データ型: single | double
データを通す最大回数。'PassLimit' と正の整数から構成されるコンマ区切りのペアとして指定します。
データが完全に 1 回通されると、すべての観測値が処理されます。
データが通される回数が PassLimit になると、最適化が終了します。
例: 'PassLimit',5
データ型: single | double
最適化の収束を検出するための検証データ。'ValidationData' と cell 配列または table で構成されるコンマ区切りのペアとして指定します。
最適化時に、ValidationData の損失が定期的に推定されます。検証データの損失が増加する場合、最適化が終了します。詳細は、アルゴリズムを参照してください。交差検証を使用してハイパーパラメーターを最適化する方法については、CrossVal など交差検証のオプションを参照してください。
応答変数を含む予測子データの table Tbl を使用する場合、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{1}が table である場合、ValidationData{2}はその table 内の応答変数の名前とすることができます。同じResponseVarNameまたはformulaを使用する場合、ValidationData{2}を[]として指定できます。必要に応じて、
ValidationData{3}を観測値の重みについての m 次元の数値ベクトル、または観測値の重みを含む tableValidationData{1}内の変数名として指定できます。検証データに関する重みは、合計が 1 になるように正規化されます。
ValidationData を指定し、コマンド ラインで検証損失を表示するには、0 より大きい値を Verbose に指定します。
Solver で指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver で指定された次のソルバーが使用されます。
既定の設定では、検証データの損失を監視することによる収束の検出は行われません。
BFGS、LBFGS および SpaRSA の収束制御
線形係数およびバイアス項 (切片) の相対許容誤差。非負のスカラーとして指定します。
であるとします。これは、最適化反復 t における係数およびバイアス項のベクトルです。 で最適化が終了します。
GradientTolerance も指定した場合、いずれかの終了条件が満たされると最適化が終了します。
Solver で指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver で指定された次のソルバーが使用されます。
例: 'BetaTolerance',1e-6
データ型: single | double
勾配の絶対許容誤差。非負のスカラーとして指定します。
最適化反復 t における係数およびバイアス項に関する目的関数の勾配ベクトルを とします。 で最適化が終了します。
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 配列または table で構成されるコンマ区切りのペアとして指定します。
最適化時に、ValidationData の損失が定期的に推定されます。検証データの損失が増加する場合、最適化が終了します。詳細は、アルゴリズムを参照してください。交差検証を使用してハイパーパラメーターを最適化する方法については、CrossVal など交差検証のオプションを参照してください。
応答変数を含む予測子データの table Tbl を使用する場合、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{1}が table である場合、ValidationData{2}はその table 内の応答変数の名前とすることができます。同じResponseVarNameまたはformulaを使用する場合、ValidationData{2}を[]として指定できます。必要に応じて、
ValidationData{3}を観測値の重みについての m 次元の数値ベクトル、または観測値の重みを含む tableValidationData{1}内の変数名として指定できます。検証データに関する重みは、合計が 1 になるように正規化されます。
ValidationData を指定し、コマンド ラインで検証損失を表示するには、0 より大きい値を Verbose に指定します。
Solver で指定された最後のソルバーで収束する場合、最適化が終了します。それ以外の場合、Solver で指定された次のソルバーが使用されます。
既定の設定では、検証データの損失を監視することによる収束の検出は行われません。
ハイパーパラメーターの最適化
最適化するパラメーター。'OptimizeHyperparameters' と次のいずれかから構成されるコンマ区切りのペアとして指定します。
'none'— 最適化を行いません。'auto'—{'Lambda','Learner'}を使用します。'all'— すべての使用可能パラメーターを最適化します。使用可能パラメーター名の string 配列または cell 配列。
optimizableVariableオブジェクトのベクトル。通常はhyperparametersの出力です。
最適化では、パラメーターを変化させることにより、fitrlinear の交差検証損失 (誤差) を最小化しようとします。交差検証のタイプおよびその他の最適化の側面を制御するには、名前と値の引数 HyperparameterOptimizationOptions を使用します。HyperparameterOptimizationOptions を使用すると、ConstraintType オプションと ConstraintBounds オプションを設定することにより、交差検証損失の代わりに (コンパクトな) モデル サイズを最適化の目的として使用できます。
メモ
OptimizeHyperparameters の値は、他の名前と値の引数を使用して指定した値より優先されます。たとえば、OptimizeHyperparameters を "auto" に設定すると、fitrlinear は "auto" オプションに対応するハイパーパラメーターを最適化して、ハイパーパラメーターに指定された値を無視します。
fitrlinear では、以下のパラメーターを使用できます。
Lambda—fitrlinearは、既定では範囲[1e-5/NumObservations,1e5/NumObservations]の対数スケールで、正の値を探索します。Learner—fitrlinearは、'svm'と'leastsquares'で探索します。Regularization—fitrlinearは、'ridge'と'lasso'で探索します。Regularizationが'ridge'の場合、Solverの値は既定では'lbfgs'に設定されます。Regularizationが'lasso'の場合、Solverの値は既定では'sparsa'に設定されます。
既定以外のパラメーターを設定するには、既定以外の値が含まれている 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 オブジェクトまたは構造体として指定します。この引数を指定すると、名前と値の引数 OptimizeHyperparameters の効果が変化します。HyperparameterOptimizationOptions を指定する場合、OptimizeHyperparameters も指定しなければなりません。オプションはいずれも任意です。ただし、AggregateOptimizationResults を返すには ConstraintBounds と ConstraintType を設定しなければなりません。構造体で設定できるオプションは HyperparameterOptimizationOptions オブジェクトと同じです。
| オプション | 値 | 既定の設定 |
|---|---|---|
Optimizer |
| "bayesopt" |
ConstraintBounds | N 個の最適化問題の制約範囲。N 行 2 列の数値行列または | [] |
ConstraintTarget | 最適化問題の制約ターゲット。 | ConstraintBounds と ConstraintType を指定する場合の既定値は "matlab" です。そうでない場合、既定値は [] となります。 |
ConstraintType | 最適化問題の制約タイプ。 | [] |
AcquisitionFunctionName | 獲得関数のタイプ:
目的関数の実行時に最適化が決まるので、名前に | "expected-improvement-per-second-plus" |
MaxObjectiveEvaluations | 目的関数評価の最大数。ConstraintBounds を使用して最適化問題を複数指定する場合、MaxObjectiveEvaluations の値は各最適化問題に個別に適用されます。 | "bayesopt" および "randomsearch" の場合は 30、"gridsearch" の場合はグリッド全体 |
MaxTime | 最適化の制限時間。非負の実数スカラーとして指定します。制限時間の単位は、 | Inf |
NumGridDivisions | Optimizer="gridsearch" における各次元の値の個数。値は、各次元の値の個数を表す正の整数のベクトル、またはすべての次元に適用されるスカラーが可能です。カテゴリカル変数の場合、このオプションは無視されます。 | 10 |
ShowPlots | 最適化の進行状況のプロットを表示するかどうかを示す logical 値。このオプションが true の場合、最適な観測された目的関数値が反復回数に対してプロットされます。ベイズ最適化を使用する場合 (Optimizer="bayesopt")、最適な推定された目的関数値もプロットされます。最適な観測された目的関数値および最適な推定された目的関数値は、反復表示の BestSoFar (observed) 列および BestSoFar (estim.) 列の値にそれぞれ対応しています。これらの値は、Mdl.HyperparameterOptimizationResults のプロパティ ObjectiveMinimumTrace および EstimatedObjectiveMinimumTrace で確認できます。問題にベイズ最適化の最適化パラメーターが 1 つまたは 2 つある場合、ShowPlots はパラメーターに対する目的関数のモデルもプロットします。 | true |
SaveIntermediateResults | 最適化の結果を保存するかどうかを示す logical 値。このオプションが true の場合、"BayesoptResults" という名前のワークスペース変数が反復ごとに上書きされます。この変数は BayesianOptimization オブジェクトです。ConstraintBounds を使用して最適化問題を複数指定する場合、ワークスペース変数は "AggregateBayesoptResults" という名前の AggregateBayesianOptimization オブジェクトになります。 | false |
Verbose | コマンド ラインにおける表示レベル:
詳細については、 | 1 |
UseParallel | ベイズ最適化を並列実行するかどうかを示す logical 値。並列実行には Parallel Computing Toolbox™ が必要です。並列でのタイミングに再現性がないため、並列ベイズ最適化で再現性のある結果が生成されるとは限りません。詳細については、並列ベイズ最適化を参照してください。 | false |
Repartition | 反復ごとに交差検証を再分割するかどうかを示す論理値。このオプションが 分割ノイズが考慮されるので、通常は値を | false |
| 次の 3 つのオプションのいずれか 1 つのみを指定してください。 | ||
CVPartition | cvpartition によって作成された cvpartition オブジェクト | 交差検証オプションが指定されていない場合は KFold=5 |
Holdout | ホールドアウトの比率を表す範囲 (0,1) のスカラー | |
KFold | 1 より大きい整数 | |
例: HyperparameterOptimizationOptions=struct(UseParallel=true)
出力引数
学習済みの線形回帰モデル。RegressionLinear モデル オブジェクトまたは RegressionPartitionedLinear 交差検証済みモデル オブジェクトとして返されます。
名前と値のペアの引数 KFold、Holdout、CrossVal、CVPartition のいずれかを設定した場合、Mdl は RegressionPartitionedLinear 交差検証済みモデル オブジェクトになります。それ以外の場合、Mdl は RegressionLinear モデル オブジェクトになります。
Mdl のプロパティを参照するには、ドット表記を使用します。たとえば、推定された係数のベクトルまたは行列を表示するには、コマンド ウィンドウに Mdl.Beta と入力します。
OptimizeHyperparameters を指定して HyperparameterOptimizationOptions の ConstraintType オプションと ConstraintBounds オプションを設定している場合、Mdl はモデル オブジェクトの N 行 1 列の cell 配列になります。ここで、N は ConstraintBounds の行数と等しくなります。いずれの最適化問題からも実行可能なモデルが得られない場合、cell 配列の各値が [] になります。
メモ
他の回帰モデルとは異なり、また、メモリ消費を節約するため、学習データや最適化の詳細 (収束履歴など) は RegressionLinear および RegressionPartitionedLinear モデル オブジェクトに格納されません。
複数の最適化問題についての最適化の結果の集計。AggregateBayesianOptimization オブジェクトとして返されます。AggregateOptimizationResults を返すには、OptimizeHyperparameters と HyperparameterOptimizationOptions を指定しなければなりません。HyperparameterOptimizationOptions の ConstraintType オプションと ConstraintBounds オプションも指定する必要があります。この出力の生成方法を示す例については、Hyperparameter Optimization with Multiple Constraint Boundsを参照してください。
最適化の詳細。構造体配列として返されます。
各フィールドには、最終的な値または名前と値のペアの引数の指定が格納されます。たとえば、Objective は最適化が終了したときの目的関数の値です。多次元フィールドの行は Lambda の値に、列は Solver の値に対応します。
次の表で、主なフィールドを説明します。
| フィールド | 説明 | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
TerminationStatus |
| ||||||||||||||
FitTime | 秒単位の経過実時間 | ||||||||||||||
History | 各反復における最適化情報の構造体配列。
|
フィールドにアクセスするには、ドット表記を使用します。たとえば、各反復における目的関数値のベクトルにアクセスするには、FitInfo.History.Objective と入力します。
OptimizeHyperparameters を指定して HyperparameterOptimizationOptions の ConstraintType オプションと ConstraintBounds オプションを設定している場合、Fitinfo は構造体配列の N 行 1 列の cell 配列になります。ここで、N は ConstraintBounds の行数と等しくなります。
FitInfo を確認して、収束が満足できるものであるかどうかを評価することをお勧めします。
ハイパーパラメーターの交差検証最適化。BayesianOptimization オブジェクト、AggregateBayesianOptimization オブジェクト、またはハイパーパラメーターと関連する値の table として返されます。OptimizeHyperparameters の値が "none" 以外であれば、出力は空以外になります。
HyperparameterOptimizationOptions で ConstraintType オプションと ConstraintBounds オプションを設定した場合、HyperparameterOptimizationResults は AggregateBayesianOptimization オブジェクトになります。それ以外の場合、HyperparameterOptimizationResults の値は HyperparameterOptimizationOptions の Optimizer オプションの値によって異なります。
Optimizer オプションの値 | HyperparameterOptimizationResults の値 |
|---|---|
"bayesopt" (既定の設定) | BayesianOptimization クラスのオブジェクト |
"gridsearch" または "randomsearch" | 使用したハイパーパラメーター、観測された目的関数の値 (交差検証損失)、および最低 (最良) から最高 (最悪) までの観測値の順位が格納されている table |
メモ
Learner が 'leastsquares' の場合、目的関数の損失項は MSE の半分になります。既定の設定では、loss は MSE を返します。したがって、loss を使用して再代入誤差または学習誤差をチェックした場合、loss によって返される MSE は、FitInfo の最適化結果や、Verbose を使用して正の詳細レベルを設定した場合にコマンド ラインに返される結果と異なります。
詳細
"ウォーム スタート" は、収束時間を短縮するために最適化ルーチンに与えられるベータ係数およびバイアス項の初期推定値です。
fitclinear および fitrlinear は、高次元の線形モデルについては比較的高速に目的関数を最小化しますが、精度が犠牲になり、モデルがパラメーターに関して線形でなければならないという制限があります。予測子データ セットが低~中次元の場合は、別の分類または回帰近似関数を使用できます。次の表は、どの近似関数がデータ セットに適しているかを判断するために役立ちます。
| 当てはめるモデル | 関数 | 主なアルゴリズムの違い |
|---|---|---|
| SVM |
| |
| 線形回帰 |
| |
| ロジスティック回帰 |
|
ヒント
観測値が列に対応するように予測子行列を配置して
'ObservationsIn','columns'を指定することをお勧めします。このようにすると、最適化実行時間が大幅に短縮される可能性があります。予測子データに含まれている観測値の数が少なく、予測子変数の数が多い場合、次のようにします。
'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 = normalize(X,2);
観測値が行に対応するように配置する場合は、次のように入力します。
X = normalize(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 関数は、tall 配列を次の使用上の注意事項および制限事項付きでサポートします。
fitrlinearは talltableデータをサポートしていません。一部の名前と値のペアの引数は、インメモリの関数
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'検証のみがサポートされます。既定では、データの 20% がホールドアウト検証データとして選択されて確保され、残りのデータがモデルの学習に使用されます。この引数を使用してホールドアウトの比率に別の値を指定できます。たとえば、データの 30% を検証データとして確保するには'HyperparameterOptimizationOptions',struct('Holdout',0.3)と指定します。
tall 配列の場合、
fitrlinearは各反復で損失と勾配の計算を tall 配列のさまざまな部分に分散させることにより LBFGS を実装します。他のソルバーでは tall 配列を使用できません。BetaとBiasの初期値が与えられなかった場合、fitrlinearはデータの一部に対してローカルにモデルを当てはめ、平均化で係数を結合することにより、はじめにパラメーターの初期推定値を改善します。
詳細は、tall 配列を参照してください。
ハイパーパラメーターの最適化を並列実行するには、fitrlinear 関数を呼び出すときに名前と値の引数 HyperparameterOptimizationOptions で UseParallel=true オプションを使用します。
並列的なハイパーパラメーターの最適化の詳細については、並列ベイズ最適化を参照してください。
並列計算の全般的な情報については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
fitrlinear 関数は GPU 配列入力をサポートしますが、次の使用上の注意および制限があります。
Xをスパースにすることはできません。名前と値の引数
Solverを"sgd"、"asgd"、または"dual"として指定することはできません。gpuArray入力の場合、既定のソルバーは次のようになります。リッジ ペナルティを指定する場合で予測子変数が
101個より少なければ"bfgs"リッジ ペナルティを指定する場合で予測子変数が
100個より多ければ"lbfgs"LASSO ペナルティを指定する場合は
"sparsa"
fitrlinearは、次の少なくとも 1 つに該当する場合に GPU でモデルを当てはめます。入力引数
XがgpuArrayオブジェクトである。入力引数
YがgpuArrayオブジェクトである。入力引数
TblにgpuArrayの予測子変数または応答変数が含まれている。
バージョン履歴
R2016a で導入HyperparameterOptimizationOptions に UseParallel=true が含まれている場合にソフトウェアで並列プールを開けないと、fitrlinear は既定で逐次計算を実行します。
以前のリリースでは、このような状況でソフトウェアからエラーが発行されます。
fitrlinear で、いくつか制限はありますが GPU 配列がサポートされるようになりました。
R2022a 以降では、ハイパーパラメーターを最適化するように指定した場合に、Solver の値を指定しないと、最適化プロセスの各反復で選択された正則化タイプに応じて、メモリ制限 BFGS (LBFGS) ソルバーまたは可分近似によるスパース再構成 (SpaRSA) ソルバーのいずれかが fitrlinear で使用されます。
Regularizationが'ridge'の場合、Solverの値は既定では'lbfgs'に設定されます。Regularizationが'lasso'の場合、Solverの値は既定では'sparsa'に設定されます。
以前のリリースでは、ハイパーパラメーターの最適化での既定のソルバーの選択には、正則化タイプ、学習器タイプ、予測子の数など、さまざまな要因が関係していました。詳細については、Solver を参照してください。
参考
fitrsvm | fitlm | lasso | ridge | fitclinear | predict | kfoldPredict | kfoldLoss | RegressionLinear | RegressionPartitionedLinear
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)