Main Content

resubLoss

    説明

    L = resubLoss(Mdl) は、Mdl.X に格納されている学習データと Mdl.Y に格納されている対応するクラス ラベルを使用して、学習済み分類モデル Mdl の再代入による分類損失(標本内分類損失) L を返します。

    L の解釈は損失関数 ('LossFun') と加重スキーム (Mdl.W) によって異なります。一般に、優れた分類器の方が分類損失値が小さくなります。'LossFun' の既定値はモデル オブジェクト Mdl に応じて異なります。

    L = resubLoss(Mdl,Name,Value) では、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、'LossFun','binodeviance' は損失関数を二項分布からの逸脱度の関数に設定します。

    すべて折りたたむ

    単純ベイズ分類器の標本内分類誤差 (再代入損失) を決定します。一般に、損失が小さいほど分類器が優れていることになります。

    fisheriris データ セットを読み込みます。150 本のアヤメについて 4 つの測定値が含まれる数値行列 X を作成します。対応するアヤメの種類が含まれる文字ベクトルの cell 配列 Y を作成します。

    load fisheriris
    X = meas;
    Y = species;

    予測子 X とクラス ラベル Y を使用して、単純ベイズ分類器に学習させます。クラス名を指定することが推奨されます。fitcnb は、各予測子が条件付き正規分布に従うと仮定しています。

    Mdl = fitcnb(X,Y,'ClassNames',{'setosa','versicolor','virginica'})
    Mdl = 
      ClassificationNaiveBayes
                  ResponseName: 'Y'
         CategoricalPredictors: []
                    ClassNames: {'setosa'  'versicolor'  'virginica'}
                ScoreTransform: 'none'
               NumObservations: 150
             DistributionNames: {'normal'  'normal'  'normal'  'normal'}
        DistributionParameters: {3x4 cell}
    
    
    

    Mdl は学習させた ClassificationNaiveBayes 分類器です。

    標本内分類誤差を推定します。

    L = resubLoss(Mdl)
    L = 0.0400
    

    単純ベイズ分類器は、学習の観測値の 4% を誤分類します。

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

    load ionosphere

    サポート ベクター マシン (SVM) 分類器に学習させます。データを標準化し、'g' が陽性クラスであることを指定します。

    SVMModel = fitcsvm(X,Y,'ClassNames',{'b','g'},'Standardize',true);

    SVMModel は学習させた ClassificationSVM 分類器です。

    標本内ヒンジ損失を推定します。

    L = resubLoss(SVMModel,'LossFun','hinge')
    L = 0.1603
    

    ヒンジ損失は 0.1603 です。分類器のヒンジ損失は 0 に近いことが推奨されます。

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

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

    load ionosphere

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

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

    予測子 X とクラス ラベル Y を使用して、GAM に学習させます。クラス名を指定することが推奨されます。上位 10 個の最も重要な交互作用項を含めるように指定します。

    Mdl = fitcgam(X(inds,:),Y(inds),'ClassNames',{'b','g'},'Interactions',10)
    Mdl = 
      ClassificationGAM
                 ResponseName: 'Y'
        CategoricalPredictors: []
                   ClassNames: {'b'  'g'}
               ScoreTransform: 'logit'
                    Intercept: 2.0026
                 Interactions: [10x2 double]
              NumObservations: 301
    
    
    

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

    Mdl に交互作用項を含める場合と含めない場合の両方の再代入分類損失を計算します。交互作用項を除外するには、'IncludeInteractions',false を指定します。

    resubl = resubLoss(Mdl)
    resubl = 0
    
    resubl_nointeraction = resubLoss(Mdl,'IncludeInteractions',false)
    resubl_nointeraction = 0
    

    Mdl に交互作用項を含める場合と含めない場合の両方の分類損失を推定します。

    l = loss(Mdl,XNew,YNew)
    l = 0.0615
    
    l_nointeraction = loss(Mdl,XNew,YNew,'IncludeInteractions',false)
    l_nointeraction = 0.0615
    

    交互作用項を含めても、Mdl の分類損失は変わりません。学習済みモデルはすべての学習標本を正しく分類し、テスト標本のうち約 6% を誤分類しています。

    入力引数

    すべて折りたたむ

    分類機械学習モデル。完全な分類モデル オブジェクトとして指定します。サポートされるモデルは次の表に記載されています。

    モデル分類モデル オブジェクト
    一般化加法モデルClassificationGAM
    k 最近傍モデルClassificationKNN
    単純ベイズ モデルClassificationNaiveBayes
    ニューラル ネットワーク モデルClassificationNeuralNetwork
    1 クラスおよびバイナリ分類用のサポート ベクター マシンClassificationSVM

    名前と値の引数

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

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

    例: resubLoss(Mdl,'LossFun','logit') は、ロジット再代入損失を推定します。

    モデルの交互作用項を含むというフラグ。true または false として指定します。この引数は、一般化加法モデル (GAM) の場合のみ有効です。つまり、この引数を指定できるのは、MdlClassificationGAM である場合だけです。

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

    データ型: logical

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

    既定値は、モデル Mdl のタイプによって異なります。

    • MdlClassificationSVM オブジェクトである場合、既定値は 'classiferror' です。

    • MdlClassificationKNNClassificationNaiveBayes または ClassificationNeuralNetwork オブジェクトである場合、既定値は 'mincost' です。

    • MdlClassificationGAM オブジェクトである場合、入力モデル オブジェクトの ScoreTransform プロパティ (Mdl.ScoreTransform) が 'logit' であれば既定値は 'mincost'、それ以外であれば既定値は 'classiferror' です。

    'classiferror''mincost' は、既定のコスト行列を使用する場合は同じです。詳細については、分類損失を参照してください。

    • 次の表は、使用できる損失関数の一覧です。対応する文字ベクトルまたは string スカラーを使用して、いずれかを指定します。

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

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

      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','binodeviance'

    データ型: 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

    アルゴリズム

    resubLoss は、オブジェクト (Mdl) の対応する関数 loss に従って分類損失を計算します。モデル固有の説明については、次の表に示す関数 loss のリファレンス ページを参照してください。

    モデル分類モデル オブジェクト (Mdl)オブジェクト関数 loss
    一般化加法モデルClassificationGAMloss
    k 最近傍モデルClassificationKNNloss
    単純ベイズ モデルClassificationNaiveBayesloss
    ニューラル ネットワーク モデルClassificationNeuralNetworkloss
    1 クラスおよびバイナリ分類用のサポート ベクター マシンClassificationSVMloss

    拡張機能

    バージョン履歴

    R2012a で導入

    すべて展開する