メインコンテンツ

loss

R2026b

ガウス カーネル分類モデルの分類損失

説明

L = loss(Mdl,X,Y) は、X 内の予測子データと Y 内の対応するクラス ラベルを使用して、バイナリ ガウス カーネル分類モデル Mdl の分類損失を返します。

例

L = loss(Mdl,Tbl,ResponseVarName) は、Tbl 内の予測子データと Tbl.ResponseVarName 内の真のクラス ラベルを使用して、モデル Mdl の分類損失を返します。

L = loss(Mdl,Tbl,Y) は、table Tbl 内の予測子データと Y 内の真のクラス ラベルを使用して、モデル Mdl の分類損失を返します。

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

例

例

すべて折りたたむ

ionosphere データ セットを読み込みます。このデータ セットには、レーダー反射についての 34 個の予測子と、不良 (b) または良好 (g) という 351 個の二項反応が含まれています。

load ionosphere

データ セットを学習セットとテスト セットに分割します。テスト セット用に 15% のホールドアウト標本を指定します。

rng("default") % For reproducibility
Partition = cvpartition(Y,Holdout=0.15);
trainingInds = training(Partition); % Indices for the training set
testInds = test(Partition); % Indices for the test set

学習セットを使用してバイナリ カーネル分類モデルに学習をさせます。

Mdl = fitckernel(X(trainingInds,:),Y(trainingInds));

学習セットの分類誤差とテスト セットの分類誤差を推定します。

ceTrain = loss(Mdl,X(trainingInds,:),Y(trainingInds))
ceTrain = 
0.0067
ceTest = loss(Mdl,X(testInds,:),Y(testInds))
ceTest = 
0.1140

ionosphere データ セットを読み込みます。このデータ セットには、レーダー反射についての 34 個の予測子と、不良 (b) または良好 (g) という 351 個の二項反応が含まれています。

load ionosphere

データ セットを学習セットとテスト セットに分割します。テスト セット用に 15% のホールドアウト標本を指定します。

rng("default") % For reproducibility
Partition = cvpartition(Y,Holdout=0.15);
trainingInds = training(Partition); % Indices for the training set
testInds = test(Partition); % Indices for the test set

学習セットを使用してバイナリ カーネル分類モデルに学習をさせます。

Mdl = fitckernel(X(trainingInds,:),Y(trainingInds));

次の線形損失を評価する無名関数を作成します。

L=∑j-wjyjfj∑jwj.

wj は観測値 j の重み、yj は応答 j (陰性クラスの場合は -1、それ以外の場合は 1)、fj は観測値 j の生の分類スコアです。

linearloss = @(C,S,W,Cost)sum(-W.*sum(S.*C,2))/sum(W);

カスタム損失関数は特定の形式で記述しなければなりません。カスタム損失関数の記述に関するルールについては、名前と値の引数 LossFun を参照してください。

線形損失関数を使用して、学習セットの分類損失とテスト セットの分類損失を推定します。

ceTrain = loss(Mdl,X(trainingInds,:),Y(trainingInds), ...
    LossFun=linearloss)
ceTrain = 
-1.0851
ceTest = loss(Mdl,X(testInds,:),Y(testInds), ...
    LossFun=linearloss)
ceTest = 
-0.7821

入力引数

すべて折りたたむ

バイナリ カーネル分類モデル。ClassificationKernel モデル オブジェクトを指定します。ClassificationKernel モデル オブジェクトは、fitckernel を使用して作成できます。

予測子データ。n 行 p 列の数値行列を指定します。n は観測値の個数、p は Mdl の学習に使用した予測子の個数です。

Y の長さと X の観測値数は同じでなければなりません。

データ型: single | double

クラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。

  • Y のデータ型は Mdl.ClassNames のデータ型と同じでなければなりません。(string 配列は文字ベクトルの cell 配列として扱われます)。

  • Y の各クラスは Mdl.ClassNames のサブセットでなければなりません。

  • Y が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。

  • Y の長さは X または Tbl の観測値の数と等しくなければなりません。

データ型: categorical | char | string | logical | single | double | cell

モデルを学習させるために使用する標本データ。table として指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。必要に応じて、応答変数用および観測値の重み用の追加列を Tbl に含めることができます。Tbl には、Mdl を学習させるために使用したすべての予測子が含まれていなければなりません。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。

Mdl を学習させるために使用した応答変数が Tbl に含まれている場合、ResponseVarName または Y を指定する必要はありません。

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

応答変数の名前。Tbl 内の変数の名前で指定します。Mdl を学習させるために使用した応答変数が Tbl に含まれている場合、ResponseVarName を指定する必要はありません。

