ドキュメンテーション

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

CompactClassificationECOC

サポート ベクター マシン (SVM) などの分類器用のコンパクトなマルチクラス モデル

説明

CompactClassificationECOC は、コンパクトなバージョンのマルチクラス誤り訂正出力符号 (ECOC) モデルです。コンパクトな分類器には、マルチクラス ECOC モデルの学習に使用したデータが格納されません。このため、コンパクトな分類器を使用しても、交差検証など一部のタスクは実行できません。コンパクトなマルチクラス ECOC モデルは、新しいデータの分類 (predict) などのタスクに使用します。

作成

CompactClassificationECOC モデルは 2 つの方法で作成できます。

  • オブジェクト関数 compact を使用して、学習済みの ClassificationECOC モデルからコンパクトな ECOC モデルを作成する。

  • 関数 fitcecoc を使用し、名前と値のペアの引数 'Learners' として 'linear''kernel'templateLinear オブジェクト、templateKernel オブジェクト、またはこれらのオブジェクトの cell 配列を指定して、コンパクトな ECOC モデルを作成する。

プロパティ

すべて展開する

CompactClassificationECOC モデル オブジェクトを作成した後で、ドット表記を使用してプロパティにアクセスできます。たとえば、ECOC 分類器の学習と交差検証を参照してください。

ECOC のプロパティ

学習済みのバイナリ学習器。モデル オブジェクトの cell ベクトルを指定します。バイナリ学習器の個数は、Y 内のクラス数と符号化設計によって異なります。

BinaryLearner{j} の学習は、CodingMatrix(:,j) によって指定されるバイナリ問題に従って行われます。たとえば、SVM 学習器を使用したマルチクラス学習では、BinaryLearners の各要素は CompactClassificationSVM 分類器です。

データ型: cell

バイナリ学習器の損失関数。損失関数名を表す文字ベクトルを指定します。

異なる損失関数を使用するバイナリ学習器によって学習させる場合、BinaryLoss'hamming' に設定されます。精度が向上する可能性を高めるには、predict または loss の名前と値のペアの引数 'BinaryLoss' を使用して予測または損失を計算するときに、既定以外のバイナリ損失関数を指定します。

データ型: char

バイナリ学習器のクラス割り当て符号。数値行列を指定します。CodingMatrix は K 行 L 列の行列で、K はクラスの個数、L はバイナリ学習器の個数です。

CodingMatrix の要素は –10 または 1 であり、値は二分法によるクラス割り当てに対応します。次の表に、学習器 j がクラス i の観測値を CodingMatrix(i,j) の値に対応する二分クラスに割り当てる方法を示します。

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

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

バイナリ学習器の重み。数値行ベクトルを指定します。LeanerWeights の長さは、バイナリ学習器の個数 (length(Mdl.BinaryLearners)) と同じです。

LearnerWeights(j) は、分類器に学習をさせるためにバイナリ学習器 j が使用する観測値の重みの合計です。

LearnerWeights を使用し、カルバック・ライブラー ダイバージェンスの最小化により事後確率をあてはめます。事後確率の推定に二次計画法を使用する場合、LearnerWeights は無視されます。

データ型: double | single

他の分類のプロパティ

カテゴリカル予測子のインデックス。正の整数のベクトルを指定します。CategoricalPredictors には、カテゴリカル予測子が含まれている予測子データの列に対応するインデックス値を格納します。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。

データ型: single | double

学習で使用する一意なクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。ClassNames のデータ型はクラス ラベル Y と同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。ClassNames はクラスの順序も決定します。

データ型: カテゴリカル | char | logical | single | double | cell

このプロパティは読み取り専用です。

誤分類のコスト。正方数値行列として指定します。Cost には K 個の行および列が含まれ、K はクラスの数です。

Cost(i,j) は、真のクラスが i である点をクラス j に分類するコストです。Cost の行と列の順序は、ClassNames のクラスの順序に対応します。

fitcecoc は、異なるタイプのバイナリ学習器に異なる誤分類のコストを組み込みます。

データ型: double

展開された予測子名。文字ベクトルの cell 配列を指定します。

