loss
サポート ベクター マシン (SVM) 分類器の分類誤差を計算
構文
説明
は分類誤差 (分類損失を参照) を返します。これは、L = loss(SVMModel,Tbl,ResponseVarName)Tbl.ResponseVarName 内の真のクラス ラベルと比較して、学習済みのサポート ベクター マシン (SVM) 分類器 (SVMModel) が table Tbl 内の予測子データをどの程度の精度で分類するかを表すスカラーです。
分類損失 (L) は汎化または再代入の品質に対する尺度です。解釈は損失関数と加重スキームによって異なりますが、一般に、優れた分類器の方が分類損失値が小さくなります。
では、前の構文の入力引数に加えて、1 つ以上の名前と値のペアの引数を使用してオプションを指定します。たとえば、損失関数や分類の重みを指定できます。L = loss(___,Name,Value)
メモ
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,:);
CVSVMModel は ClassificationPartitionedModel 分類器です。この分類器には 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,:);
CVSVMModel は ClassificationPartitionedModel 分類器です。この分類器には 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 スカラーを指定しなければなりません。たとえば、応答変数 Y が Tbl.Y として格納されている場合、ResponseVarName として 'Y' を指定します。それ以外の場合、モデルを学習させるときに、Tbl の列は Y を含めてすべて予測子として扱われます。
応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。応答変数が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。
データ型: char | string
名前と値の引数
オプションの引数のペアを 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を設定します。関数ハンドル表記を使用して、独自の関数を指定します。
nはX内の観測値の個数、Kは入力モデル (SVMModel) の作成に使用した異なるクラスの個数 (numel(SVMModel.ClassNames)) であるとします。使用する関数のシグネチャは次のようになっていなければなりません。ここでlossvalue =lossfun(C,S,W,Cost)出力引数
lossvalueはスカラーです。関数名 (
lossfun) を選択します。Cはn行K列の logical 行列であり、対応する観測値が属するクラスを各行が示します。列の順序はSVMModel.ClassNamesのクラスの順序に対応します。Cを作成するには、各行について観測値pがクラスqに含まれている場合にC(p,q) = 1を設定します。行pの他のすべての要素を0に設定します。Sは、predictの出力と同様の、分類スコアを格納するn行K列の数値行列です。列の順序はSVMModel.ClassNamesのクラスの順序に対応します。Wは、観測値の重みのn行 1 列の数値ベクトルです。Wを渡す場合、重みは合計が1になるように正規化されます。Costは、誤分類コストの、K行K列の数値行列です。たとえば、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
詳細
"分類損失" 関数は分類モデルの予測誤差を評価します。複数のモデルで同じタイプの損失を比較した場合、損失が低い方が予測モデルとして優れていることになります。
以下のシナリオを考えます。
L は加重平均分類損失です。
n は標本サイズです。
yj は観測されたクラス ラベルです。陰性クラスを示す -1 または陽性クラスを示す 1 (あるいは、
ClassNamesプロパティの最初のクラスを示す -1 または 2 番目のクラスを示す 1) を使用して符号化されます。f(Xj) は予測子データ X の観測値 (行) j に対する陽性クラスの分類スコアです。
mj = yjf(Xj) は、yj に対応するクラスに観測値 j を分類する分類スコアです。正の値の mj は正しい分類を示しており、平均損失に対する寄与は大きくありません。負の値の mj は正しくない分類を示しており、平均損失に大きく寄与します。
観測値 j の重みは wj です。観測値の重みは、その合計が
Priorプロパティに格納された対応するクラスの事前確率になるように正規化されます。そのため、次のようになります。
この状況では、名前と値の引数 LossFun を使用して指定できる、サポートされる損失関数は次の表のようになります。
| 損失関数 | LossFun の値 | 式 |
|---|---|---|
| 二項分布からの逸脱度 | "binodeviance" | |
| 観測誤分類コスト | "classifcost" | ここで、 はスコアが最大のクラスに対応するクラス ラベル、 は真のクラスが yj である場合に観測値をクラス に分類するユーザー指定のコストです。 |
| 10 進数の誤分類率 | "classiferror" | ここで、I{·} はインジケーター関数です。 |
| クロスエントロピー損失 | "crossentropy" |
加重クロスエントロピー損失は次となります。 ここで重み は、合計が 1 ではなく n になるように正規化されます。 |
| 指数損失 | "exponential" | |
| ヒンジ損失 | "hinge" | |
| ロジスティック損失 | "logit" | |
| 最小予測誤分類コスト | "mincost" |
重み付きの最小予測分類コストは、次の手順を観測値 j = 1、...、n について使用することにより計算されます。
最小予測誤分類コスト損失の加重平均は次となります。 |
| 二次損失 | "quadratic" |
既定のコスト行列 (正しい分類の場合の要素値は 0、誤った分類の場合の要素値は 1) を使用する場合、"classifcost"、"classiferror"、および "mincost" の損失の値は同じです。既定以外のコスト行列をもつモデルでは、ほとんどの場合は "classifcost" の損失と "mincost" の損失が等価になります。これらの損失が異なる値になる可能性があるのは、最大の事後確率をもつクラスへの予測と最小の予測コストをもつクラスへの予測が異なる場合です。"mincost" は分類スコアが事後確率の場合にしか適さないことに注意してください。
次の図では、1 つの観測値のスコア m に対する損失関数 ("classifcost"、"crossentropy"、および "mincost" を除く) を比較しています。いくつかの関数は、点 (0,1) を通過するように正規化されています。

