メインコンテンツ

resubEdge

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

説明

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

分類エッジは、分類マージンの加重平均を表すスカラー値です。

e = resubEdge(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 = 3×1 cell
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

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

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

再代入エッジ (学習標本マージンの平均) を計算します。

e = resubEdge(Mdl)
e = 
0.7440

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

フィッシャーのアヤメのデータ セットを読み込みます。次の 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 = 3×1 cell
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

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

既定の SVM スコアは決定境界からの距離です。事後確率の計算を指定をする場合、事後確率はスコアとして使用されます。

各分類器の再代入エッジを計算します。2 次損失関数は、領域 [0,1] のスコアで動作します。両モデルのバイナリ学習器を集計する場合、2 次損失の使用を指定をします。

fullEdge = resubEdge(FullMdl,'BinaryLoss','quadratic')
fullEdge = 
0.9896
partEdge = resubEdge(PartMdl,'BinaryLoss','quadratic')
partEdge = 
0.5059

データ セット全体に対して学習をさせた分類器の方がエッジが大きいので、すべての予測子を使用して学習をさせた分類器の方が学習標本近似が優れていることがわかります。

入力引数

すべて折りたたむ

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

名前と値の引数

すべて折りたたむ

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: resubEdge(Mdl,'BinaryLoss','quadratic') は、バイナリ学習器の損失関数として 2 次関数を指定します。

バイナリ学習器損失関数。組み込みの損失関数の名前または関数ハンドルとして指定します。

  • 次の表で、組み込み関数について説明します。ここで、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 になるように正規化されます。また、各クラスについて平均のバイナリ損失が計算されます[1]

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

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

    bLoss = customFunction(M,s)

    • MMdl.CodingMatrix に格納された KB 列の符号化行列です。

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

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

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

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

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

次の表に BinaryLoss の既定値を示します。既定値は、バイナリ学習器が返すスコアの範囲によって異なります。

仮定既定値

すべてのバイナリ学習器が次のいずれかである。

  • 分類決定木

  • 判別分析モデル

  • k 最近傍モデル

  • ロジスティック回帰学習器の線形またはカーネル分類モデル

  • 単純ベイズ モデル

"quadratic"
すべてのバイナリ学習器が SVM であるか、SVM 学習器の線形またはカーネル分類モデルである。"hinge"
すべてのバイナリ学習器が、AdaboostM1 または GentleBoost によって学習をさせたアンサンブルである。"exponential"
すべてのバイナリ学習器が、LogitBoost によって学習をさせたアンサンブルである。"binodeviance"
fitcecocFitPosterior=true を設定して、クラスの事後確率を予測するように指定している。"quadratic"
バイナリ学習器が異種混合で、さまざまな損失関数を使用している。"hamming"

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

例: BinaryLoss="binodeviance"

データ型: char | string | function_handle

バイナリ損失を集計する復号化方式。"lossweighted" または "lossbased" として指定します。詳細は、バイナリ損失を参照してください。

例: Decoding="lossbased"

データ型: char | string

推定オプション。statset によって返される構造体配列として指定します。

並列計算を起動するには、Parallel Computing Toolbox™ ライセンスが必要です。

例: Options=statset(UseParallel=true)

データ型: struct

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

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

例: Verbose=1

データ型: single | double

詳細

すべて折りたたむ

ヒント

  • 複数の 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. “Separability of ternary codes for sparse designs of error-correcting output codes.” Pattern Recog. Lett. Vol. 30, Issue 3, 2009, pp. 285–297.

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

拡張機能

すべて展開する

バージョン履歴

R2014b で導入