メインコンテンツ

loss

単純ベイズ分類器の分類損失

説明

L = loss(Mdl,tbl,ResponseVarName)分類損失を返します。これは、tbl.ResponseVarName 内の真のクラス ラベルと比較して、学習済みの単純ベイズ分類器 Mdl が table tbl 内の予測子データをどの程度適切に分類するかを表すスカラーです。

loss は、MdlPrior プロパティに格納されている、fitcnb が学習に使用したクラスの事前確率に対して、tbl.ResponseVarName 内のクラス確率を正規化します。

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

L = loss(Mdl,X,Y) は、行列 X に含まれている予測子データに基づいて、Y に含まれている真のクラス ラベルと比較した分類損失を返します。

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

すべて折りたたむ

単純ベイズ分類器のテスト標本分類誤差 (損失) を判定します。複数のモデルで同じタイプの損失を比較した場合、損失が低い方が予測モデルとして優れていることになります。

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

load fisheriris
X = meas;
Y = species;
rng('default')  % for reproducibility

Y のクラス情報を使用して、観測値を階層的に学習セットとテスト セットに無作為に分割します。テスト用の 30% のホールドアウト標本を指定します。

cv = cvpartition(Y,'HoldOut',0.30);

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

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

学習データ セットとテスト データ セットを指定します。

XTrain = X(trainInds,:);
YTrain = Y(trainInds);
XTest = X(testInds,:);
YTest = Y(testInds);

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

Mdl = fitcnb(XTrain,YTrain,'ClassNames',{'setosa','versicolor','virginica'})
Mdl = 
  ClassificationNaiveBayes
              ResponseName: 'Y'
     CategoricalPredictors: []
                ClassNames: {'setosa'  'versicolor'  'virginica'}
            ScoreTransform: 'none'
           NumObservations: 105
         DistributionNames: {'normal'  'normal'  'normal'  'normal'}
    DistributionParameters: {3×4 cell}


  Properties, Methods

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

テスト標本分類誤差を推定して、アルゴリズムの一般化の精度を特定します。

L = loss(Mdl,XTest,YTest)
L = 
0.0444

単純ベイズ分類器は、テスト標本のうち約 4% を誤分類しています。

fitcnb で分類器を学習させるときに、より適切な予測子の分布を指定することで、分類誤差を低減できる可能性があります。

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

load fisheriris
X = meas;
Y = species;
rng('default')  % for reproducibility

Y のクラス情報を使用して、観測値を階層的に学習セットとテスト セットに無作為に分割します。テスト用の 30% のホールドアウト標本を指定します。

cv = cvpartition(Y,'HoldOut',0.30);

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

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

学習データ セットとテスト データ セットを指定します。

XTrain = X(trainInds,:);
YTrain = Y(trainInds);
XTest = X(testInds,:);
YTest = Y(testInds);

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

Mdl = fitcnb(XTrain,YTrain,'ClassNames',{'setosa','versicolor','virginica'});

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

テスト標本ロジット損失を推定して、アルゴリズムの一般化の精度を判定します。

L = loss(Mdl,XTest,YTest,'LossFun','logit')
L = 
0.3359

ロジット損失は約 0.34 です。

入力引数

すべて折りたたむ

単純ベイズ分類モデル。fitcnb によって返される ClassificationNaiveBayes モデル オブジェクト、または compact によって返される CompactClassificationNaiveBayes モデル オブジェクトとして指定します。

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

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

応答変数の名前。tbl 内の変数の名前で指定します。

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

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

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

データ型: char | string

予測子データ。数値行列として指定します。

X の各行は 1 つの観測値 ("インスタンス" や "例" とも呼ばれます) に対応し、各列は 1 つの変数 ("特徴" とも呼ばれます) に対応します。X の列内の変数は、分類器 Mdl に学習させた変数と同じでなければなりません。

Y の長さと X の行数は等しくなければなりません。

データ型: double | single

クラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトルのいずれか、あるいは文字ベクトルの cell 配列として指定します。Y のデータ型は Mdl.ClassNames と同じでなければなりません。(string 配列は文字ベクトルの cell 配列として扱われます)。

Y の長さは tbl または X の行数と等しくなければなりません。

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

名前と値の引数

すべて折りたたむ

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

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

例: loss(Mdl,tbl,Y,'Weights',W) は、変数 W の各行に格納されている対応する重みを使用して、tbl の各行の観測値に重みを付けます。

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

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

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

    'mincost' は、事後確率である分類スコアに適しています。既定の設定では、単純ベイズ モデルは分類スコアとして事後確率を返します (predict を参照)。

  • 関数ハンドル表記を使用して独自の関数を指定します。

    nX 内の観測値の個数、K は異なるクラスの個数 (numel(Mdl.ClassNames)Mdl は入力モデル) であると仮定します。使用する関数のシグネチャは次のようになっていなければなりません。

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

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

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

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

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

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

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

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

    'LossFun',@lossfun を使用して独自の関数を指定します。

損失関数の詳細については、分類損失を参照してください。

データ型: char | string | function_handle

観測値の重み。数値ベクトルまたは tbl 内の変数の名前を指定します。X または tbl の各行に含まれている観測値には、Weights の対応する重みが適用されます。

数値ベクトルで Weights を指定する場合、Weights のサイズは X または tbl の行数と等しくなければなりません。

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

損失関数を指定しない場合、Weights は合計が 1 になるように正規化されます。

データ型: double | char | string

出力引数

すべて折りたたむ

分類損失。スカラーとして返されます。L は汎化または再代入品質測定です。解釈は損失関数と加重スキームによって異なります。通常は、優れた分類器の方が損失値がより小さくなります。

詳細

すべて折りたたむ

拡張機能

すべて展開する

バージョン履歴

R2014b で導入