ドキュメンテーション

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

resubLoss

クラス: ClassificationECOC

マルチクラス誤り訂正出力符号モデルの再代入による分類損失

構文

L = resubLoss(Mdl)
L = resubLoss(Mdl,Name,Value)

説明

L = resubLoss(Mdl) は、Mdl.X に格納されている学習データと Mdl.Y に格納されている対応するクラス ラベルを使用して、学習済みのマルチクラス誤り訂正出力符号 (ECOC) モデル Mdl の分類損失 (L) を返します。

L = resubLoss(Mdl,Name,Value) は、1 つ以上の Name,Value のペアの引数で指定された追加オプションを使用して、分類損失を返します。

たとえば、損失関数、復号化スキームまたは詳細レベルを指定します。

入力引数

すべて展開する

マルチクラス ECOC モデル。fitcecoc によって返される ClassificationECOC モデルを指定します。

名前と値のペアの引数

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

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

  • 次の表には、組み込み関数の名前と説明が含まれています。ここで、yj は特定のバイナリ学習器のクラス ラベル (集合 {–1,1,0} 内)、sj は観測値 j のスコア、g(yj,sj) はバイナリ損失の式です。

    説明スコア領域g(yj,sj)
    'binodeviance'二項分布からの逸脱度(–∞,∞)log[1 + exp(–2yjsj)]/[2log(2)]
    'exponential'指数(–∞,∞)exp(–yjsj)/2
    'hamming'ハミング[0,1] または (–∞,∞)[1 – sign(yjsj)]/2
    'hinge'ヒンジ(–∞,∞)max(0,1 – yjsj)/2
    'linear'線形(–∞,∞)(1 – yjsj)/2
    'logit'ロジスティック(–∞,∞)log[1 + exp(–yjsj)]/[2log(2)]
    'quadratic'2 次[0,1][1 – yj(2sj – 1)]2/2

    バイナリ損失は、yj = 0 の場合に損失が 0.5 になるように正規化されます。また、各クラスについて平均のバイナリ損失が計算されます。

  • カスタム バイナリ損失関数の場合は関数ハンドルを指定します。たとえば、customFunction の場合は 'BinaryLoss',@customFunction を指定します。

    customFunction の形式は次のとおりです。

    bLoss = customFunction(M,s)
    ここで、

    • MMdl.CodingMatrix に格納された K 行 L 列のコーディング行列です。

    • s は、1 行 L 列の分類スコアの行ベクトルです。

    • bLoss は分類損失です。このスカラーは、特定のクラスのすべての学習器についてバイナリ損失を集計します。たとえば、平均バイナリ損失を使用して、各クラスの学習器の損失を集計できます。

    • K は、クラスの数です。

    • L は、バイナリ学習器の数です。

    カスタムなバイナリ損失関数を渡す例については、カスタム バイナリ損失関数を使用する ECOC モデルの検定標本ラベルの予測を参照してください。

既定の設定では、すべてのバイナリ学習器が

  • SVM である場合、または SVM 学習器の線形分類モデルまたはカーネル分類モデルのいずれかである場合、BinaryLoss'hinge'

  • AdaboostM1 または GentleBoost によって学習させたアンサンブルの場合、BinaryLoss'exponential'

  • LogitBoost によって学習させたアンサンブルの場合、BinaryLoss'binodeviance'

  • ロジスティック回帰学習器の線形分類モデルまたはカーネル分類モデルである場合、またはクラス事後確率を予測するように指定した場合 (つまり fitcecoc'FitPosterior',1 を設定した場合)、BinaryLoss'quadratic'

それ以外の場合、'BinaryLoss' の既定値は 'hamming' です。既定値を確認するには、コマンド ラインでドット表記を使用して学習済みモデルの BinaryLoss プロパティを表示します。

例: 'BinaryLoss','binodeviance'

データ型: char | string | 関数ハンドル

バイナリ損失を集計する復号化方式。'Decoding''lossweighted' または 'lossbased' から構成されるコンマ区切りのペアとして指定します。詳細は、バイナリ損失 を参照してください。

例: 'Decoding','lossbased'

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