モデルがカテゴリカル変数用のエンコーディングを使用している場合、ExpandedPredictorNames には展開された変数を表す名前が格納されます。それ以外の場合、ExpandedPredictorNamesPredictorNames と同じです。

予測子データ X に現れる順序で並んでいる予測子名。文字ベクトルの cell 配列を指定します。PredictorNames の長さは、X の列数と同じです。

データ型: cell

このプロパティは読み取り専用です。

クラスの事前確率。数値ベクトルを指定します。Prior の要素数は ClassNames のクラス数と同じであり、要素の順序は ClassNames 内のクラスの順序に対応します。

fitcecoc は、異なるタイプのバイナリ学習器に異なる誤分類のコストを組み込みます。

データ型: double

応答変数名。文字ベクトルを指定します。

データ型: char

予測されたスコアに適用するスコア変換関数。関数名または関数ハンドルを指定します。

スコア変換関数を function などに変更するには、ドット表記を使用します。

  • 組み込み関数の場合、function を表の値に置き換えて次のコードを入力します。

    Mdl.ScoreTransform = 'function';

    説明
    'doublelogit'1/(1 + e–2x)
    'invlogit'log(x / (1 – x))
    'ismax'最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを 0 に設定します。
    'logit'1/(1 + e–x)
    'none' または 'identity'x (変換なし)
    'sign'x < 0 のとき –1
    x = 0 のとき 0
    x > 0 のとき 1
    'symmetric'2x – 1
    'symmetricismax'最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを –1 に設定します。
    'symmetriclogit'2/(1 + e–x) – 1

  • MATLAB® 関数やユーザー定義関数の場合は、関数ハンドルを入力します。

    Mdl.ScoreTransform = @function;

    function は、行列 (元のスコア) を受け入れて同じサイズの行列 (変換したスコア) を返さなければなりません。

データ型: char | function_handle

オブジェクト関数

compareHoldout新しいデータを使用して 2 つの分類モデルの精度を比較
discardSupportVectorsECOC モデルの線形 SVM バイナリ学習器のサポート ベクターを破棄
edgeマルチクラス誤り訂正出力符号 (ECOC) モデルの分類エッジ
lossマルチクラス誤り訂正出力符号 (ECOC) モデルの分類損失
marginマルチクラス誤り訂正出力符号 (ECOC) モデルの分類マージン
predictマルチクラス誤り訂正出力符号 (ECOC) モデルを使用して観測値を分類
selectModelsバイナリ ClassificationLinear 学習器から構成されるマルチクラス ECOC モデルのサブセットを選択
updateコード生成用にモデル パラメーターを更新

すべて折りたたむ

学習データを削除することにより、完全な ECOC モデルのサイズを縮小します。完全な ECOC モデル (ClassificationECOC モデル) には、学習データが保持されます。効率を向上させるため、より小さい分類器を使用します。

フィッシャーのアヤメのデータセットを読み込みます。予測子データ X、応答データ Y、および Y 内のクラスの順序を指定します。

load fisheriris
X = meas;
Y = categorical(species);
classOrder = unique(Y);

SVM バイナリ分類器を使用して ECOC モデルを学習させます。SVM テンプレート t を使用して予測子データを標準化し、クラスの順序を指定します。学習時に、t の空のオプションについては既定値が使用されます。

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

MdlClassificationECOC モデルです。

ECOC モデルのサイズを小さくします。

CompactMdl = compact(Mdl)
CompactMdl = 
  classreg.learning.classif.CompactClassificationECOC
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: [setosa    versicolor    virginica]
           ScoreTransform: 'none'
           BinaryLearners: {3x1 cell}
             CodingMatrix: [3x3 double]


  Properties, Methods

CompactMdlCompactClassificationECOC モデルです。CompactMdl では、Mdl で保存されるすべてのプロパティが保存されるわけではありません。具体的には、学習データが保存されません。

各分類器が使用するメモリの量を表示します。

whos('CompactMdl','Mdl')
  Name            Size            Bytes  Class                                                  Attributes

  CompactMdl      1x1             14364  classreg.learning.classif.CompactClassificationECOC              
  Mdl             1x1             27439  ClassificationECOC                                               

