Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

templateECOC

誤り訂正出力符号学習器のテンプレート

説明

t = templateECOC() は、誤り訂正出力符号 (ECOC) 分類学習器のテンプレートを返します。

既定のテンプレートを指定する場合、学習中のすべての入力引数には既定値が使用されます。

t = templateECOC(Name,Value) は、1 つ以上の名前と値のペアの引数で指定された追加オプションを使用してテンプレートを返します。

たとえば、符号化設計の指定、事後確率を近似させるかどうかの指定、バイナリ学習器のタイプの指定を行うことができます。

コマンド ウィンドウに t を表示する場合、すべてのオプションは、名前と値のペア引数を使用して指定する場合を除き、空 ([]) で表示されます。学習中、空のオプションに既定値が使用されます。

すべて折りたたむ

templateECOC を使用して既定の ECOC テンプレートを作成します。

t = templateECOC()
t = 
Fit template for classification ECOC.

    BinaryLearners: ''
            Coding: ''
      FitPosterior: []
           Options: []
    VerbosityLevel: []
     NumConcurrent: []
           Version: 1
            Method: 'ECOC'
              Type: 'classification'

MethodType を除き、テンプレート オブジェクトのすべてのプロパティは空です。ttestckfold に渡すと、空のプロパティにはそれぞれの既定値が設定されます。たとえば、BinaryLearners プロパティは、'SVM' で入力されます。他の既定値の詳細は、fitcecocを参照してください。

t は ECOC 学習器の計画です。これを作成しても、何も計算されません。ttestckfold に渡すと、ECOC 分類モデルを他のモデルと統計的に比較するための計画を指定できます。

予測子または特徴量を選択する方法として、2 つのモデルを学習させます。一方のモデルの学習に使用した予測子のサブセットをもう一方のモデルにも使用します。モデルの予測性能を統計的に比較します。少ない予測子で学習させたモデルの方が多くの予測子で学習させたモデルより性能が高いことを示す十分な証拠がある場合、以後は効率的な方のモデルを使用できます。

フィッシャーのアヤメのデータセットを読み込みます。2 次元の予測子の組み合わせをすべてプロットします。

load fisheriris
d = size(meas,2); % Number of predictors
pairs = nchoosek(1:d,2)
pairs = 6×2

     1     2
     1     3
     1     4
     2     3
     2     4
     3     4

for j = 1:size(pairs,1)
    subplot(3,2,j)
    gscatter(meas(:,pairs(j,1)),meas(:,pairs(j,2)),species)
    xlabel(sprintf('meas(:,%d)',pairs(j,1)))
    ylabel(sprintf('meas(:,%d)',pairs(j,2)))
    legend off
end

Figure contains 6 axes objects. Axes object 1 with xlabel meas(:,1), ylabel meas(:,2) contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent setosa, versicolor, virginica. Axes object 2 with xlabel meas(:,1), ylabel meas(:,3) contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent setosa, versicolor, virginica. Axes object 3 with xlabel meas(:,1), ylabel meas(:,4) contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent setosa, versicolor, virginica. Axes object 4 with xlabel meas(:,2), ylabel meas(:,3) contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent setosa, versicolor, virginica. Axes object 5 with xlabel meas(:,2), ylabel meas(:,4) contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent setosa, versicolor, virginica. Axes object 6 with xlabel meas(:,3), ylabel meas(:,4) contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent setosa, versicolor, virginica.

この散布図では、meas(:,3)meas(:,4) がグループを十分に分離しているように見えます。

ECOC テンプレートを作成します。1 対他の符号化設計を使用するように指定します。

t = templateECOC('Coding','onevsall');

既定の設定では、ECOC モデルは線形 SVM バイナリ学習器を使用します。'Learners' の名前と値のペアの引数によって指定すると、サポートされている他のアルゴリズムを選択できます。

予測子 3 および 4 のみを使用して学習させた ECOC モデルが、すべての予測子を使用して学習させた ECOC モデルと同程度以下の性能であるかどうかを検定します。この帰無仮説が棄却されると、予測子 3 および 4 のみを使用して学習させた ECOC モデルが、すべての予測子を使用して学習させた ECOC モデルより性能が高いことが示されます。予測子 3 および 4 を使用して学習をさせた ECOC モデルの分類誤差を C1、すべての予測子を使用して学習をさせた ECOC モデルの分類誤差を C2 で表すと、検定は次のようになります。

H0:C1C2H1:C1<C2

既定の設定では testckfold は 5 x 2 の k 分割 F 検定を実行しますが、これは片側検定に適していません。5 x 2 の k 分割 t 検定を実行するように指定します。

rng(1); % For reproducibility
[h,pValue] = testckfold(t,t,meas(:,pairs(6,:)),meas,species,...
    'Alternative','greater','Test','5x2t')
h = logical
   0

pValue = 0.8940

h = 0 なので、予測子 3 および 4 を使用して学習させたモデルが、すべての予測子を使用して学習させたモデルより精度が高いことを示す十分な証拠はありません。

