ドキュメンテーション

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

CompactClassificationECOC

パッケージ: classreg.learning.classif

サポート ベクター マシンまたはその他の分類器向けのコンパクトなマルチクラス モデル

説明

CompactClassificationECOC は、コンパクトなマルチクラスの誤り訂正出力符号 (ECOC) モデルです。

コンパクトな分類器には ECOC マルチクラス モデルの学習に使用するデータが含まれません。このため、コンパクトな分類器を使用して交差検証などのタスクを実行することはできません。

コンパクトな ECOC マルチクラス モデルを使用して新しいデータのラベル付け (つまり、新しいデータのラベルの予測) を行います。

構築

CompactMdl = compact(Mdl) は、学習済みの完全なマルチクラス ECOC モデル (Mdl) からコンパクトなマルチクラス ECOC モデル (CompactModel) を返します。

CompactMdl = fitcecoc(X,Y,'Learners',t) は、線形分類モデル (ClassificationLinear モデル オブジェクト) またはカーネル分類モデル (ClassificationKernel モデル オブジェクト) のいずれかから構成されるコンパクトな ECOC モデルを返します。t は、'linear' または 'kernel'、つまり templateLinear が返す線形分類モデル テンプレート オブジェクトか templateKernel が返すカーネル分類モデル テンプレート オブジェクトでなければなりません。詳細は、fitcecocを参照してください。

入力引数

すべて展開する

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

予測子データ。n 行 p 列の非スパース行列またはスパース行列を指定します。

Y の長さと X の観測値数は同じでなければなりません。

データ型: single | double

分類線形モデルが学習するクラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。

Y が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。Y の長さと X の観測値数は同じでなければなりません。

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

プロパティ

すべて展開する

学習させたバイナリ学習器。モデル オブジェクトの cell ベクトルとして指定します。BinaryLearners には Y のクラスと同じ数の要素があります。

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

データ型: cell

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

異なる損失関数を使用するバイナリ学習器によって学習させる場合、BinaryLoss'hamming' に設定されます。潜在的な精度を上げるには、予測または損失を計算する場合に、predict または lossBinaryLoss 名前と値のペアの引数を使用して、既定の設定と異なるバイナリ損失関数を設定します。

データ型: char

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

データ型: single | double

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

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

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

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

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

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

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

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

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

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

データ型: double

展開された予測子名。文字ベクトルの cell 配列として格納されます。

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

バイナリ学習器の重み。数値行ベクトルとして指定します。LeanerWeights の長さはバイナリ学習器 (size(CodingMatrix,2)) の数と同じです。

LearnerWeights(j) はバイナリ学習器 j が分類器に学習させるのに使用した観測の重みの和です。

LearnerWeights を使用し、カルバック・ライブラー ダイバージェンスの最小化により事後確率をあてはめます。

データ型: double | single

予測子データ 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 | 関数ハンドル

メソッド

discardSupportVectors線形サポート ベクター マシン バイナリ学習器のサポート ベクターを破棄
edgeマルチクラス誤り訂正出力符号モデルの分類エッジ
lossマルチクラス誤り訂正出力符号モデルの分類損失
marginマルチクラス誤り訂正出力符号モデルの分類マージン
predictマルチクラス誤り訂正出力符号モデルの使用によるラベルの予測
selectModels正則化された線形分類モデルのサブセットの選択

コピーのセマンティクス

値。値のクラスがコピー操作に与える影響については、オブジェクトのコピー (MATLAB)を参照してください。

すべて折りたたむ

完全な ECOC モデル (すなわち ClassificationECOC 分類器) は学習データを保持します。効率性を高めるため、大規模な分類器を使用した新しいラベルの予測を行わないようにすることがあります。

フィッシャーのアヤメのデータセットを読み込みます。

load fisheriris
X = meas;
Y = species;

既定の SVM をバイナリ学習器として使用する ECOC モデルを学習させます。

Mdl = fitcecoc(X,Y)
Mdl = 
  ClassificationECOC
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'setosa'  'versicolor'  'virginica'}
           ScoreTransform: 'none'
           BinaryLearners: {3x1 cell}
               CodingName: 'onevsone'


  Properties, Methods

MdlClassificationECOC モデルです。

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

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


  Properties, Methods

CMdlCompactClassificationECOC モデルです。

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

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

  CMdl      1x1             12764  classreg.learning.classif.CompactClassificationECOC              
  Mdl       1x1             25337  ClassificationECOC                                               

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

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

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

フィッシャーのアヤメのデータセットを読み込みます。

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
rng(1);  % For reproducibility

classNames はデータセット内の一意のクラスで、K はクラス数です。classNames を使用して学習中のクラスの順序を指定できます。

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

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

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

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',1);

CVMdlClassificationECOC モデルではなく、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.016735e+00,-3.243073e-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 Recoginition Letters, Vol. 30, Issue 3, 2009, pp. 285–297.

拡張機能

R2014b で導入