Main Content

resubLoss

判別分析分類器の再代入分類損失

説明

L = resubLoss(Mdl) は、Mdl.X に格納されている学習データと Mdl.Y に格納されている対応する真のクラス ラベルを使用して、学習済み判別分析分類器 Mdl の再代入による分類損失 L を返します。resubLoss で既定で使用される損失は、fitcdiscr での Mdl の作成に使用されたデータについて計算された損失です。

L = resubLoss(___,LossFun=lossf) は、組み込みまたはカスタムの損失関数を使用して再代入損失を返します。

分類損失 (L) は再代入の品質に対する尺度であり、数値スカラーとして返されます。解釈は損失関数 (lossf) によって異なりますが、一般に、優れた分類器の方が分類損失値が小さくなります。

すべて折りたたむ

フィッシャーのアヤメのデータについて、再代入した分類誤差を計算します。

フィッシャーのアヤメのデータの分類モデルを作成します。

load fisheriris
mdl = fitcdiscr(meas,species);

再代入の分類誤差を計算します。

L = resubLoss(mdl)
L =
    0.0200

入力引数

すべて折りたたむ

判別分析分類器。fitcdiscr で学習させた ClassificationDiscriminant モデル オブジェクトとして指定します。

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

次の表に、組み込みの損失関数の値を示します。対応する文字ベクトルまたは string スカラーを使用して、いずれかを指定します。

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

"mincost" は、事後確率である分類スコアに適しています。既定では、判別分析分類器は分類スコアとして事後確率を返します (predict を参照)。

関数ハンドル表記を使用して独自の関数を指定します。n は X 内の観測値の個数、K は異なるクラスの個数 (numel(Mdl.ClassNames)) であるとします。使用する関数のシグネチャは次のようになっていなければなりません。

lossvalue = lossfun(C,S,W,Cost)
ここで、

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

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

  • C は n 行 K 列の logical 行列であり、対応する観測値が属するクラスを各行が示します。列の順序は Mdl.ClassNames のクラスの順序に対応します。

    各行について観測値 p がクラス q に属する場合は C(p,q) = 1 を設定することにより、C を作成します。行 p の他のすべての要素を 0 に設定します。

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

  • W は、観測値の重みの n 行 1 列の数値ベクトルです。W を渡す場合、重みは合計が 1 になるように正規化されます。

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

例: LossFun="binodeviance"

例: LossFun=@lossf

データ型: char | string | function_handle

詳細

すべて折りたたむ

分類損失

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

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

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

  • n は標本サイズです。

  • バイナリ分類は以下です。

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

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

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

  • マルチクラス分類 (つまり、K ≥ 3) をサポートするアルゴリズムの場合、次のようになります。

    • yj* は、K - 1 個の 0 と、観測された真のクラス yj に対応する位置の 1 から構成されるベクトルです。たとえば、2 番目の観測値の真のクラスが 3 番目のクラスであり K = 4 の場合、y2* = [0 0 1 0]′ になります。クラスの順序は入力モデルの ClassNames プロパティ内の順序に対応します。

    • f(Xj) は予測子データ X の観測値 j に対するクラス スコアのベクトルで、長さは K です。スコアの順序は入力モデルの ClassNames プロパティ内のクラスの順序に対応します。

    • mj = yj*′f(Xj).したがって 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

事後確率

点 x がクラス k に属する事後確率は、事前確率と多変量正規密度の積です。1 行 d 列の平均 μk および 1 行 d 列の点 x における d 行 d 列の共分散 Σk をもつ、多変量正規密度関数は次のとおりです。

P(x|k)=1((2π)d|Σk|)1/2exp(12(xμk)Σk1(xμk)T),

ここで、|Σk| は Σk の行列式、Σk1 は逆行列です。

P(k) でクラス k の事前確率を表してみます。すると、観測 x がクラス k になる事後確率は次のとおりです。

P^(k|x)=P(x|k)P(k)P(x),

ここで P(x) は正規化定数、P(x|k)P(k) の合計 k です。

事前確率

事前確率は次の 3 つの選択肢のいずれかです。

  • 'uniform' — クラス k の事前確率は、クラスの総数に対して 1 です。

  • 'empirical' — クラス k の事前確率は、クラス k の学習標本の数を学習標本の合計で除算した値です。

  • カスタム — クラス k の事前確率は、prior ベクトルの k 番目の要素です。fitcdiscr を参照してください。

分類モデル (Mdl) を作成した後で、ドット表記を使用して事前確率を設定できます。

Mdl.Prior = v;

ここで v は各要素が発生する頻度を表す正の要素のベクトルです。新しい事前確率を設定する場合に、分類器に再学習させる必要はありません。

コスト

観測ごとの予測コストの行列は、コストで定義されています。

バージョン履歴

R2011b で導入

すべて展開する