最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

loss

サポート ベクター マシン (SVM) 分類器の分類誤差を計算

説明

L = loss(SVMModel,TBL,ResponseVarName) は分類誤差 (分類損失を参照) を返します。これは、TBL.ResponseVarName 内の真のクラス ラベルと比較して、学習済みのサポート ベクター マシン (SVM) 分類器 (SVMModel) がテーブル TBL 内の予測子データをどの程度の精度で分類するかを表すスカラーです。

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

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

L = loss(SVMModel,TBL,Y) は、テーブル TBL 内の予測子データと Y 内の真のクラス ラベルに対する分類誤差を返します。

loss は、fitcsvm が学習に使用した事前クラス確率 (SVMModelPrior プロパティに格納されています) に対して Y 内のクラス確率を正規化します。

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

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

すべて折りたたむ

ionosphere データセットを読み込みます。

load ionosphere
rng(1); % For reproducibility

SVM 分類器を学習させます。テスト用に 15% のホールドアウト標本を指定し、データを標準化して、'g' が陽性クラスであることを指定します。

CVSVMModel = fitcsvm(X,Y,'Holdout',0.15,'ClassNames',{'b','g'},...
    'Standardize',true);
CompactSVMModel = CVSVMModel.Trained{1}; % Extract the trained, compact classifier
testInds = test(CVSVMModel.Partition);   % Extract the test indices
XTest = X(testInds,:);
YTest = Y(testInds,:);

CVSVMModelClassificationPartitionedModel 分類器です。この分類器には Trained プロパティが含まれています。これは 1 行 1 列の cell 配列で、学習セットにより学習させた CompactClassificationSVM 分類器が格納されています。

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

L = loss(CompactSVMModel,XTest,YTest)
L = 0.0787

SVM 分類器は、検定標本のうち約 8% を誤分類しています。

ionosphere データセットを読み込みます。

load ionosphere
rng(1); % For reproducibility

SVM 分類器を学習させます。テスト用に 15% のホールドアウト標本を指定し、データを標準化して、'g' が陽性クラスであることを指定します。

CVSVMModel = fitcsvm(X,Y,'Holdout',0.15,'ClassNames',{'b','g'},...
    'Standardize',true);
CompactSVMModel = CVSVMModel.Trained{1}; % Extract the trained, compact classifier
testInds = test(CVSVMModel.Partition);   % Extract the test indices
XTest = X(testInds,:);
YTest = Y(testInds,:);

CVSVMModelClassificationPartitionedModel 分類器です。この分類器には Trained プロパティが含まれています。これは 1 行 1 列の cell 配列で、学習セットにより学習させた CompactClassificationSVM 分類器が格納されています。

検定標本ヒンジ損失を推定して、アルゴリズムの一般化の精度を特定します。

L = loss(CompactSVMModel,XTest,YTest,'LossFun','hinge')
L = 0.2998

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

入力引数

すべて折りたたむ

SVM 分類モデル。fitcsvm が返す ClassificationSVM モデル オブジェクトまたは compact が返す CompactClassificationSVM モデル オブジェクトを指定します。

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

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

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

SVMModel に学習をさせるときに fitcsvm'Standardize',true を設定した場合、対応する SVMModel.Mu 内の平均および SVMModel.Sigma 内の標準偏差を使用して、予測子データの列が標準化されます。

データ型: table

応答変数の名前。TBL に含まれている変数の名前として指定します。

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

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

データ型: char | string

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

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

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

fitcsvm'Standardize',true を設定して SVMModel に学習をさせた場合、対応する SVMModel.Mu 内の平均および SVMModel.Sigma 内の標準偏差を使用して、X の列が標準化されます。

データ型: double | single

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

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

名前と値のペアの引数

オプションの Name,Value 引数のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

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

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

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

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

    'mincost' は、事後確率である分類スコアに適しています。SVM モデルの場合に事後確率を分類スコアとして使用するように指定するには、fitcsvm を使用してモデルを交差検証するときに 'FitPosterior',true を設定します。

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

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

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

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

    • 関数名 (lossfun) を選択します。

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

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

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

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

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

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

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

例: 'LossFun','binodeviance'

データ型: char | string | function_handle

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

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

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

独自の損失関数を指定しない場合、Weights が正規化され、合計が各クラスの事前確率の値になります。

例: 'Weights','W'

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

詳細

すべて折りたたむ

分類損失

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

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

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

  • n は標本サイズです。

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

    • yj は観測されたクラス ラベルです。陰性クラスを示す -1 または陽性クラスを示す 1 を使用して符号化されます。

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

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

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

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

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

    • mj = yj*′f(Xj).したがって mj は、観測された真のクラスについてモデルが予測するスカラー分類スコアです。

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

    j=1nwj=1.

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

損失関数LossFun の値
二項分布からの逸脱度'binodeviance'L=j=1nwjlog{1+exp[2mj]}.
指数損失'exponential'L=j=1nwjexp(mj).
分類誤差'classiferror'

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

これは重み付きの誤分類観測値の比率です。y^j は、事後確率が最大であるクラスに対応するクラス ラベルです。I{x} はインジケーター関数です。

ヒンジ損失'hinge'L=j=1nwjmax{0,1mj}.
ロジット損失'logit'L=j=1nwjlog(1+exp(mj)).
最小コスト'mincost'

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

  1. 観測値 j の予測分類コストから構成される 1 行 K 列のベクトルを推定します。

    γj=f(Xj)C.

    f(Xj) はバイナリおよびマルチクラス分類におけるクラスの事後確率の列ベクトルです。C は入力モデルの Cost プロパティに格納されるコスト行列です。

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

    y^j=minj=1,...,K(γj).

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

重み付きの平均最小コスト損失は次のようになります。

L=j=1nwjcj.

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

次の図では、mに対する 1 つの観測値の ('mincost' 以外の) 損失関数を比較しています。一部の関数は、[0,1] を通過するように正規化されています。

分類スコア

観測値 x を分類するための SVM の "分類スコア" は、x から判定境界 (範囲は -∞ ~ +∞) までの符号付き距離です。クラスの正のスコアは、x がそのクラスにあると予測されることを示します。負のスコアはそうではないことを示します。

正のクラス分類スコア f(x) は、学習済み SVM 分類関数です。f(x) は x に対する数値的な予測応答でもあり、x を陽性クラスとして予測するスコアでもあります。

f(x)=j=1nαjyjG(xj,x)+b,

(α1,...,αn,b) は推定された SVM パラメーター、G(xj,x) は予測子空間における x とサポート ベクターの間のドット積です。合計には学習セットの観測値が含まれます。x に対する負のクラス分類スコア、つまり x を陰性クラスとして予測するスコアは、–f(x) です。

G(xj,x) = xj′x (線形カーネル) の場合、スコア関数は次のように縮小されます。

f(x)=(x/s)β+b.

s はカーネル スケール、β は近似線形係数のベクトルです。

詳細は、サポート ベクター マシンについてを参照してください。

参照

[1] Hastie, T., R. Tibshirani, and J. Friedman. The Elements of Statistical Learning, second edition. Springer, New York, 2008.

拡張機能

R2014a で導入