観測値 x を分類するための SVM の "分類スコア" は、x から判定境界 (範囲は -∞ ~ +∞) までの符号付き距離です。クラスの正のスコアは、x がそのクラスにあると予測されることを示します。負のスコアはそうではないことを示します。
陽性クラス分類スコア は、学習済み SVM 分類関数です。 は x に対する数値的な予測応答でもあり、x を陽性クラスとして予測するスコアでもあります。
ここで、 は推定された SVM パラメーター、 は予測子空間における x とサポート ベクターの間のドット積です。合計には学習セットの観測値が含まれます。x に対する負のクラス分類スコア、つまり x を陰性クラスとして予測するスコアは、–f(x) です。
G(xj,x) = xj′x (線形カーネル) の場合、スコア関数は次のように縮小されます。
s はカーネル スケール、β は近似線形係数のベクトルです。
詳細は、サポート ベクター マシンについてを参照してください。
参照
[1] Hastie, T., R. Tibshirani, and J. Friedman. The Elements of Statistical Learning, second edition. Springer, New York, 2008.
拡張機能
loss 関数は、tall 配列を完全にサポートします。詳細は、tall 配列を参照してください。
使用上の注意および制限:
関数
lossでは 1 クラス分類モデルはサポートしていません。
詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2014a で導入入力モデル オブジェクトに学習させるときに既定以外のコスト行列を指定すると、関数 loss で以前のリリースとは異なる値が返されます。
関数 loss は、Prior プロパティに格納された事前確率を使用して入力データの観測値の重みを正規化します。さらに、名前と値の引数 LossFun を "classifcost" または "mincost" として指定した場合、関数は Cost プロパティに格納されたコスト行列を使用します。Prior プロパティと Cost プロパティの値を関数で使用する方法については変更されていません。ただし、既定以外のコスト行列をもつモデルについて入力モデル オブジェクトに格納されるプロパティの値が変更されたため、関数から異なる値が返されることがあります。
プロパティの値の変更に関する詳細については、Cost プロパティにユーザー指定のコスト行列を格納を参照してください。
ソフトウェアでコスト行列、事前確率、および観測値の重みを以前のリリースと同じように扱う場合は、誤分類コスト行列に応じた事前確率と観測値の重みの調整の説明に従って、既定以外のコスト行列の事前確率と観測値の重みを調整します。その後、分類モデルに学習させるときに、調整後の事前確率と観測値の重みを名前と値の引数 Prior と Weights を使用して指定し、既定のコスト行列を使用します。
関数 loss で加重平均分類損失を計算する際に、スコアが NaN の観測値が省略されなくなりました。そのため、予測子データ X または Tbl 内の予測子変数に欠損値があり、名前と値の引数 LossFun が "classifcost"、"classiferror"、または "mincost" として指定されていない場合に、loss で NaN が返されることがあります。ほとんどの場合、テスト セットの観測値に予測子の欠損がなければ、関数 loss で NaN が返されることはありません。
この変更により、fitcauto を使用する場合の分類モデルの自動選択が改善されます。この変更の前は、NaN 以外の予測子が少ないモデルが選択される (新しいデータの分類に最適であると予測される) ことがありました。
コードの loss で NaN が返される場合、このような結果にならないように、次のいずれかを行ってコードを更新できます。
rmmissingまたはfillmissingを使用して、欠損値を削除するか置き換えます。名前と値の引数
LossFunを"classifcost"、"classiferror"、または"mincost"として指定します。
次の表に、オブジェクト関数 loss で NaN が返される可能性がある分類モデルを示します。詳細については、それぞれの関数 loss の「互換性の考慮事項」を参照してください。
| モデル タイプ | 完全またはコンパクトなモデル オブジェクト | オブジェクト関数 loss |
|---|---|---|
| 判別分析分類モデル | ClassificationDiscriminant, CompactClassificationDiscriminant | loss |
| 分類用のアンサンブル学習器 | ClassificationEnsemble, CompactClassificationEnsemble | loss |
| ガウス カーネル分類モデル | ClassificationKernel | loss |
| k 最近傍分類モデル | ClassificationKNN | loss |
| 線形分類モデル | ClassificationLinear | loss |
| ニューラル ネットワーク分類モデル | ClassificationNeuralNetwork, CompactClassificationNeuralNetwork | loss |
| サポート ベクター マシン (SVM) 分類モデル | loss |
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)