入力引数

すべて折りたたむ

名前と値の引数

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

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

例: 'Coding','ternarycomplete','FitPosterior',true,'Learners','tree' は、完全三項の符号化設計の使用、スコアの事後確率への変換、およびすべてのバイナリ学習器の分類木を成長させることを指定します。

符号化設計名。'Coding' と数値行列または次の表の値から構成されるコンマ区切りのペアとして指定します。

バイナリ学習器の数説明
'allpairs' および 'onevsone'K(K – 1)/2各バイナリ学習器では、1 つのクラスが陽性であり、もう 1 つのクラスは陰性です。残りは無視されます。この計画はすべてのクラス ペアの割り当ての組み合わせを使用します。
'binarycomplete'2(K1)1この計画はクラスをすべて 2 つの組み合わせに分割します。いずれのクラスも無視されません。各バイナリ学習器では、すべてのクラス割り当てが –1 および 1 になり、割り当てに陽性クラスと陰性クラスが少なくとも 1 つずつ含まれます。
'denserandom'ランダム。ただし、約 10 log2K各バイナリ学習器には、陽性または陰性クラス (少なくとも各 1 つ) が無作為に割り当てられます。詳細については、ランダム符号化設計行列を参照してください。
'onevsall'K各バイナリ学習器では、1 つのクラスは陽性で残りは陰性です。この計画は陽性クラス割り当てのすべての組み合わせを使用します。
'ordinal'K – 11 番目のバイナリ学習器では、1 番目のクラスが陰性であり、残りは陽性です。2 番目のバイナリ学習器では、最初の 2 つのクラスが陰性であり、残りは陽性です。他についても同様です。
'sparserandom'ランダム。ただし、約 15 log2K各バイナリ学習器では、各クラスに確率 0.25 で陽性または陰性が無作為に割り当てられ、確率が 0.5 の場合にクラスが無視されます。詳細については、ランダム符号化設計行列を参照してください。
'ternarycomplete'(3K2(K+1)+1)/2この計画はクラスをすべて 3 つの組み合わせに分割します。すべてのクラス割り当てが 0–1、および 1 になり、各割り当てに陽性クラスと陰性クラスが少なくとも 1 つずつ含まれます。

符号化設計は、カスタム符号化行列を使用して指定することもできます。K 行 L 列の行列を使用します。各行はクラスに対応し、各列はバイナリ学習器に対応します。クラス順 (行) は ClassNames での順序に対応します。以下のガイドラインに従って行列を作成します。

  • カスタム符号化行列は、すべての要素が –10、または 1 でなければなりません。また、値は二分法によるクラス割り当てに対応しなければなりません。Coding(i,j) は、学習器 j がクラス i の観測値に割り当てるクラスとなります。

    二分法によるクラス割り当て
    –1学習器 j は、クラス i の観測値を陰性クラスに割り当てます。
    0学習の前に、学習器 j はクラス i の観測値をデータセットから削除します。
    1学習器 j は、クラス i の観測値を陽性クラスに割り当てます。

  • すべての列に –1 および 1 が少なくとも 1 つずつ含まれていなければなりません。

  • ij となるすべての列インデックス i および j について、Coding(:,i)Coding(:,j) と等しくなることができず、Coding(:,i)–Coding(:,j) と等しくなることができません。

  • カスタム符号化行列のすべての行は異なっていなければなりません。

カスタム符号化設計行列の形式の詳細については、カスタム符号化設計行列を参照してください。

例: 'Coding','ternarycomplete'

データ型: char | string | double | single | int16 | int32 | int64 | int8

スコアを変換して事後確率にするかどうかを示すフラグ。'FitPosterior' および true (1) または false (0) で構成されるコンマ区切りのペアで指定します。

FitPosteriortrue の場合、バイナリ学習器分類スコアは事後確率に変換されます。事後確率は、kfoldPredictpredict または resubPredict を使用して取得できます。

以下の場合、fitcecoc は事後確率の当てはめをサポートしません。

  • アンサンブル法が AdaBoostM2LPBoostRUSBoostRobustBoost または TotalBoost である。

  • バイナリ学習器 (Learners) が、SVM を実装する線形分類モデルまたはカーネル分類モデルである。線形分類モデルまたはカーネル分類モデルの事後確率を得るには、代わりにロジスティック回帰を実装してください。

例: 'FitPosterior',true

データ型: logical