次が可能です。

  • 組み込み関数 'classiferror' を指定します。このとき、損失関数は分類誤差、つまり誤分類された観測の比率です。

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

    n = size(X,1) が標本サイズで、k がクラス数であるとします。関数には署名 lossvalue = lossfun(C,S,W,Cost) がなければなりません。ここで、次のようになります。

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

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

    • Cnk 列の logical 行列で、行は対応する観測値が属するクラスを示しています。列の順序は Mdl.ClassNames のクラスの順序に対応します。

      行ごとに観測値 p がクラス q である場合、C(p,q) = 1 を設定して、C を構築します。行 p の他のすべての要素を 0 に設定します。

    • S は、符号を反転したクラスの損失値からなる nk 列の数値行列です。各列は観測と対応しています。列の順序は CVMdl.ClassNames のクラスの順序に対応します。SresubPredict の出力引数 NegLoss に類似します。

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

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

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

データ型: char | string | 関数ハンドル

推定オプション。statset により返される 'Options' と構造体配列から構成されるコンマ区切りのペアとして指定します。

並列計算を起動するには、以下を行います。

  • Parallel Computing Toolbox™ ライセンスが必要です。

  • 'Options',statset('UseParallel',1) を指定します。

詳細レベル。'Verbose'0 または 1 から構成されるコンマ区切りのペアとして指定します。Verbose は、コマンド ウィンドウに表示される診断メッセージの量を制御します。

Verbose0 の場合、診断メッセージは表示されません。それ以外の場合は、診断メッセージが表示されます。

例: 'Verbose',1

データ型: single | double

出力引数

すべて展開する

分類損失。スカラーとして返されます。L は汎化または再代入品質測定です。解釈は損失関数と加重スキームによって異なりますが、通常は、優れた分類器の方が損失値がより小さくなります。

すべて展開する

フィッシャーのアヤメのデータセットを読み込みます。

load fisheriris
X = meas;
Y = species;

SVM バイナリ分類器を使用して ECOC モデルを学習させます。予測子を標準化してクラスの順序を定義することをお勧めします。SVM テンプレートを使用して、予測子の標準化を指定します。

t = templateSVM('Standardize',1);
classOrder = unique(Y)
classOrder = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

Mdl = fitcecoc(X,Y,'Learners',t,'ClassNames',classOrder);

t は SVM テンプレート オブジェクトです。学習中は、t の空のオプションの既定値が使用されます。MdlClassificationECOC モデルです。

再代入損失 (標本内分類誤差) を推定します。

L = resubLoss(Mdl)
L = 0.0267

ECOC モデルは学習標本アヤメの 2.67% を誤分類します。

モデルがどの程度の精度で特定のクラスを分類するかを知りたいと仮定します。次の例では、このようなカスタム損失関数を resubLoss に渡す方法を示します。

フィッシャーのアヤメのデータセットを読み込みます。

load fisheriris
X = meas;
Y = categorical(species);
n = numel(Y);           % Sample size
classOrder = unique(Y)  % Class order
classOrder = 3x1 categorical array
     setosa 
     versicolor 
     virginica 

K = numel(classOrder);  % Number of classes

SVM バイナリ分類器を使用して ECOC モデルを学習させます。予測子を標準化してクラスの順序を定義することをお勧めします。SVM テンプレートを使用して、予測子の標準化を指定します。

t = templateSVM('Standardize',1);
Mdl = fitcecoc(X,Y,'Learners',t,'ClassNames',classOrder);

t は SVM テンプレート オブジェクトです。学習中は、t の空のオプションの既定値が使用されます。MdlClassificationECOC モデルです。

学習観測値の符号を反転した損失を計算します。

rng(1); % For reproducibility
[~,negLoss] = resubPredict(Mdl);

各観測値の最小損失を取る関数を作成し、すべての観測値の最小損失を平均化します。

lossfun = @(C,S,~,~)mean(min(-negLoss,[],2));

学習データのカスタム損失を計算します。

resubLoss(Mdl,'LossFun',lossfun)
ans = 0.0065

学習データの平均、最小バイナリ損失は 0.0065 です。

詳細

すべて展開する

参照

[1] Allwein, E., R. Schapire, and Y. Singer. “Reducing multiclass to binary: A unifying approach for margin classifiers.” Journal of Machine Learning Research. Vol. 1, 2000, pp. 113–141.

[2] Escalera, S., O. Pujol, and P. Radeva. “On the decoding process in ternary error-correcting output codes.” IEEE Transactions on Pattern Analysis and Machine Intelligence. Vol. 32, Issue 7, 2010, pp. 120–134.

[3] Escalera, S., O. Pujol, and P. Radeva. “Separability of ternary codes for sparse designs of error-correcting output codes.” Pattern Recogn. Vol. 30, Issue 3, 2009, pp. 285–297.

拡張機能