Main Content

loss

一般化加法モデル (GAM) の回帰損失

R2021a 以降

    説明

    L = loss(Mdl,Tbl,ResponseVarName) は、回帰損失 (L) を返します。これは、Tbl.ResponseVarName 内の真の応答値と比較して、一般化加法モデル MdlTbl 内の予測子データをどの程度の精度で予測するかを表すスカラーです。

    L の解釈は損失関数 ('LossFun') と加重スキーム ('Weights') によって異なります。一般に、優れたモデルの方が回帰損失値が小さくなります。'LossFun' の既定値は 'mse' (平均二乗誤差) です。

    L = loss(Mdl,Tbl,Y) は、table Tbl 内の予測子データと Y 内の真の応答値を使用します。

    L = loss(Mdl,X,Y) は、行列 X 内の予測子データと Y 内の真の応答値を使用します。

    L = loss(___,Name,Value) では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、損失関数や観測値の重みを指定できます。

    すべて折りたたむ

    一般化加法モデルのテスト標本回帰損失 (平均二乗誤差) を判定します。複数のモデルで同じタイプの損失を比較した場合、損失が低い方が予測モデルとして優れていることになります。

    patients データ セットを読み込みます。

    load patients

    予測子変数 (AgeDiastolicSmokerWeightGenderSelfAssessedHealthStatus) と応答変数 (Systolic) を格納する table を作成します。

    tbl = table(Age,Diastolic,Smoker,Weight,Gender,SelfAssessedHealthStatus,Systolic);

    観測値を学習セットとテスト セットに無作為に分割します。テスト用に 10% のホールドアウト標本を指定します。

    rng('default') % For reproducibility
    cv = cvpartition(size(tbl,1),'HoldOut',0.10);

    学習インデックスとテスト インデックスを抽出します。

    trainInds = training(cv);
    testInds = test(cv);

    tbl 内の予測子の線形項が格納されている一変量の GAM に学習させます。

    Mdl = fitrgam(tbl(trainInds,:),"Systolic");

    テスト標本回帰損失を推定して、アルゴリズムの一般化の精度を特定します。既定では、RegressionGAM の関数 loss は平均二乗誤差を推定します。

    L = loss(Mdl,tbl(testInds,:))
    L = 35.7540
    

    予測子の線形項と交互作用項の両方が格納されている一般化加法モデル (GAM) に学習させ、学習データとテスト データについて交互作用項を含める場合と含めない場合の回帰損失 (平均二乗誤差、MSE) を推定します。回帰損失を推定する際に交互作用項を含めるかどうかを指定します。

    carbig データ セットを読み込みます。このデータ セットには、1970 年代と 1980 年代初期に製造された自動車の測定値が格納されています。

    load carbig

    予測子変数 (X) として AccelerationDisplacementHorsepower および Weight を、応答変数 (Y) として MPG を指定します。

    X = [Acceleration,Displacement,Horsepower,Weight];
    Y = MPG;

    データ セットを 2 つのセットに分割します。1 つは学習データを含め、もう 1 つは新しい未観測のテスト データを含めます。新しいテスト データ セットの 10 件の観測値を保持します。

    rng('default') % For reproducibility
    n = size(X,1);
    newInds = randsample(n,10);
    inds = ~ismember(1:n,newInds);
    XNew = X(newInds,:);
    YNew = Y(newInds);

    X 内の使用可能なすべての線形項と交互作用項が格納されている一般化加法モデルに学習させます。

    Mdl = fitrgam(X(inds,:),Y(inds),'Interactions','all');

    MdlRegressionGAM モデル オブジェクトです。

    Mdl に交互作用項を含める場合と含めない場合の両方の再代入 MSE (つまり標本内 MSE) を計算します。交互作用項を除外するには、'IncludeInteractions',false を指定します。

    resubl = resubLoss(Mdl)
    resubl = 0.0292
    
    resubl_nointeraction = resubLoss(Mdl,'IncludeInteractions',false)
    resubl_nointeraction = 4.7330
    

    テスト データ セットについて、交互作用項を含める場合と含めない場合の両方の回帰 MSE を計算します。メモリ効率の高いモデル オブジェクトを計算に使用します。

    CMdl = compact(Mdl);

    CMdlCompactRegressionGAM モデル オブジェクトです。

    l = loss(CMdl,XNew,YNew)
    l = 12.8604
    
    l_nointeraction = loss(CMdl,XNew,YNew,'IncludeInteractions',false)
    l_nointeraction = 15.6741
    

    学習データ セットとテスト データ セットのいずれについても、交互作用項を含めた方が誤差が小さくなります。

    入力引数

    すべて折りたたむ

    一般化加法モデル。RegressionGAM または CompactRegressionGAM モデル オブジェクトとして指定します。

    • table に格納されている標本データを使用して Mdl に学習させた場合、loss の入力データも table (Tbl) でなければなりません。

    • 行列に格納されている標本データを使用して Mdl に学習させた場合、loss の入力データも行列 (X) でなければなりません。

    標本データ。テーブルとして指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。

    Tbl には、Mdl に学習させるために使用したすべての予測子が含まれていなければなりません。必要に応じて、Tbl に応答変数用の列と観測値の重み用の列を含めることができます。

    • 応答変数は、数値ベクトルでなければなりません。Tbl に含まれる応答変数が Mdl の学習に使用した応答変数と同じ名前である場合、ResponseVarName を指定する必要はありません。

    • 重みの値は数値ベクトルでなければなりません。Tbl 内の観測値の重みは 'Weights' を使用して指定しなければなりません。

    table に格納されている標本データを使用して Mdl に学習をさせた場合、loss の入力データも table に含まれていなければなりません。

    データ型: table

    応答変数名。Tbl 内の応答変数の名前を含む文字ベクトルまたは string スカラーとして指定します。たとえば、応答変数 YTbl.Y に格納されている場合、'Y' として指定します。

    データ型: char | string

    応答データ。数値列ベクトルとして指定します。Y の各エントリは、X または Tbl の対応する行のデータに対する応答です。

    データ型: single | double

    予測子データ。数値行列として指定します。X の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。

    行列に格納されている標本データを使用して Mdl に学習させた場合、loss の入力データも行列でなければなりません。

    データ型: single | double

    名前と値の引数

    オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

    R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

    例: 'IncludeInteractions',false,'Weights',w は、モデルから交互作用項を除外し、観測値の重み w を使用するように指定します。

    モデルの交互作用項を含むというフラグ。true または false として指定します。

    Mdl に交互作用項が含まれる場合、'IncludeInteractions' の既定値は true です。モデルに交互作用項が含まれない場合、値は false でなければなりません。

    例: 'IncludeInteractions',false

    データ型: logical

    損失関数。'mse' または関数ハンドルとして指定します。

    • 'mse' — 重み付けされた平均二乗誤差。

    • 関数ハンドル — カスタム損失関数を指定するには、関数ハンドルを使用します。関数は次の形式でなければなりません。

      lossval = lossfun(Y,YFit,W)

      • 出力引数 lossval は浮動小数点スカラーです。

      • 関数名 (lossfun) を指定します。

      • Y は、観測応答の長さ n の数値ベクトルです。ここで、n は Tbl または X に含まれている観測値の個数です。

      • YFit は、対応する予測応答の長さ n の数値ベクトルです。

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

    例: 'LossFun',@lossfun

    データ型: char | string | function_handle

    観測値の重み。スカラー値のベクトルまたは Tbl 内の変数の名前として指定します。X または Tbl の各行に含まれている観測値には、Weights の対応する値で重みが付けられます。Weights のサイズは、X または Tbl の行数と同じでなければなりません。

    入力データをテーブル Tbl として指定した場合、Weights は数値ベクトルが含まれている Tbl 内の変数の名前にすることができます。この場合、Weights には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、重みのベクトル WTbl.W として格納されている場合、'W' として指定します。

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

    データ型: single | double | char | string

    詳細

    すべて折りたたむ

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

    重み付けされた平均二乗誤差は、回帰モデルの予測誤差を測定します。複数のモデルで同じタイプの損失を比較した場合、誤差が小さい方が予測モデルとして優れていることになります。

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

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

    ここで、

    • n は、データの行数です。

    • xj は、データの j 番目の行です。

    • yj は、xj に対する真の応答です。

    • f(xj) は、xj に対するモデル Mdl の応答予測です。

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

    バージョン履歴

    R2021a で導入