メインコンテンツ

loss

R2026b

k 最近傍分類器の損失

説明

L = loss(Mdl,Tbl,ResponseVarName) は、真の分類が Tbl.ResponseVarName に含まれている場合に Mdl が Tbl 内のデータをどの程度適切に分類するかを表すスカラーを返します。Mdl を学習させるために使用した応答変数が Tbl に含まれている場合、ResponseVarName を指定する必要はありません。

分類損失 (L) の意味は損失関数と重み付けの方式によって異なりますが、一般に優れた分類器の方が分類損失の値が小さくなります。詳細は、分類損失を参照してください。

L = loss(Mdl,Tbl,Y) は、真の分類が Y に含まれている場合に Mdl が Tbl 内のデータをどの程度適切に分類するかを表すスカラーを返します。

L = loss(Mdl,X,Y) は、真の分類が Y に含まれている場合に Mdl が X 内のデータをどの程度適切に分類するかを表すスカラーを返します。

例

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

例

すべて折りたたむ

フィッシャーのアヤメのデータに対して k 最近傍分類器を作成します。ここで k = 5 です。

フィッシャーのアヤメのデータ セットを読み込みます。

load fisheriris

5 つの最近傍について分類器を作成します。

Mdl = fitcknn(meas,species,NumNeighbors=5);

versicolor として分類された平均観測値に対する分類器の損失を調べます。

X = mean(meas);
Y = "versicolor";
L = loss(Mdl,X,Y)
L = 
0

5 つの最近傍はすべて versicolor として分類されます。

入力引数

すべて折りたたむ

k 最近傍分類モデル。ClassificationKNN オブジェクトを指定します。

モデルを学習させるために使用する標本データ。table として指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。オプションとして、Tbl に応答変数用の列を 1 つ追加できます。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。

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

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

データ型: table

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

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

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

データ型: char | string

予測子データ。数値行列として指定します。X の各行は 1 つの観測値を、各列は 1 つの変数を表します。

データ型: single | double

クラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。Y の各行は、X の対応する行の分類を表します。

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

名前と値の引数

すべて折りたたむ

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

例: loss(Mdl,Tbl,"response",LossFun="exponential",Weights="w") は、Mdl が Tbl 内のデータを分類する場合の重み付き指数損失を返します。ここで、Tbl.response は応答変数、Tbl.w は重みの変数です。

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

  • 次の表は、使用可能な損失関数の一覧です。

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

    "mincost" は、事後確率である分類スコアに適しています。既定では、k 最近傍モデルは分類スコアとして事後確率を返します (predict を参照)。

  • @lossfun のように @ を使用すると、カスタム損失関数用の関数ハンドルを指定できます。X 内の観測値の個数を n、異なるクラスの個数 (numel(Mdl.ClassNames)) を K とします。カスタム損失関数は、次のような形式にしなければなりません。

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

    • 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 を指定します。

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

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

例: LossFun="classiferror"

データ型: 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 内の変数名を指定する場合、名前は文字ベクトルまたは string スカラーでなければなりません。たとえば、重みが Tbl.w として格納されている場合、Weights として "w" を指定します。それ以外の場合、Tbl の列は Tbl.w を含めてすべて予測子として扱われます。

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

例: Weights="w"

データ型: single | double | 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" として指定します。

アルゴリズム

すべて折りたたむ

拡張機能

すべて展開する

バージョン履歴

R2012a で導入

すべて展開する