完全な ECOC モデル (Mdl) はコンパクトな ECOC モデル (CompactMdl) のほぼ 2 倍のサイズです。

新しい観測値のラベルを効率的に設定するため、Mdl を MATLAB® ワークスペースから削除し、CompactMdl と新しい予測子の値を predict に渡すことができます。

複数の異なるバイナリ学習器および 1 対他の符号化設計を使用して、ECOC 分類器に学習をさせ交差検証を実行します。

フィッシャーのアヤメのデータセットを読み込みます。予測子データ X と応答データ Y を指定します。クラスの名前と個数を調べます。

load fisheriris
X = meas;
Y = species;
classNames = unique(species(~strcmp(species,''))) % Remove empty classes 
classNames = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

K = numel(classNames) % Number of classes
K = 3

classNames を使用して学習中のクラスの順序を指定できます。

この例では、1 対他の符号化設計用に K = 3 個のバイナリ学習器を使用します。次のようにバイナリ学習器のテンプレートを指定します。

  • バイナリ学習器 1 および 2 は単純ベイズ分類器である。既定では、各予測子は与えられたラベルに対して条件付きで正規分布になります。

  • バイナリ学習器 3 は SVM 分類器である。ガウス カーネルの使用を指定します。

rng(1);  % For reproducibility
tNB = templateNaiveBayes();
tSVM = templateSVM('KernelFunction','gaussian');
tLearners = {tNB tNB tSVM};

tNBtSVM はそれぞれ単純ベイズおよび SVM 学習のテンプレート オブジェクトです。これらのオブジェクトは、学習時に使用するオプションを指定します。名前と値のペアの引数で指定したものを除き、ほとんどのプロパティは空です。学習時は、空のプロパティに対して既定値が設定されます。

バイナリ学習器テンプレートおよび 1 対他の符号化設計を使用して、ECOC 分類器に学習をさせ交差検証を実行します。クラスの順序を指定します。既定では、単純ベイズ分類器はスコアとして事後確率を使用しますが、SVM 分類器は判定境界からの距離を使用します。したがって、バイナリ学習器を集約するには、事後確率をあてはめるように指定しなければなりません。

CVMdl = fitcecoc(X,Y,'ClassNames',classNames,'CrossVal','on',...
    'Learners',tLearners,'FitPosterior',true);

CVMdl は、ClassificationPartitionedECOC 交差検証済みモデルです。既定では、10 分割交差検証が実行されます。スコアはバイナリ学習器間で同じ形式 (つまり事後確率) なので、バイナリ分類の結果を正しく集約できます。

ドット表記を使用して、学習させた分割のいずれかを検査します。

CVMdl.Trained{1}
ans = 
  classreg.learning.classif.CompactClassificationECOC
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'setosa'  'versicolor'  'virginica'}
           ScoreTransform: 'none'
           BinaryLearners: {3x1 cell}
             CodingMatrix: [3x3 double]


  Properties, Methods

各分割はデータの 90% で学習させたCompactClassificationECOC モデルです。

バイナリ学習器の結果には、ドット表記およびセルのインデックス付けを使用してアクセスできます。最初の分割内で学習させた SVM 分類器 (3 番目のバイナリ学習器) を表示します。

CVMdl.Trained{1}.BinaryLearners{3}
ans = 
  classreg.learning.classif.CompactClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: [-1 1]
           ScoreTransform: '@(S)sigmoid(S,-4.016268e+00,-3.243751e-01)'
                    Alpha: [33x1 double]
                     Bias: -0.1345
         KernelParameters: [1x1 struct]
           SupportVectors: [33x4 double]
      SupportVectorLabels: [33x1 double]


  Properties, Methods

汎化誤差を推定します。

genError = kfoldLoss(CVMdl)
genError = 0.0333

平均すると汎化誤差は約 3% です。

アルゴリズム

すべて展開する

参照

[1] Fürnkranz, Johannes. “Round Robin Classification.” Journal of Machine Learning Research, 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 Recognition Letters, Vol. 30, Issue 3, 2009, pp. 285–297.

拡張機能

R2014b で導入