ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

loss

ガウス カーネル回帰モデルの回帰損失

説明

L = loss(Mdl,X,Y) は、X 内の予測子データと Y 内の対応する応答を使用して、ガウス カーネル回帰モデル Mdl の平均二乗誤差 (MSE) を返します。

L = loss(Mdl,X,Y,Name,Value) は、1 つ以上の名前と値のペアの引数によって指定された追加オプションを使用します。たとえば、回帰損失関数と観測値の重みを指定できます。この場合、loss は指定された損失関数を使用して加重回帰損失を返します。

すべて折りたたむ

tall 配列についてガウス カーネル回帰モデルに学習をさせ、再代入平均二乗誤差とイプシロン不感応誤差を計算します。

データがあるフォルダーの場所を参照するデータストアを作成します。データは、単一のファイル、ファイルの集まり、またはフォルダー全体のどれに含まれていてもかまいません。datastore によって NaN 値に置き換えられるようにするため、'NA' 値を欠損データとして扱います。使用する変数のサブセットを選択します。データストアの先頭に tall table を作成します。

varnames = {'ArrTime','DepTime','ActualElapsedTime'};
ds = datastore('airlinesmall.csv','TreatAsMissing','NA',...
    'SelectedVariableNames',varnames);
t = tall(ds);
Starting parallel pool (parpool) using the 'local' profile ...
connected to 6 workers.

予測子変数 (X) として DepTimeArrTime を、応答変数 (Y) として ActualElapsedTime を指定します。ArrTimeDepTime より遅い観測値を選択します。

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
            PredictorNames: {'x1'  'x2'}
              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: 31.2279
       GradientMagnitude: 0.0182
    RelativeChangeInBeta: 0.0465
                 FitTime: 68.4420
                 History: []

Mdl は学習済みの RegressionKernel モデルです。構造体配列 FitInfo には最適化の詳細が格納されます。

再代入平均二乗誤差とイプシロン不感応誤差を推定することにより、学習済みのモデルが新しい予測子の値に対してどの程度一般化されているかを調べます。

lossMSE = loss(Mdl,Z,Y) % Resubstitution mean squared error
lossMSE =

  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 Parallel Pool 'local':
- Pass 1 of 1: Completed in 2 sec
Evaluation completed in 2.4 sec
lossMSE = 2.8508e+03
lossEI = 28.1095

ガウス カーネル回帰モデルのカスタム回帰損失 (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);
[Ztrain,tr_mu,tr_sigma] = zscore(Xtrain); % Standardize the training data
tr_sigma(tr_sigma==0) = 1;
Mdl = fitrkernel(Ztrain,Ytrain)
Mdl = 
  RegressionKernel
              ResponseName: 'Y'
                   Learner: 'svm'
    NumExpansionDimensions: 128
               KernelScale: 1
                    Lambda: 0.0028
             BoxConstraint: 1
                   Epsilon: 0.8617


  Properties, Methods

MdlRegressionKernel モデルです。

次の Huber 損失 (δ=1) を評価する無名関数を作成します。

L=1wjj=1nwjj,

ここで、

j={0.5ejˆ2;|ejˆ|-0.5;|ejˆ|1|ejˆ|>1.

ejˆ は観測値 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,Ztrain,Ytrain,'LossFun',huberloss)
eTrain = 1.7210

学習データの列と同じ平均および標準偏差を使用してテスト データを標準化します。Huber 損失関数を使用して、テスト セットの回帰損失を推定します。

Xtest = X(idxTest,:);
Ztest = (Xtest-tr_mu)./tr_sigma; % Standardize the test data
Ytest = Y(idxTest);

eTest = loss(Mdl,Ztest,Ytest,'LossFun',huberloss)
eTest = 1.3062

入力引数

すべて折りたたむ

カーネル回帰モデル。RegressionKernel モデル オブジェクトを指定します。RegressionKernel モデル オブジェクトは、fitrkernel を使用して作成できます。

予測子データ。n 行 p 列の数値行列を指定します。n は観測値の個数、p は予測子の個数です。p は、Mdl の学習に使用した予測子の個数と同じでなければなりません。

データ型: single | double

応答データ。n 次元の数値ベクトルを指定します。Y の長さと X の観測値数は同じでなければなりません。

データ型: single | double

名前と値のペアの引数

