loss
ガウス カーネル回帰モデルの回帰損失
説明
は、L
= loss(Mdl
,Tbl
,ResponseVarName
)Tbl
内の予測子データと Tbl.ResponseVarName
内の真の応答を使用して、モデル Mdl
の MSE を返します。
では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、回帰損失関数と観測値の重みを指定できます。この場合、L
= loss(___,Name,Value
)loss
は指定された損失関数を使用して加重回帰損失を返します。
例
ガウス カーネル回帰モデルの標本損失の計算
tall 配列についてガウス カーネル回帰モデルに学習をさせ、再代入平均二乗誤差とイプシロン不感応誤差を計算します。
tall 配列に対する計算を実行する場合、MATLAB® は並列プール (Parallel Computing Toolbox™ がある場合は既定) またはローカルの MATLAB セッションを使用します。Parallel Computing Toolbox がある場合にローカルの MATLAB セッションを使用して例を実行するには、関数 mapreducer
を使用してグローバルな実行環境を変更します。
mapreducer(0)
データがあるフォルダーの場所を参照するデータストアを作成します。データは、単一のファイル、ファイルの集まり、またはフォルダー全体のどれに含まれていてもかまいません。datastore
によって NaN
値に置き換えられるようにするため、'NA'
値を欠損データとして扱います。使用する変数のサブセットを選択します。データストアの先頭に tall table を作成します。
varnames = {'ArrTime','DepTime','ActualElapsedTime'}; ds = datastore('airlinesmall.csv','TreatAsMissing','NA',... 'SelectedVariableNames',varnames); t = tall(ds);
予測子変数 (X
) として DepTime
と ArrTime
を、応答変数 (Y
) として ActualElapsedTime
を指定します。ArrTime
が DepTime
より遅い観測値を選択します。
daytime = t.ArrTime>t.DepTime; Y = t.ActualElapsedTime(daytime); % Response data X = t{daytime,{'DepTime' 'ArrTime'}}; % Predictor data
予測子変数を標準化します。
Z = zscore(X); % Standardize the data
標準化された予測子を使用して、既定のガウス カーネル回帰モデルに学習をさせます。'Verbose',0
を設定して、診断メッセージを非表示にします。
[Mdl,FitInfo] = fitrkernel(Z,Y,'Verbose',0)
Mdl = RegressionKernel ResponseName: 'Y' Learner: 'svm' NumExpansionDimensions: 64 KernelScale: 1 Lambda: 8.5385e-06 BoxConstraint: 1 Epsilon: 5.9303
FitInfo = struct with fields:
Solver: 'LBFGS-tall'
LossFunction: 'epsiloninsensitive'
Lambda: 8.5385e-06
BetaTolerance: 1.0000e-03
GradientTolerance: 1.0000e-05
ObjectiveValue: 26.1409
GradientMagnitude: 0.0023
RelativeChangeInBeta: 0.0150
FitTime: 32.5816
History: []
Mdl
は学習済みの RegressionKernel
モデルです。構造体配列 FitInfo
には最適化の詳細が格納されます。
再代入平均二乗誤差とイプシロン不感応誤差を推定することにより、学習済みのモデルが新しい予測子の値に対してどの程度一般化されているかを調べます。
lossMSE = loss(Mdl,Z,Y) % Resubstitution mean squared error
lossMSE = MxNx... tall array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : :
lossEI = loss(Mdl,Z,Y,'LossFun','epsiloninsensitive') % Resubstitution epsilon-insensitive error
lossEI = MxNx... tall array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : :
tall 配列を評価し、gather
を使用して結果をメモリに格納します。
[lossMSE,lossEI] = gather(lossMSE,lossEI)
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 1.7 sec Evaluation completed in 2 sec
lossMSE = 2.5141e+03
lossEI = 25.5148
カスタム回帰損失の指定
ガウス カーネル回帰モデルのカスタム回帰損失 (Huber 損失) を指定します。
carbig
データ セットを読み込みます。
load carbig
予測子変数 (X
) と応答変数 (Y
) を指定します。
X = [Weight,Cylinders,Horsepower,Model_Year]; Y = MPG;
配列 X
および Y
から、それぞれの配列で NaN
値が含まれている行を削除します。NaN
値が含まれている行を削除してからデータを fitrkernel
に渡すと、学習が高速化され、メモリ使用量が少なくなります。
R = rmmissing([X Y]); X = R(:,1:4); Y = R(:,end);
観測値の 10% をホールドアウト標本として予約します。学習インデックスとテスト インデックスを分割の定義から抽出します。
rng(10) % For reproducibility N = length(Y); cvp = cvpartition(N,'Holdout',0.1); idxTrn = training(cvp); % Training set indices idxTest = test(cvp); % Test set indices
カーネル回帰モデルに学習させます。学習データを標準化します。
Xtrain = X(idxTrn,:);
Ytrain = Y(idxTrn);
Mdl = fitrkernel(Xtrain,Ytrain,'Standardize',true)
Mdl = RegressionKernel ResponseName: 'Y' Learner: 'svm' NumExpansionDimensions: 128 KernelScale: 1 Lambda: 0.0028 BoxConstraint: 1 Epsilon: 0.8617
Mdl
は RegressionKernel
モデルです。
次の Huber 損失 を評価する無名関数を作成します。
ここで
は観測値 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 損失関数を使用して、学習セットの回帰損失を推定します。
eTrain = loss(Mdl,Xtrain,Ytrain,'LossFun',huberloss)
eTrain = 1.7210
Huber 損失関数を使用して、テスト セットの回帰損失を推定します。
Xtest = X(idxTest,:);
Ytest = Y(idxTest);
eTest = loss(Mdl,Xtest,Ytest,'LossFun',huberloss)
eTest = 1.3062
入力引数
Mdl
— カーネル回帰モデル
RegressionKernel
モデル オブジェクト
カーネル回帰モデル。RegressionKernel
モデル オブジェクトを指定します。RegressionKernel
モデル オブジェクトは、fitrkernel
を使用して作成できます。
X
— 予測子データ
n 行 p 列の数値行列
予測子データ。n 行 p 列の数値行列を指定します。n は観測値の個数、p は予測子の個数です。p は、Mdl
の学習に使用した予測子の個数と同じでなければなりません。
データ型: single
| double
Tbl
— 標本データ
テーブル
モデルを学習させるために使用する標本データ。テーブルとして指定します。Tbl
の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。必要に応じて、応答変数用および観測値の重み用の追加列を Tbl
に含めることができます。Tbl
には、Mdl
を学習させるために使用したすべての予測子が含まれていなければなりません。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
Mdl
を学習させるために使用した応答変数が Tbl
に含まれている場合、ResponseVarName
または Y
を指定する必要はありません。
テーブルに格納されている標本データを使用して Mdl
の学習を行った場合、loss
の入力データもテーブルに格納されていなければなりません。
ResponseVarName
— 応答変数名
Tbl
内の変数の名前
応答変数の名前。Tbl
内の変数の名前で指定します。応答変数は、数値ベクトルでなければなりません。Mdl
を学習させるために使用した応答変数が Tbl
に含まれている場合、ResponseVarName
を指定する必要はありません。
ResponseVarName
を指定する場合は、文字ベクトルまたは string スカラーとして指定しなければなりません。たとえば、応答変数が Tbl.Y
として格納されている場合、ResponseVarName
として 'Y'
を指定します。それ以外の場合、Tbl
の列は Tbl.Y
を含めてすべて予測子として扱われます。
データ型: char
| string
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: L = loss(Mdl,X,Y,'LossFun','epsiloninsensitive','Weights',weights)
は、イプシロン不感応損失関数を使用して加重回帰損失を返します。
LossFun
— 損失関数
'mse'
(既定値) | 'epsiloninsensitive'
| 関数ハンドル
損失関数。'LossFun'
と組み込みの損失関数名または関数ハンドルから構成されるコンマ区切りのペアとして指定します。
次の表は、使用可能な損失関数の一覧です。対応する文字ベクトルまたは string スカラーを使用して、いずれかを指定します。また、この表では です。
x は p 個の予測子変数による観測値 (行ベクトル) です。
は特徴量を拡張するための観測値 (行ベクトル) の変換です。T(x) は の x を高次元空間 () にマッピングします。
β は m 個の係数のベクトルです。
b はスカラー バイアスです。
値 説明 'epsiloninsensitive'
イプシロン不感応損失: 'mse'
MSE: 'epsiloninsensitive'
は SVM 学習器のみに適しています。関数ハンドル表記を使用して、独自の関数を指定します。
n
をX
の観測値数とします。使用する関数のシグネチャは次のようになっていなければなりません。lossvalue =
lossfun
(Y,Yhat,W)'LossFun',@
を使用して独自の関数を指定します。lossfun
データ型: char
| string
| function_handle
PredictionForMissingValue
— 予測子に欠損値がある観測値に使用する予測した応答値
"median"
(既定値) | "mean"
| "omitted"
| 数値スカラー
R2023b 以降
予測子に欠損値がある観測値に使用する予測した応答値。"median"
、"mean"
、"omitted"
、または数値スカラーとして指定します。
値 | 説明 |
---|---|
"median" | loss は、予測子に欠損値がある観測値について予測した応答値として、学習データ内の観測された応答値の中央値を使用します。 |
"mean" | loss は、予測子に欠損値がある観測値について予測した応答値として、学習データ内の観測された応答値の平均値を使用します。 |
"omitted" | loss は、予測子に欠損値がある観測値を損失の計算から除外します。 |
数値スカラー | loss は、予測子に欠損値がある観測値について予測した応答値として、この値を使用します。 |
観測された応答値または観測値の重みが観測値にない場合、その観測値は loss
による損失の計算に使用されません。
例: "PredictionForMissingValue","omitted"
データ型: single
| double
| char
| string
Weights
— 観測値の重み
ones(size(X,1),1)
(既定値) | 数値ベクトル | Tbl
内の変数の名前
観測値の重み。'Weights'
と数値ベクトル、または Tbl
に含まれる変数の名前から構成されるコンマ区切りのペアとして指定します。
Weights
が数値ベクトルである場合、Weights
のサイズはX
またはTbl
の行数と等しくなければなりません。Weights
がTbl
内の変数名である場合、Weights
を文字ベクトルまたは string スカラーとして指定しなければなりません。たとえば、重みがTbl.W
として格納されている場合、Weights
として'W'
を指定します。それ以外の場合、Tbl
の列はTbl.W
を含めてすべて予測子として扱われます。
観測値の重みを指定した場合、loss
は加重回帰損失、つまり重み付けされた平均二乗誤差またはイプシロン不感応損失関数を計算します。
loss
は合計が 1 になるように Weights
を正規化します。
データ型: double
| single
| char
| string
出力引数
詳細
重み付けされた平均二乗誤差
重み付けされた平均二乗誤差は、次のように計算されます。
ここで、
n は、観測数です。
xj は j 番目の観測値 (予測子データの行) です。
yj は、xj に対する観測された応答です。
f(xj) は、xj に対するガウス カーネル回帰モデル
Mdl
の応答予測です。w は、観測値の重みのベクトルです。
w 内の各観測値の重みは、既定では ones(n,1)/n
に等しくなります。名前と値のペアの引数 'Weights'
を使用することにより、観測値の重みについて異なる値を指定できます。loss
は、合計が 1 になるように Weights
を正規化します。
イプシロン不感応損失関数
イプシロン不感応損失関数は、関数値の距離がイプシロン (ε) 以内である誤差を無視します。この関数は、正式には次のように表されます。
イプシロン不感応損失は、次のように計算されます。
ここで、
n は、観測数です。
xj は j 番目の観測値 (予測子データの行) です。
yj は、xj に対する観測された応答です。
f(xj) は、xj に対するガウス カーネル回帰モデル
Mdl
の応答予測です。w は、観測値の重みのベクトルです。
w 内の各観測値の重みは、既定では ones(n,1)/n
に等しくなります。名前と値のペアの引数 'Weights'
を使用することにより、観測値の重みについて異なる値を指定できます。loss
は、合計が 1 になるように Weights
を正規化します。
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
バージョン履歴
R2018a で導入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") の計算で省略されていました。
R2022a: 欠損値がある予測子データに対して loss
で NaN が返されることがある
関数 loss
で加重平均回帰損失を計算する際に、予測が NaN の観測値が省略されなくなりました。そのため、予測子データ X
または Tbl
内の予測子変数に欠損値がある場合に loss
で NaN が返されることがあります。ほとんどの場合、テスト セットの観測値に予測子の欠損がなければ、関数 loss
で NaN が返されることはありません。
この変更により、fitrauto
を使用する場合の回帰モデルの自動選択が改善されます。この変更の前は、NaN 以外の予測子が少ないモデルが選択される (新しいデータの応答の予測に最適であると予測される) ことがありました。
コードの loss
で NaN が返される場合、このような結果にならないようにコードを更新できます。rmmissing
または fillmissing
を使用して、欠損値を削除するか置き換えます。
次の表に、オブジェクト関数 loss
で NaN が返される可能性がある回帰モデルを示します。詳細については、それぞれの関数 loss
の「互換性の考慮事項」を参照してください。
モデル タイプ | 完全またはコンパクトなモデル オブジェクト | オブジェクト関数 loss |
---|---|---|
ガウス過程回帰 (GPR) モデル | RegressionGP , CompactRegressionGP | loss |
ガウス カーネル回帰モデル | RegressionKernel | loss |
線形回帰モデル | RegressionLinear | loss |
ニューラル ネットワーク回帰モデル | RegressionNeuralNetwork , CompactRegressionNeuralNetwork | loss |
サポート ベクター マシン (SVM) 回帰モデル | RegressionSVM , CompactRegressionSVM | loss |
参考
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)