最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。
ガウス カーネル分類モデルの分類損失
ionosphere
データセットを読み込みます。このデータセットには、レーダー反射についての 34 個の予測子と、不良 ('b'
) または良好 ('g'
) という 351 個の二項反応が含まれています。
load ionosphere
データセットを学習セットとテスト セットに分割します。テスト セット用に 15% のホールドアウト標本を指定します。
rng('default') % For reproducibility Partition = cvpartition(Y,'Holdout',0.15); trainingInds = training(Partition); % Indices for the training set testInds = test(Partition); % Indices for the test set
学習セットを使用してバイナリ カーネル分類モデルに学習をさせます。
Mdl = fitckernel(X(trainingInds,:),Y(trainingInds));
学習セットの分類誤差とテスト セットの分類誤差を推定します。
ceTrain = loss(Mdl,X(trainingInds,:),Y(trainingInds))
ceTrain = 0.0067
ceTest = loss(Mdl,X(testInds,:),Y(testInds))
ceTest = 0.1140
ionosphere
データセットを読み込みます。このデータセットには、レーダー反射についての 34 個の予測子と、不良 ('b'
) または良好 ('g'
) という 351 個の二項反応が含まれています。
load ionosphere
データセットを学習セットとテスト セットに分割します。テスト セット用に 15% のホールドアウト標本を指定します。
rng('default') % For reproducibility Partition = cvpartition(Y,'Holdout',0.15); trainingInds = training(Partition); % Indices for the training set testInds = test(Partition); % Indices for the test set
学習セットを使用してバイナリ カーネル分類モデルに学習をさせます。
Mdl = fitckernel(X(trainingInds,:),Y(trainingInds));
次の線形損失を評価する無名関数を作成します。
は観測値 j の重み、 は応答 j (陰性クラスの場合は -1、それ以外の場合は 1)、 は観測値 j の生の分類スコアです。
linearloss = @(C,S,W,Cost)sum(-W.*sum(S.*C,2))/sum(W);
カスタム損失関数は特定の形式で記述しなければなりません。カスタム損失関数の記述に関するルールについては、名前と値のペアの引数 'LossFun'
を参照してください。
線形損失関数を使用して、学習セットの分類損失とテスト セットの分類損失を推定します。
ceTrain = loss(Mdl,X(trainingInds,:),Y(trainingInds),'LossFun',linearloss)
ceTrain = -1.0851
ceTest = loss(Mdl,X(testInds,:),Y(testInds),'LossFun',linearloss)
ceTest = -0.7821
Mdl
— バイナリ カーネル分類モデルClassificationKernel
モデル オブジェクトバイナリ カーネル分類モデル。ClassificationKernel
モデル オブジェクトを指定します。ClassificationKernel
モデル オブジェクトは、fitckernel
を使用して作成できます。
Y
— クラス ラベルクラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。
Y
のデータ型は Mdl.ClassNames
のデータ型と同じでなければなりません。(string 配列は文字ベクトルの cell 配列として扱われます)。
Y
の各クラスは Mdl.ClassNames
のサブセットでなければなりません。
Y
が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。
Y
の長さと X
の観測値数は同じでなければなりません。
データ型: カテゴリカル
| char
| string
| logical
| single
| double
| cell
オプションの Name,Value
引数のコンマ区切りペアを指定します。Name
は引数名で、Value
は対応する値です。Name
は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN
のように、複数の名前と値のペアの引数を、任意の順番で指定できます。
L = loss(Mdl,X,Y,'LossFun','quadratic','Weights',weights)
は、二次損失関数を使用して重み付きの分類損失を返します。'LossFun'
— 損失関数'classiferror'
(既定値) | 'binodeviance'
| 'exponential'
| 'hinge'
| 'logit'
| 'mincost'
| 'quadratic'
| 関数ハンドル損失関数。'LossFun'
と組み込みの損失関数名または関数ハンドルから構成されるコンマ区切りのペアとして指定します。
次の表は、使用できる損失関数の一覧です。対応する値を使用していずれかを指定します。
値 | 説明 |
---|---|
'binodeviance' | 二項分布からの逸脱度 |
'classiferror' | 分類誤差 |
'exponential' | 指数 |
'hinge' | ヒンジ |
'logit' | ロジスティック |
'mincost' | 最小予測誤分類コスト (事後確率である分類スコアの場合) |
'quadratic' | 2 次 |
'mincost'
は、事後確率である分類スコアに適しています。カーネル分類モデルの場合、既定の設定ではロジスティック回帰学習器は事後確率を分類スコアとして返しますが、SVM 学習器はそうではありません (predict
を参照)。
関数ハンドル表記を使用して、独自の関数を指定します。
n
は X
内の観測値の個数、K
は異なるクラスの個数 (numel(Mdl.ClassNames)
、Mdl
は入力モデル) であるとします。使用する関数のシグネチャは次のようになっていなければなりません。
lossvalue = lossfun
(C,S,W,Cost)
出力引数 lossvalue
はスカラーです。
関数名 (lossfun
) を選択します。
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
を指定します。
例: 'LossFun',@
lossfun
データ型: char
| string
| function_handle
'Weights'
— 観測値の重み観測値の重み。'Weights'
と長さ n
の正の数値ベクトルから構成されるコンマ区切りのペアとして指定します。n
は X
内の観測値の個数です。重みが指定された場合、loss
は重み付きの分類損失を計算します。
既定値は ones(
です。n
,1)
loss
は、合計がそれぞれのクラスの事前確率の値になるように重みを正規化します。
データ型: double
| single
"分類損失" 関数は分類モデルの予測誤差を評価します。複数のモデルで同じタイプの損失を比較した場合、損失が低い方が予測モデルとして優れていることになります。
以下のように仮定します。
L は加重平均分類損失です。
n は標本サイズです。
yj は観測されたクラス ラベルです。陰性クラスを示す -1 または陽性クラスを示す 1 を使用して符号化されます。
f(Xj) は、予測子データ X の観測値 (行) j に対する生の分類スコアです。観測値は特徴量拡張を使用して変換されています。
mj = yjf(Xj) は、yj に対応するクラスに観測値 j を分類する分類スコアです。正の値の mj は正しい分類を示しており、平均損失に対する寄与は大きくありません。負の値の mj は正しくない分類を示しており、平均損失に寄与します。
観測値 j の重みは wj です。観測値の重みは正規化され、合計は対応するクラスの事前確率になります。また、事前確率は合計が 1 になるように正規化されます。したがって、次のようになります。
次の表で、名前と値のペアの引数 'LossFun'
を使用して指定できる、サポートされる損失関数を説明します。
損失関数 | LossFun の値 | 式 |
---|---|---|
二項分布からの逸脱度 | 'binodeviance' | |
指数損失 | 'exponential' | |
分類誤差 | 'classiferror' | 分類誤差は重み付きの誤分類観測値の比率です。 は、事後確率が最大であるクラスに対応するクラス ラベルです。I{x} はインジケーター関数です。 |
ヒンジ損失 | 'hinge' | |
ロジット損失 | 'logit' | |
最小コスト | 'mincost' | 重み付きの最小コストは、次の手順を観測値 j = 1、...、n について使用することにより計算されます。
重み付きの平均最小コスト損失は次のようになります。 |
二次損失 | 'quadratic' |
次の図では、m に対する 1 つの観測値の損失関数 (最小コストを除く) を比較しています。一部の関数は、[0,1] を通過するように正規化されています。
この関数は、tall 配列を完全にサポートします。詳細は、tall 配列 (MATLAB)を参照してください。
A modified version of this example exists on your system. Do you want to open this version instead? (ja_JP)
MATLAB のコマンドを実行するリンクがクリックされました。
このリンクは、Web ブラウザーでは動作しません。MATLAB コマンド ウィンドウに以下を入力すると、このコマンドを実行できます。
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: .
Select web siteYou can also select a web site from the following list:
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.