オプションの Name,Value 引数のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: L = loss(Mdl,X,Y,'LossFun','epsiloninsensitive','Weights',weights) は、イプシロン不感応損失関数を使用して加重回帰損失を返します。

損失関数。'LossFun' と組み込みの損失関数名または関数ハンドルから構成されるコンマ区切りのペアとして指定します。

  • 次の表は、使用可能な損失関数の一覧です。対応する文字ベクトルまたは string スカラーを使用して、いずれかを指定します。また、この表では f(x)=T(x)β+b. です。

    • x は p 個の予測子変数による観測値 (行ベクトル) です。

    • T(·) は特徴量を拡張するための観測値 (行ベクトル) の変換です。T(x)p 内の x を高次元空間 (m) にマッピングします。

    • β は m 個の係数のベクトルです。

    • b はスカラー バイアスです。

    説明
    'epsiloninsensitive'イプシロン不感応損失: [y,f(x)]=max[0,|yf(x)|ε]
    'mse'MSE: [y,f(x)]=[yf(x)]2

    'epsiloninsensitive' は SVM 学習器のみに適しています。

  • 関数ハンドル表記を使用して、独自の関数を指定します。

    nX の観測値数とします。使用する関数のシグネチャは次のようになっていなければなりません。

    lossvalue = lossfun(Y,Yhat,W)

    • 出力引数 lossvalue はスカラーです。

    • 関数名 (lossfun) を選択します。

    • Y は観測された応答の n 次元ベクトルです。loss には入力引数 YY を渡します。

    • Yhat は予測された応答の n 次元ベクトルです。これは predict の出力と同様です。

    • W は、観測値の重みの n 行 1 列の数値ベクトルです。

    'LossFun',@lossfun を使用して独自の関数を指定します。

データ型: char | string | function_handle

観測値の重み。'Weights' と正の値の数値ベクトルから構成されるコンマ区切りのペアとして指定します。loss は、Weights 内の対応する値を使用して X 内の観測値に重みを付けます。Weights のサイズは、観測値の個数 n (X の行数) と同じでなければなりません。観測値の重みを指定した場合、loss は加重回帰損失、つまり重み付けされた平均二乗誤差またはイプシロン不感応損失関数を計算します。

loss は合計が 1 になるように Weights を正規化します。

データ型: double | single

出力引数

すべて折りたたむ

回帰損失。数値スカラーとして返されます。L の解釈は WeightsLossFun によって異なります。たとえば、既定の観測値の重みを使用し、損失関数として 'epsiloninsensitive' を指定した場合、L はイプシロン不感応損失です。

詳細

すべて折りたたむ

重み付けされた平均二乗誤差

重み付けされた平均二乗誤差は、次のように計算されます。

mse=j=1nwj(f(xj)yj)2j=1nwj,

ここで、

  • n は、観測数です。

  • xj は j 番目の観測値 (予測子データの行) です。

  • yj は、xj に対する観測された応答です。

  • f(xj) は、xj に対するガウス カーネル回帰モデル Mdl の応答予測です。

  • w は、観測値の重みのベクトルです。

w 内の各観測値の重みは、既定では ones(n,1)/n に等しくなります。名前と値のペアの引数 'Weights' を使用することにより、観測値の重みについて異なる値を指定できます。loss は、合計が 1 になるように Weights を正規化します。

イプシロン不感応損失関数

イプシロン不感応損失関数は、関数値の距離がイプシロン (ε) 以内である誤差を無視します。この関数は、正式には次のように表されます。

Lossε={0,if|yf(x)|ε|yf(x)|ε,otherwise.

イプシロン不感応損失は、次のように計算されます。

Loss=j=1nwjmax(0,|yjf(xj)|ε)j=1nwj,

ここで、

  • n は、観測数です。

  • xj は j 番目の観測値 (予測子データの行) です。

  • yj は、xj に対する観測された応答です。

  • f(xj) は、xj に対するガウス カーネル回帰モデル Mdl の応答予測です。

  • w は、観測値の重みのベクトルです。

w 内の各観測値の重みは、既定では ones(n,1)/n に等しくなります。名前と値のペアの引数 'Weights' を使用することにより、観測値の重みについて異なる値を指定できます。loss は、合計が 1 になるように Weights を正規化します。

拡張機能

R2018a で導入