ResponseVarName を指定する場合は、文字ベクトルまたは string スカラーとして指定しなければなりません。たとえば、応答変数が Tbl.Y として格納されている場合、ResponseVarName として "Y" を指定します。それ以外の場合、Tbl の列は Tbl.Y を含めてすべて予測子として扱われます。

応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。応答変数が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。

データ型: char | string

名前と値の引数

すべて折りたたむ

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

例: loss(Mdl,X,Y,LossFun="quadratic",Weights=weights) は、二次損失関数を使用して重み付きの分類損失を返します。

損失関数。組み込みの損失関数名または関数ハンドルを指定します。

  • 次の表は、使用できる損失関数の一覧です。対応する値を使用していずれかを指定します。

    値説明
    "binodeviance"二項分布からの逸脱度
    "classifcost"観測誤分類コスト
    "classiferror"10 進数の誤分類率
    "exponential"指数損失
    "hinge"ヒンジ損失
    "logit"ロジスティック損失
    "mincost"最小予測誤分類コスト (事後確率である分類スコアの場合)
    "quadratic"二次損失

    "mincost" は、事後確率である分類スコアに適しています。カーネル分類モデルの場合、既定の設定ではロジスティック回帰学習器は事後確率を分類スコアとして返しますが、SVM 学習器はそうではありません (predict を参照)。

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

    lossvalue = lossfun(C,S,W,Cost)

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

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

    • C は n 行 K 列の logical 行列であり、対応する観測値が属するクラスを各行が示します。n は Tbl または X 内の観測値の個数、K は異なるクラスの個数 (numel(Mdl.ClassNames)) です。列の順序は Mdl.ClassNames のクラスの順序に対応します。各行について観測値 p がクラス q に属する場合は C(p,q) = 1 を設定することにより、C を作成します。行 p の他のすべての要素を 0 に設定します。

    • S は、分類スコアの n 行 K 列の行列です。列の順序は Mdl.ClassNames のクラスの順序に対応します。S は分類スコアの行列で、predict の出力と同様です。

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

    • Cost は、誤分類コストの、K 行 K 列の数値行列です。たとえば、Cost = ones(K) – eye(K) は、正しい分類のコストとして 0 を、誤分類のコストとして 1 を指定します。

例: LossFun=@lossfun

データ型: char | string | function_handle

R2026b 以降

クラスの重み (事前確率)。"empirical"、"uniform"、または数値ベクトルとして指定します。

値説明
"empirical" loss は、Y または Tbl.ResponseVarName におけるクラスの頻度を使用します。クラスに関して重み付けされていない損失が関数から返されます。
"uniform" loss は、1/K の重みを各クラスに割り当てます。ここで、K はクラスの個数です。
数値ベクトルクラスごとにカスタムの重みを指定します。重みの合計は 1 と等しくなければなりません。

既定では、loss は、分類モデルの Prior プロパティで指定されたクラス事前確率を使用します。

例: Prior="empirical"

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

観測値の重み。数値ベクトルまたは Tbl 内の変数の名前を指定します。

  • Weights が数値ベクトルである場合、Weights のサイズは X または Tbl の行数と等しくなければなりません。

  • Weights が Tbl 内の変数名である場合、Weights を文字ベクトルまたは string スカラーとして指定しなければなりません。たとえば、重みが Tbl.W として格納されている場合、Weights として "W" を指定します。それ以外の場合、Tbl の列は Tbl.W を含めてすべて予測子として扱われます。

重みを指定した場合、loss は、重み付きの分類損失を計算し、合計がそれぞれのクラスの事前確率の値になるように重みを正規化します。

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

出力引数

すべて折りたたむ

分類損失。数値スカラーとして返されます。L の解釈は、LossFun、Prior、および Weights によって異なります。

詳細

すべて折りたたむ

ヒント

  • 既定では、loss は、学習時に指定されたクラス確率 (分類モデルの Prior プロパティに格納) を使用して分類損失を計算します。クラスで重み付けされていない損失を返すには、Prior="empirical" を指定します。 (R2026b 以降)

  • X または Tbl の予測子データに欠損値があり、LossFun が "classifcost"、"classiferror"、または "mincost" に設定されていない場合、loss 関数で NaN が返されることがあります。 (R2022a 以降)

    コードの loss で NaN が返される場合、このような結果にならないように、次のいずれかを行ってコードを更新できます。

    • rmmissing または fillmissing を使用して、欠損値を削除するか置き換えます。

    • 名前と値の引数 LossFun を "classifcost"、"classiferror"、または "mincost" として指定します。

拡張機能

すべて展開する

バージョン履歴

R2017b で導入

すべて展開する