メインコンテンツ

loss

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

説明

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

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

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

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

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

メモ

X または Tbl の予測子データに欠損値があり、LossFun"classifcost""classiferror"、または "mincost" に設定されていない場合、関数 loss で NaN が返されることがあります。詳細については、欠損値がある予測子データに対して loss で NaN が返されることがあるを参照してください。

すべて折りたたむ

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 モデル オブジェクトを指定します。

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

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

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

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

データ型: table

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

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 の行数と等しくなければなりません。

名前と値の引数

すべて折りたたむ

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

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

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

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

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

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

    '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

観測値の重み。数値ベクトルまたは 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

詳細

すべて折りたたむ

参照

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

拡張機能

すべて展開する

バージョン履歴

R2014a で導入

すべて展開する