ドキュメンテーション

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

resubMargin

マルチクラス誤り訂正出力符号 (ECOC) モデルの再代入分類マージン

説明

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

m は、Mdl.Y と同じ長さの数値列ベクトルとして返されます。m の各エントリの推定は、学習させた ECOC モデル MdlMdl.X の対応する行、真のクラス ラベル Mdl.Y を使用して実行されます。

m = resubMargin(Mdl,Name,Value) は、1 つ以上の名前と値のペアの引数で指定された追加オプションを使用して、分類マージンを返します。たとえば、復号化方式、バイナリ学習器の損失関数、詳細レベルを指定できます。

すべて折りたたむ

SVM バイナリ学習器による ECOC モデルの再代入分類マージンを計算します。

フィッシャーのアヤメのデータセットを読み込みます。予測子データ X と応答データ Y を指定します。

load fisheriris
X = meas;
Y = species;

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

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

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

t は SVM テンプレート オブジェクトです。学習時は、t の空のプロパティに対して既定値が使用されます。MdlClassificationECOC モデルです。

Mdl の学習に使用した観測値の分類マージンを計算します。箱ひげ図を使用してマージンの分布を表示します。

m = resubMargin(Mdl);

boxplot(m)
title('In-Sample Margins')

観測値の分類マージンは、符号を反転した陽性クラスの損失から符号を反転した陰性クラスの最大損失を減算した値です。マージンが比較的大きくなる分類器を選択します。

複数のモデルによる学習標本マージンを比較することにより、特徴選択を実行します。この比較のみに基づくと、マージンが最大である分類器が最良の分類器です。

フィッシャーのアヤメのデータセットを読み込みます。次の 2 つのデータセットを定義します。

  • fullX には 4 つすべての予測子が含まれます。

  • partX にはがく片の測定値のみが含まれます。

load fisheriris
X = meas;
fullX = X;
partX = X(:,1:2);
Y = species;

各予測子セットについて SVM バイナリ学習器を使用する ECOC モデルに学習をさせます。SVM テンプレートを使用して予測子を標準化し、クラスの順序を指定して、事後確率を計算します。

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

FullMdl = fitcecoc(fullX,Y,'Learners',t,'ClassNames',classOrder,...
    'FitPosterior',true);
PartMdl = fitcecoc(partX,Y,'Learners',t,'ClassNames',classOrder,...
    'FitPosterior',true);

各分類器の再代入マージンを計算します。モデルごとに箱ひげ図を使用してマージンの分布を表示します。

fullMargins = resubMargin(FullMdl);
partMargins = resubMargin(PartMdl);

boxplot([fullMargins partMargins],'Labels',{'All Predictors','Two Predictors'})
title('Training-Sample Margins')

FullMdl のマージンの分布は、PartMdl のマージンの分布よりも高い位置にあり、変動性がより少なくなっています。この結果は、すべての予測子によって学習をさせたモデルの方が、学習データのあてはめが優れていることを示しています。

入力引数

すべて折りたたむ

学習済みの完全なマルチクラス ECOC モデル。fitcecoc によって学習をさせた ClassificationECOC モデルを指定します。

名前と値のペアの引数

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

例: resubMargin(Mdl,'Verbose',1) は、診断メッセージをコマンド ウィンドウに表示するよう指定します。

バイナリ学習器の損失関数。'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 モデルの検定標本ラベルの予測を参照してください。

BinaryLoss の既定値は、バイナリ学習器が返すスコアの範囲によって異なります。次の表で、特定の仮定に基づく BinaryLoss の既定値について説明します。

仮定既定値
すべてのバイナリ学習器が SVM であるか、SVM 学習器の線形またはカーネル分類モデルである。'hinge'
すべてのバイナリ学習器が、AdaboostM1 または GentleBoost によって学習をさせたアンサンブルである。'exponential'
すべてのバイナリ学習器が、LogitBoost によって学習をさせたアンサンブルである。'binodeviance'
すべてのバイナリ学習器が、ロジスティック回帰学習器の線形またはカーネル分類モデルである。または、fitcecoc'FitPosterior',true を設定して、クラスの事後確率を予測するよう指定した。'quadratic'

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

例: 'BinaryLoss','binodeviance'

データ型: char | string | function_handle

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

例: 'Decoding','lossbased'

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

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

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

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

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

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

例: 'Verbose',1

データ型: single | double

詳細

すべて折りたたむ

分類マージン

"分類マージン" は、各観測値における真のクラスの負の損失と偽のクラスの負の最大損失の差です。各マージンのスケールが同じである場合、マージンを分類の信頼尺度として使用できます。複数の分類器の中で、マージンが大きい分類器の方が優れています。

バイナリ損失

"バイナリ損失" は、バイナリ学習器がどの程度の精度で観測値をクラスに分類するかを判断する、クラスと分類スコアの関数です。

以下のように仮定します。

  • mkj は符号化設計行列 M の要素 (k,j)、つまりバイナリ学習器 j のクラス k に対応するコード。

  • sj は観測値に対するバイナリ学習器 j のスコア。

  • g はバイナリ損失関数。

  • k^ は観測値の予測クラス。

"損失に基づく復号化" [Escalera 他] では、バイナリ学習器全体のバイナリ損失の和が最小になるクラスにより、観測値の予測クラスが決まります。つまり、次のようになります。

k^=argminkj=1L|mkj|g(mkj,sj).

"損失に重みを付けた復号化" [Escalera 他] では、バイナリ学習器全体のバイナリ損失の平均が最小になるクラスにより、観測値の予測クラスが決まります。つまり、次のようになります。

k^=argminkj=1L|mkj|g(mkj,sj)j=1L|mkj|.

Allwein 他によると、すべてのクラスで損失値が同じ動的範囲に収まるので、損失に重みを付けた復号化では分類精度が向上します。

次の表は、サポートされる損失関数をまとめています。ここで、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 になるように正規化され、バイナリ学習器の平均を使用して集計されます [Allwein 他]

ECOC 分類器の全体的な性能の尺度である全体の分類損失 (オブジェクト関数 loss および predict の名前と値のペアの引数 'LossFun' により指定) とバイナリ損失を混同しないでください。

ヒント

  • 複数の ECOC 分類器のマージンまたはエッジを比較するには、テンプレート オブジェクトを使用して分類器間で共通するスコア変換関数を学習時に指定します。

参照

[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.

拡張機能

R2014b で導入