Main Content

loss

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

説明

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 は指定された損失関数を使用して重み付きの分類損失を返します。

メモ

X または Tbl の予測子データに欠損値があり、LossFun"classifcost""classiferror"、または "mincost" に設定されていない場合、関数 loss で NaN が返されることがあります。詳細については、欠損値がある予測子データに対して loss で NaN が返されることがあるを参照してください。

すべて折りたたむ

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-wjyjfjjwj.

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

モデルを学習させるために使用する標本データ。テーブルとして指定します。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 は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

例: 'LossFun',@lossfun

データ型: char | string | function_handle

観測値の重み。'Weights' と数値ベクトル、または Tbl に含まれる変数の名前から構成されるコンマ区切りのペアとして指定します。

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

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

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

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

出力引数

すべて折りたたむ

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

詳細

すべて折りたたむ

分類損失

"分類損失" 関数は分類モデルの予測誤差を評価します。複数のモデルで同じタイプの損失を比較した場合、損失が低い方が予測モデルとして優れていることになります。

以下のシナリオを考えます。

  • L は加重平均分類損失です。

  • n は標本サイズです。

  • yj は観測されたクラス ラベルです。陰性クラスを示す -1 または陽性クラスを示す 1 (あるいは、ClassNames プロパティの最初のクラスを示す -1 または 2 番目のクラスを示す 1) を使用して符号化されます。

  • f(Xj) は予測子データ X の観測値 (行) j に対する陽性クラスの分類スコアです。

  • mj = yjf(Xj) は、yj に対応するクラスに観測値 j を分類する分類スコアです。正の値の mj は正しい分類を示しており、平均損失に対する寄与は大きくありません。負の値の mj は正しくない分類を示しており、平均損失に大きく寄与します。

  • 観測値 j の重みは wj です。観測値の重みは、その合計が Prior プロパティに格納された対応するクラスの事前確率になるように正規化されます。そのため、次のようになります。

    j=1nwj=1.

この状況では、名前と値の引数 LossFun を使用して指定できる、サポートされる損失関数は次の表のようになります。

損失関数LossFun の値
二項分布からの逸脱度'binodeviance'L=j=1nwjlog{1+exp[2mj]}.
観測誤分類コスト'classifcost'

L=j=1nwjcyjy^j,

ここで、y^j はスコアが最大のクラスに対応するクラス ラベル、cyjy^j は真のクラスが yj である場合に観測値をクラス y^j に分類するユーザー指定のコストです。

10 進数の誤分類率'classiferror'

L=j=1nwjI{y^jyj},

ここで、I{·} はインジケーター関数です。

クロスエントロピー損失'crossentropy'

'crossentropy' はニューラル ネットワーク モデルのみに適しています。

加重クロスエントロピー損失は次となります。

L=j=1nw˜jlog(mj)Kn,

ここで重み w˜j は、合計が 1 ではなく n になるように正規化されます。

指数損失'exponential'L=j=1nwjexp(mj).
ヒンジ損失'hinge'L=j=1nwjmax{0,1mj}.
ロジット損失'logit'L=j=1nwjlog(1+exp(mj)).
最小予測誤分類コスト'mincost'

'mincost' は、分類スコアが事後確率の場合にのみ適しています。

重み付きの最小予測分類コストは、次の手順を観測値 j = 1、...、n について使用することにより計算されます。

  1. 観測値 Xj をクラス k に分類する予測誤分類コストを推定します。

    γjk=(f(Xj)C)k.

    f(Xj) は観測値 Xj のクラス事後確率の列ベクトルです。C はモデルの Cost プロパティに格納されるコスト行列です。

  2. 最小予測誤分類コストに対応するクラス ラベルを観測値 j について予測します。

    y^j=argmink=1,...,Kγjk.

  3. C を使用して、予測を行うために必要なコスト (cj) を求めます。

最小予測誤分類コスト損失の加重平均は次となります。

L=j=1nwjcj.

二次損失'quadratic'L=j=1nwj(1mj)2.

既定のコスト行列 (正しい分類の場合の要素値は 0、誤った分類の場合の要素値は 1) を使用する場合、'classifcost''classiferror'、および 'mincost' の損失の値は同じです。既定以外のコスト行列をもつモデルでは、ほとんどの場合は 'classifcost' の損失と 'mincost' の損失が等価になります。これらの損失が異なる値になる可能性があるのは、最大の事後確率をもつクラスへの予測と最小の予測コストをもつクラスへの予測が異なる場合です。'mincost' は分類スコアが事後確率の場合にしか適さないことに注意してください。

次の図では、1 つの観測値のスコア m に対する損失関数 ('classifcost''crossentropy'、および 'mincost' を除く) を比較しています。いくつかの関数は、点 (0,1) を通過するように正規化されています。

Comparison of classification losses for different loss functions

拡張機能

バージョン履歴

R2017b で導入

すべて展開する