メインコンテンツ

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

CompactClassificationECOC

R2025b

サポート ベクター マシン (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 の既定値を示します。既定値は、バイナリ学習器が返すスコアの範囲によって異なります。

仮定既定値

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

  • 分類決定木

  • 判別分析モデル

  • k 最近傍モデル

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

  • 単純ベイズ モデル

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

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

精度が向上する可能性を高めるには、predict または loss の名前と値の引数 BinaryLoss を使用して、予測または損失を計算するときに既定以外のバイナリ損失関数を指定します。詳細については、バイナリ損失を参照してください。

データ型: char

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

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

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

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

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

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

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

データ型: double | single

他の分類のプロパティ

カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictors には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p です。p はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。

データ型: single | double

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

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

データ型: categorical | char | logical | single | double | cell

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

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

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

データ型: double

予測子データに現れる順序で並んでいる予測子名。文字ベクトルの cell 配列として指定します。PredictorNames の長さは、予測子変数として使用される学習データ X または Tbl に含まれている変数の数と等しくなります。

データ型: cell

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

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

データ型: cell

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

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

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

データ型: double

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

データ型: char

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

予測されたスコアに適用するスコア変換関数。'none' を指定します。ECOC モデルではスコア変換はサポートされません。

オブジェクト関数

compareHoldout新しいデータを使用して 2 つの分類モデルの精度を比較
discardSupportVectorsECOC モデルの線形 SVM バイナリ学習器のサポート ベクターを破棄
edgeマルチクラス誤り訂正出力符号 (ECOC) モデルの分類エッジ
gatherGPU からの Statistics and Machine Learning Toolbox オブジェクトのプロパティの収集
incrementalLearnerマルチクラス誤り訂正出力符号 (ECOC) モデルをインクリメンタル学習器に変換
limeLocal Interpretable Model-agnostic Explanations (LIME)
lossマルチクラス誤り訂正出力符号 (ECOC) モデルの分類損失
marginマルチクラス誤り訂正出力符号 (ECOC) モデルの分類マージン
partialDependence部分依存の計算
plotPartialDependence部分依存プロット (PDP) および個別条件付き期待値 (ICE) プロットの作成
predictマルチクラス誤り訂正出力符号 (ECOC) モデルを使用して観測値を分類
shapleyシャープレイ値
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);

Mdl は ClassificationECOC モデルです。

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

CompactMdl = compact(Mdl)
CompactMdl = 
  CompactClassificationECOC
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: [setosa    versicolor    virginica]
           ScoreTransform: 'none'
           BinaryLearners: {3×1 cell}
             CodingMatrix: [3×3 double]


  Properties, Methods

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

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

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

  CompactMdl      1x1             13917  classreg.learning.classif.CompactClassificationECOC              
  Mdl             1x1             27174  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 = 3×1 cell
    {'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};

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

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

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

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

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

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


  Properties, Methods

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

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

CVMdl.Trained{1}.BinaryLearners{3}
ans = 
  CompactClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: [-1 1]
           ScoreTransform: '@(S)sigmoid(S,-4.016619e+00,-3.243499e-01)'
                    Alpha: [33×1 double]
                     Bias: -0.1345
         KernelParameters: [1×1 struct]
           SupportVectors: [33×4 double]
      SupportVectorLabels: [33×1 double]


  Properties, Methods

汎化誤差を推定します。

genError = kfoldLoss(CVMdl)
genError = 
0.0333

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

詳細

すべて展開する

アルゴリズム

すべて展開する

参照

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

拡張機能

すべて展開する

バージョン履歴

R2014b で導入

すべて展開する