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
Properties, Methods
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: 11.7611
History: []
Mdl は学習済みの RegressionKernel モデルです。構造体配列 FitInfo には最適化の詳細が格納されます。
再代入平均二乗誤差とイプシロン不感応誤差を推定することにより、学習済みのモデルが新しい予測子の値に対してどの程度一般化されているかを調べます。
lossMSE = loss(Mdl,Z,Y) % Resubstitution mean squared errorlossMSE =
M×N×... tall array
? ? ? ...
? ? ? ...
? ? ? ...
: : :
: : :
Preview deferred. Learn more.
lossEI = loss(Mdl,Z,Y,'LossFun','epsiloninsensitive') % Resubstitution epsilon-insensitive error
lossEI =
M×N×... tall array
? ? ? ...
? ? ? ...
? ? ? ...
: : :
: : :
Preview deferred. Learn more.
tall 配列を評価し、gather を使用して結果をメモリに格納します。
[lossMSE,lossEI] = gather(lossMSE,lossEI)
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 0.55 sec Evaluation completed in 0.69 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
Properties, Methods
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
入力引数
カーネル回帰モデル。RegressionKernel モデル オブジェクトを指定します。RegressionKernel モデル オブジェクトは、fitrkernel を使用して作成できます。
予測子データ。n 行 p 列の数値行列を指定します。n は観測値の個数、p は予測子の個数です。p は、Mdl の学習に使用した予測子の個数と同じでなければなりません。
データ型: single | double
モデルを学習させるために使用する標本データ。table として指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。必要に応じて、応答変数用および観測値の重み用の追加列を Tbl に含めることができます。Tbl には、Mdl を学習させるために使用したすべての予測子が含まれていなければなりません。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
Mdl を学習させるために使用した応答変数が Tbl に含まれている場合、ResponseVarName または Y を指定する必要はありません。
テーブルに格納されている標本データを使用して Mdl の学習を行った場合、loss の入力データもテーブルに格納されていなければなりません。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。
例: L = loss(Mdl,X,Y,'LossFun','epsiloninsensitive','Weights',weights) は、イプシロン不感応損失関数を使用して加重回帰損失を返します。
損失関数。'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
R2023b 以降
予測子に欠損値がある観測値に使用する予測した応答値。"median"、"mean"、"omitted"、または数値スカラーとして指定します。
| 値 | 説明 |
|---|---|
"median" | loss は、予測子に欠損値がある観測値について予測した応答値として、学習データ内の観測された応答値の中央値を使用します。 |
"mean" | loss は、予測子に欠損値がある観測値について予測した応答値として、学習データ内の観測された応答値の平均値を使用します。 |
"omitted" | loss は、予測子に欠損値がある観測値を損失の計算から除外します。 |
| 数値スカラー | loss は、予測子に欠損値がある観測値について予測した応答値として、この値を使用します。 |
観測された応答値または観測値の重みが観測値にない場合、その観測値は loss による損失の計算に使用されません。
例: PredictionForMissingValue="omitted"
データ型: single | double | char | string
観測値の重み。'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 を正規化します。
拡張機能
この関数は、GPU 配列を完全にサポートします。詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2018a で導入loss は GPU 配列を完全にサポートします。
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") の計算で省略されていました。
関数 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 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)