バイナリ学習器テンプレート。'Learners' と文字ベクトル、string スカラー、テンプレート オブジェクト、またはテンプレート オブジェクトの cell ベクトルから構成されるコンマ区切りのペアとして指定します。特に、SVM などのバイナリ学習器と、GentleBoostLogitBoost および RobustBoost を使用するアンサンブルを指定すると、マルチクラス問題の解を求めることができます。ただし、fitcecoc もバイナリ分類器としてマルチクラス モデルをサポートしています。

  • Learners が文字ベクトルまたは string スカラーである場合、指定されたアルゴリズムの既定値を使用して各バイナリ学習器の学習が行なわれます。次の表は、使用可能なアルゴリズムをまとめたものです。

    説明
    'discriminant'判別分析。既定のオプションについては、templateDiscriminant を参照してください。
    'kernel'カーネル分類モデル。既定のオプションについては、templateKernel を参照してください。
    'knn'k 最近傍。既定のオプションについては、templateKNN を参照してください。
    'linear'線形分類モデル。既定のオプションについては、templateLinear を参照してください。
    'naivebayes'単純ベイズ。既定のオプションについては、templateNaiveBayes を参照してください。
    'svm'SVM。既定のオプションについては、templateSVM を参照してください。
    'tree'分類木。既定のオプションについては、templateTree を参照してください。

  • Learners がテンプレート オブジェクトの場合、各バイナリ学習器は格納されているオプションに従って学習します。テンプレート オブジェクトは以下を使用して作成できます。

  • Learners がテンプレート オブジェクトの cell ベクトルである場合、以下のようになります。

    • セル j は、バイナリ学習器 j (符号化設計行列の j 列目) に対応します。cell ベクトルの長さは L でなければなりません。L は、符号化設計行列の列数です。詳細については、Coding を参照してください。

    • 予測に組み込み損失関数のいずれかを使用するには、すべてのバイナリ学習器は同じ範囲のスコアを返さなくてはなりません。たとえば、既定の SVM バイナリ学習器と既定の単純ベイズ学習器を同時に含めることはできません。前者は (-∞,∞) の範囲にあるスコアを、後者はスコアとして事後確率を返します。それ以外の場合は、カスタム損失を関数ハンドルとして関数 predictloss などに指定しなくてはなりません。

    • 線形分類モデル学習器のテンプレートを他のテンプレートとともに指定することはできません。

    • 同様に、カーネル分類モデル学習器のテンプレートを他のテンプレートとともに指定することはできません。

既定では、既定の SVM テンプレートが学習器の学習に使用されます。

例: 'Learners','tree'

出力引数

すべて折りたたむ

ECOC 分類テンプレート。テンプレート オブジェクトとして返されます。予測性能を他の分類器と比較する ECOC 分類器の作成方法を指定するには、ttestckfold に渡します。

コマンド ウィンドウに t を表示する場合、すべての未指定のオプションは空 ([]) で表示されます。しかし、空のオプションは学習中に対応する既定値に置き換えられます。

アルゴリズム

すべて折りたたむ

カスタム符号化設計行列

カスタム符号化行列は特定の形式でなければなりません。ソフトウェアによるカスタム符号化行列の検証では、以下について確認されます。

  • すべての要素が –1、0、または 1 である。

  • すべての列に –1 および 1 が少なくとも 1 つずつ含まれている。

  • すべての列ベクトル u と v のそれぞれについて、u ≠ v かつ u ≠ –v である。

  • すべての行ベクトルが一意である。

  • 行列は任意の 2 つのクラスを分離できます。つまり、任意の行から他の任意の行に次のルールに従って移動できる。

    • 1 から –1 または –1 から 1 に垂直方向に移動。

    • 非ゼロ要素から別の非ゼロ要素に水平方向に移動。

    • 垂直方向の移動に行列の列を一度だけ使用。

    上記のルールを使用して、行 i から行 j に移動できない場合、クラス i および j は計画により分離できません。たとえば、次の符号化設計ではクラス 1 および 2 をクラス 3 および 4 から分離できません。

    [10100101]

    2 行目の 2 列目に 0 があるので、2 行目の –1 を 2 列目に水平に移動できません。したがって、この符号化設計は拒否されます。

ランダム符号化設計行列

K 個のクラスに対して、ランダム符号化設計行列が以下のように生成されます。

  1. 次のいずれかの行列が生成されます。

    1. 密なランダム — K 行 Ld 列の符号化設計行列の各要素に同じ確率で 1 または –1 が割り当てられます。ここで Ld10log2K です。

    2. スパース ランダム — K 行 Ls 列の符号化設計行列の各要素に 0.25 の確率で 1、0.25 の確率で -1、0.5 の確率で 0 が割り当てられます。ここで Ls15log2K です。

  2. 1 および –1 が少なくとも 1 つずつ列に含まれていない場合、その列は削除されます。

  3. 異なる列 u および v について u = v または u = –v である場合、v が符号化設計行列から削除されます。

既定では 10,000 個の行列が無作為に生成されます。次によって与えられるハミング尺度 ([2]) に基づき、行の最小ペアワイズ距離が最大になる行列が保持されます。

Δ(k1,k2)=0.5l=1L|mk1l||mk2l||mk1lmk2l|,

ここで、mkjl は符号化設計行列 j の要素です。

参照

[1] Fürnkranz, Johannes. “Round Robin Classification.” J. Mach. Learn. Res., Vol. 2, 2002, pp. 721–747.

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

バージョン履歴

R2015a で導入