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 が返されることがあるを参照してください。
例
SVM 分類器のテスト標本分類誤差の特定
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% を誤分類しています。
SVM 分類器のテスト標本ヒンジ損失の特定
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 に近いことが推奨されます。
入力引数
SVMModel
— SVM 分類モデル
ClassificationSVM
モデル オブジェクト | CompactClassificationSVM
モデル オブジェクト
SVM 分類モデル。fitcsvm
が返す ClassificationSVM
モデル オブジェクトまたは compact
が返す CompactClassificationSVM
モデル オブジェクトを指定します。
Tbl
— 標本データ
テーブル
モデルを学習させるために使用する標本データ。テーブルとして指定します。Tbl
の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。必要に応じて、応答変数用および観測値の重み用の追加列を Tbl
に含めることができます。Tbl
には、SVMModel
を学習させるために使用したすべての予測子が含まれていなければなりません。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
SVMModel
を学習させるために使用した応答変数が Tbl
に含まれている場合、ResponseVarName
または Y
を指定する必要はありません。
テーブルに格納されている標本データを使用して SVMModel
に学習をさせた場合、loss
の入力データもテーブルに含まれていなければなりません。
SVMModel
に学習をさせるときに fitcsvm
で 'Standardize',true
を設定した場合、対応する SVMModel.Mu
内の平均および SVMModel.Sigma
内の標準偏差を使用して、予測子データの列が標準化されます。
データ型: table
ResponseVarName
— 応答変数名
Tbl
内の変数の名前
応答変数の名前。Tbl
内の変数の名前で指定します。SVMModel
を学習させるために使用した応答変数が Tbl
に含まれている場合、ResponseVarName
を指定する必要はありません。
ResponseVarName
には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、応答変数 Y
が Tbl.Y
として格納されている場合、ResponseVarName
として 'Y'
を指定します。それ以外の場合、モデルを学習させるときに、Tbl
の列は Y
を含めてすべて予測子として扱われます。
応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。応答変数が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。
データ型: char
| string
X
— 予測子データ
数値行列
予測子データ。数値行列として指定します。
X
の各行は 1 件の観測 (インスタンスや例とも呼ばれます) に対応し、各列は 1 個の変数 (特徴とも呼ばれます) に対応します。X
の列内の変数は、分類器 SVMModel
に学習させた変数と同じでなければなりません。
Y
の長さと X
の行数は等しくなければなりません。
fitcsvm
で 'Standardize',true
を設定して SVMModel
に学習をさせた場合、対応する SVMModel.Mu
内の平均および SVMModel.Sigma
内の標準偏差を使用して、X
の列が標準化されます。
データ型: double
| single
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: loss(SVMModel,Tbl,Y,'Weights',W)
は、Tbl
内の変数 W
の各行に格納されている対応する重みを使用して、Tbl
の各行の観測値に重みを付けます。
LossFun
— 損失関数
'classiferror'
(既定値) | 'binodeviance'
| 'classifcost'
| 'exponential'
| 'hinge'
| 'logit'
| 'mincost'
| 'quadratic'
| 関数ハンドル
損失関数。組み込みの損失関数名または関数ハンドルを指定します。
次の表は、使用できる損失関数の一覧です。対応する文字ベクトルまたは 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
Weights
— 観測値の重み
ones(size(X,1),1)
(既定値) | 数値ベクトル | Tbl
内の変数の名前
観測値の重み。数値ベクトルまたは 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.
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
この関数は、tall 配列を完全にサポートします。詳細は、tall 配列を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
使用上の注意事項および制限事項:
関数
loss
では 1 クラス分類モデルはサポートしていません。
詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2014a で導入R2022a: 既定以外のコスト行列をもつモデルに対して loss
で異なる値が返される
入力モデル オブジェクトに学習させるときに既定以外のコスト行列を指定すると、関数 loss
で以前のリリースとは異なる値が返されます。
関数 loss
は、Prior
プロパティに格納された事前確率を使用して入力データの観測値の重みを正規化します。さらに、名前と値の引数 LossFun
を "classifcost"
または "mincost"
として指定した場合、関数は Cost
プロパティに格納されたコスト行列を使用します。Prior
プロパティと Cost
プロパティの値を関数で使用する方法については変更されていません。ただし、既定以外のコスト行列をもつモデルについて入力モデル オブジェクトに格納されるプロパティの値が変更されたため、関数から異なる値が返されることがあります。
プロパティの値の変更に関する詳細については、Cost プロパティにユーザー指定のコスト行列を格納を参照してください。
ソフトウェアでコスト行列、事前確率、および観測値の重みを以前のリリースと同じように扱う場合は、誤分類コスト行列に応じた事前確率と観測値の重みの調整の説明に従って、既定以外のコスト行列の事前確率と観測値の重みを調整します。その後、分類モデルに学習させるときに、調整後の事前確率と観測値の重みを名前と値の引数 Prior
と Weights
を使用して指定し、既定のコスト行列を使用します。
R2022a: 欠損値がある予測子データに対して loss
で NaN が返されることがある
関数 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 コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)