kfoldLoss
学習で使用しない観測値の回帰損失
説明
は、1 つ以上の L
= kfoldLoss(CVMdl
,Name,Value
)Name,Value
引数のペアによって指定された追加オプションを使用します。たとえば、損失の計算に使用する分割や回帰損失関数を指定します。
入力引数
CVMdl
— 交差検証済みの線形回帰モデル
RegressionPartitionedLinear
モデル オブジェクト
交差検証済み線形回帰モデル。RegressionPartitionedLinear
モデル オブジェクトとして指定します。RegressionPartitionedLinear
モデルを作成するには、fitrlinear
を使用し、交差検証用の名前と値のペアの引数のいずれか 1 つ (CrossVal
など) を指定します。
推定値を取得するため、kfoldLoss は線形回帰モデルの交差検証に使用したものと同じデータ (X
および Y
) を適用します。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
Folds
— 応答の予測に使用する分割のインデックス
1:CVMdl.KFold
(既定値) | 正の整数の数値ベクトル
応答の予測に使用する分割のインデックス。'Folds'
と正の整数の数値ベクトルから構成されるコンマ区切りのペアとして指定します。Folds
の要素は 1
から CVMdl.KFold
の範囲でなければなりません。
例: 'Folds',[1 4 10]
データ型: single
| double
LossFun
— 損失関数
'mse'
(既定値) | 'epsiloninsensitive'
| 関数ハンドル
損失関数。'LossFun'
と組み込み損失関数名または関数ハンドルから構成されるコンマ区切りのペアとして指定します。
次の表は、使用可能な損失関数の一覧です。対応する文字ベクトルまたは string スカラーを使用して、いずれかを指定します。また、この表では です。
β は p 個の係数のベクトルです。
x は p 個の予測子変数による観測値です。
b はスカラー バイアスです。
値 説明 'epsiloninsensitive'
イプシロン不感応損失: 'mse'
MSE: 'epsiloninsensitive'
は SVM 学習器のみに適しています。関数ハンドル表記を使用して独自の関数を指定します。
n
をX
の観測値数とします。使用する関数のシグネチャは次のようになっていなければなりません。ここで、lossvalue =
lossfun
(Y,Yhat,W)出力引数
lossvalue
はスカラーです。関数名 (
lossfun
) を選択します。Y
は観測された応答のn
次元ベクトルです。kfoldLoss
には入力引数Y
でY
を渡します。Yhat
は予測された応答のn
次元ベクトルです。これはpredict
の出力と同様です。W
は、観測値の重みのn
行 1 列の数値ベクトルです。
'LossFun',@
を使用して独自の関数を指定します。lossfun
データ型: char
| string
| function_handle
Mode
— 損失の集約レベル
'average'
(既定値) | 'individual'
損失の集約レベル。'Mode'
と 'average'
または 'individual'
から構成されるコンマ区切りのペアとして指定します。
値 | 説明 |
---|---|
'average' | 分割全体で平均した損失を返す |
'individual' | 各分割について損失を返す |
例: 'Mode','individual'
PredictionForMissingValue
— 予測子に欠損値がある観測値に使用する予測した応答値
"median"
| "mean"
| "omitted"
| 数値スカラー
R2023b 以降
予測子に欠損値がある観測値に使用する予測した応答値。"median"
、"mean"
、"omitted"
、または数値スカラーとして指定します。
値 | 説明 |
---|---|
"median" | kfoldLoss は、予測子に欠損値がある観測値について予測した応答値として、学習分割データ内の観測された応答値の中央値を使用します。 |
"mean" | kfoldLoss は、予測子に欠損値がある観測値について予測した応答値として、学習分割データ内の観測された応答値の平均値を使用します。 |
"omitted" | kfoldLoss は、予測子に欠損値がある観測値を損失の計算から除外します。 |
数値スカラー | kfoldLoss は、予測子に欠損値がある観測値について予測した応答値として、この値を使用します。 |
観測された応答値または観測値の重みが観測値にない場合、その観測値は kfoldLoss
による損失の計算に使用されません。
例: "PredictionForMissingValue","omitted"
データ型: single
| double
| char
| string
出力引数
L
— 交差検証回帰損失
数値スカラー | 数値ベクトル | 数値行列
交差検証回帰損失。数値スカラー、ベクトルまたは行列として返されます。L
の解釈は LossFun
によって異なります。
交差検証済みモデルの正則化強度の数 (numel(CVMdl.Trained{1}.Lambda)
に格納) を R
、分割数 (CVMdl.KFold
に格納) を F
とします。
Mode
が'average'
の場合、L
は 1 行R
列のベクトルになります。L(
は、正則化強度j
)j
を使用する交差検証済みモデルのすべての分割に対する平均回帰損失です。それ以外の場合、
L
はF
行R
列の行列になります。L(
は、正則化強度i
,j
)j
を使用する交差検証済みモデルの分割i
に対する回帰損失です。
例
k 分割平均二乗誤差の推定
次のモデルにより、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);
SVM 学習器を使用する線形回帰モデルを交差検証します。
rng(1); % For reproducibility CVMdl = fitrlinear(X,Y,'CrossVal','on');
CVMdl
は RegressionPartitionedLinear
モデルです。既定では、10 分割交差検証が実行されます。'KFold'
名前と値のペアの引数を使用して分割数を変更できます。
テスト標本の MSE の平均を推定します。
mse = kfoldLoss(CVMdl)
mse = 0.1735
または、名前と値のペアの引数 'Mode','individual'
を kfoldLoss
で指定することにより、分割ごとの MSE を取得できます。
カスタム回帰損失の指定
k 分割平均二乗誤差の推定で説明されているようにデータをシミュレートします。
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); X = X'; % Put observations in columns for faster training
10 分割の交差検証を使用して線形回帰モデルを交差検証します。SpaRSA を使用して目的関数を最適化します。
CVMdl = fitrlinear(X,Y,'CrossVal','on','ObservationsIn','columns',... 'Solver','sparsa');
CVMdl
は RegressionPartitionedLinear
モデルです。このモデルに含まれている Trained
プロパティは、学習セットを使用して学習を行った RegressionLinear
モデルが格納されている 10 行 1 列の cell 配列です。
次の Huber 損失 ( = 1) を評価する無名関数を作成します。
ここで
は観測値 j の残差です。カスタム損失関数は特定の形式で記述しなければなりません。カスタム損失関数の記述に関するルールについては、名前と値のペアの引数 'LossFun'
を参照してください。
huberloss = @(Y,Yhat,W)sum(W.*((0.5*(abs(Y-Yhat)<=1).*(Y-Yhat).^2) + ...
((abs(Y-Yhat)>1).*abs(Y-Yhat)-0.5)))/sum(W);
分割全体に対する平均の Huber 損失を推定します。また、各分割の Huber 損失も取得します。
mseAve = kfoldLoss(CVMdl,'LossFun',huberloss)
mseAve = -0.4448
mseFold = kfoldLoss(CVMdl,'LossFun',huberloss,'Mode','individual')
mseFold = 10×1
-0.4454
-0.4473
-0.4453
-0.4469
-0.4434
-0.4434
-0.4465
-0.4430
-0.4438
-0.4426
交差検証の使用による適切な LASSO ペナルティの特定
最小二乗を使用する線形回帰モデルに適した 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: [-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'
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'
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
は、データをシミュレートした係数に近くなっています。
拡張機能
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この関数は、GPU 配列を完全にサポートします。詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2016a で導入R2024a: GPU 配列の指定 (Parallel Computing Toolbox が必要)
kfoldLoss
は GPU 配列を完全にサポートします。
R2023b: 予測子に欠損値がある観測値に使用する予測した応答値の指定
R2023b 以降で損失を予測または計算する際、一部の回帰モデルでは、予測子に欠損値がある観測値について予測した応答値を指定できます。名前と値の引数 PredictionForMissingValue
を指定して、予測値として数値スカラー、学習セットの中央値、または学習セットの平均値を使用します。損失を計算するときに、予測子に欠損値がある観測値を省略するように指定することもできます。
次の表は、名前と値の引数 PredictionForMissingValue
をサポートするオブジェクト関数の一覧です。既定では、これらの関数は、予測子に欠損値がある観測値について予測した応答値として、学習セットの中央値を使用します。
モデル タイプ | モデル オブジェクト | オブジェクト関数 |
---|---|---|
ガウス過程回帰 (GPR) モデル | RegressionGP , CompactRegressionGP | loss , predict , resubLoss , resubPredict |
RegressionPartitionedGP | kfoldLoss , kfoldPredict | |
ガウス カーネル回帰モデル | RegressionKernel | loss , predict |
RegressionPartitionedKernel | kfoldLoss , kfoldPredict | |
線形回帰モデル | RegressionLinear | loss , predict |
RegressionPartitionedLinear | kfoldLoss , kfoldPredict | |
ニューラル ネットワーク回帰モデル | RegressionNeuralNetwork , CompactRegressionNeuralNetwork | loss , predict , resubLoss , resubPredict |
RegressionPartitionedNeuralNetwork | kfoldLoss , kfoldPredict | |
サポート ベクター マシン (SVM) 回帰モデル | RegressionSVM , CompactRegressionSVM | loss , predict , resubLoss , resubPredict |
RegressionPartitionedSVM | kfoldLoss , kfoldPredict |
以前のリリースでは、上記の回帰モデル関数 loss
および predict
は、予測子に欠損値がある観測値について予測した応答値として NaN
を使用していました。予測子に欠損値がある観測値は、予測と損失の再代入 ("resub") と交差検証 ("kfold") の計算で省略されていました。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
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: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)