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 の既定値を示します。既定値は、バイナリ学習器が返すスコアの範囲によって異なります。
| 仮定 | 既定値 |
|---|---|
すべてのバイナリ学習器が次のいずれかである。
| "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 つの分類モデルの精度を比較 |
discardSupportVectors | ECOC モデルの線形 SVM バイナリ学習器のサポート ベクターを破棄 |
edge | マルチクラス誤り訂正出力符号 (ECOC) モデルの分類エッジ |
gather | Gather properties of Statistics and Machine Learning Toolbox object from GPU |
incrementalLearner | マルチクラス誤り訂正出力符号 (ECOC) モデルをインクリメンタル学習器に変換 |
lime | Local 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 classesK = 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% です。
詳細
"誤り訂正出力符号 (ECOC) モデル" は、3 つ以上のクラスがある分類の問題を一連のバイナリ分類問題に縮小します。
ECOC 分類は、バイナリ学習器が学習するクラスを決定する符号化設計と、バイナリ学習器の結果 (予測) が集計される方法を決定する復号化スキームを必要とします。
以下のように仮定します。
分類問題には 3 つのクラスがある。
符号化設計が 1 対 1 である。3 クラスの場合、この符号化設計は次のようになります。
分類モデルを作成するときに、名前と値の引数
Codingを使用して別の符号化設計を指定できます。モデルでの予測クラスの判定にバイナリ損失関数 g による損失に重みを付けた復号化方式を使用する。ソフトウェアでは損失に基づく復号化方式もサポートされます。復号化方式とバイナリ損失関数は、
predict、loss、margin、edgeなどのオブジェクト関数を呼び出すときに、名前と値の引数DecodingとBinaryLossを使用してそれぞれ指定できます。
ECOC アルゴリズムの手順は次のとおりです。
学習器 1 は、クラス 1 またはクラス 2 の観測値について学習を行い、クラス 1 を陽性クラス、クラス 2 を陰性クラスとして扱います。他の学習器の学習も同様に実行します。
次のように仮定します。M は要素 mkl をもつ符号化設計行列です。sl は学習器 l の陽性クラスの予測された分類スコアです。新しい観測値は、B 個のバイナリ学習器について損失の合計が最小になるクラス () に割り当てられます。
ECOC モデルは他のマルチクラス モデルと比較して分類精度を向上させることができます[1]。
"符号化設計" は、各バイナリ学習器がどのクラスを学習したのかを要素が指示する行列です。つまり、マルチクラス問題がどのように一連のバイナリ問題にされたのかを示します。
符号化設計の各行は各クラスに対応し、各列はバイナリ学習器に対応します。三項符号化設計では、特定の列 (バイナリ学習器) に対して以下が実行されます。
1 が含まれている行の場合、対応するクラスの観測値をすべて陽性クラスにグループ化するようバイナリ学習器に指示します。
–1 が含まれている行の場合、対応するクラスの観測値をすべて陰性クラスにグループ化するようバイナリ学習器に指示します。
0 が含まれている行の場合、対応するクラスの観測値をすべて無視するようバイナリ学習器に指示します。
ハミング尺度に基づく行の最小ペアワイズ距離が大きい符号化設計行列が最適です。行のペアワイズ距離の詳細については、ランダム符号化設計行列および[2]を参照してください。
次の表は一般的な符号化設計について説明しています。
| 符号化設計 | 説明 | 学習器の数 | 行の最小ペアワイズ距離 |
|---|---|---|---|
| OVA (1 対他) | 各バイナリ学習器では、1 つのクラスは陽性で残りは陰性です。この計画は陽性クラス割り当てのすべての組み合わせを使用します。 | K | 2 |
| OVO (1 対 1) | 各バイナリ学習器では、1 つのクラスが陽性で、1 つのクラスが陰性です。残りは無視されます。この計画はすべてのクラス ペアの割り当ての組み合わせを使用します。 | K(K – 1)/2 | 1 |
| 完全二項 | この計画はクラスをすべて 2 つの組み合わせに分割します。いずれのクラスも無視されません。つまり、すべてのクラス割り当てが | 2K – 1 – 1 | 2K – 2 |
| 完全三項 | この計画はクラスをすべて 3 つの組み合わせに分割します。つまり、すべてのクラス割り当てが | (3K – 2K + 1 + 1)/2 | 3K – 2 |
| 順序 | 1 番目のバイナリ学習器では、1 番目のクラスが陰性であり、残りは陽性です。2 番目のバイナリ学習器では、最初の 2 つのクラスが陰性であり、残りは陽性です。他についても同様です。 | K – 1 | 1 |
| 密なランダム | 各バイナリ学習器には、陽性または陰性クラス (少なくとも各 1 つ) が無作為に割り当てられます。詳細については、ランダム符号化設計行列を参照してください。 | ランダム。ただし、約 10 log2K | 変数 |
| スパース ランダム | 各バイナリ学習器では、各クラスに確率 0.25 で陽性または陰性が無作為に割り当てられ、確率が 0.5 の場合にクラスが無視されます。詳細については、ランダム符号化設計行列を参照してください。 | ランダム。ただし、約 15 log2K | 変数 |
このプロットは符号化設計のバイナリ学習器の数を増加するクラス数 (K) と比較します。

アルゴリズム
K 個のクラスに対して、ランダム符号化設計行列が以下のように生成されます。
次のいずれかの行列が生成されます。
密なランダム — K 行 Ld 列の符号化設計行列の各要素に同じ確率で 1 または –1 が割り当てられます。ここで です。
スパース ランダム — K 行 Ls 列の符号化設計行列の各要素に 0.25 の確率で 1、0.25 の確率で -1、0.5 の確率で 0 が割り当てられます。ここで です。
1 および –1 が少なくとも 1 つずつ列に含まれていない場合、その列は削除されます。
異なる列 u および v について u = v または u = –v である場合、v が符号化設計行列から削除されます。
既定では 10,000 個の行列が無作為に生成されます。次によって与えられるハミング尺度 ([2]) に基づき、行の最小ペアワイズ距離が最大になる行列が保持されます。
ここで、mkjl は符号化設計行列 j の要素です。
既定では、効率を向上させるため、fitcecoc はすべての線形 SVM バイナリ学習器の Alpha、SupportVectorLabels および SupportVectors プロパティを空にします。fitcecoc は、Alpha ではなく Beta をモデル表示で出力します。
Alpha、SupportVectorLabels および SupportVectors を保存するには、サポート ベクターを fitcecoc に保存するよう指定する線形 SVM テンプレートを渡します。たとえば、次のように入力します。
t = templateSVM('SaveSupportVectors',true) Mdl = fitcecoc(X,Y,'Learners',t);
サポート ベクターおよび関連する値は、生成された ClassificationECOC モデルを discardSupportVectors に渡すことにより削除できます。
参照
[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.
拡張機能
使用上の注意事項および制限事項:
fitcecocを使用して ECOC モデルに学習をさせる場合、以下の制限が適用されます。すべてのバイナリ学習器が SVM 分類器または線形分類モデルでなければなりません。名前と値の引数
Learnersについて以下を指定できます。'svm'または'linear'SVM テンプレート オブジェクトまたはこのオブジェクトの cell 配列 (
templateSVMを参照)線形分類モデル テンプレート オブジェクトまたはこのオブジェクトの cell 配列 (
templateLinearを参照)
ECOC 分類器で使用するバイナリ学習器に対するコード生成の制限が ECOC 分類器にも適用されます。線形分類モデルでは、正則化強度は 1 つしか指定できず、名前と値の引数
Lambdaに'auto'または非負のスカラーを指定します。コーダー コンフィギュアラーを使用するコード生成では、以下の追加制限が適用されます。
SVM テンプレート オブジェクトの cell 配列を使用する場合、SVM 学習器の
Standardizeの値は一貫していなければなりません。たとえば、ある SVM 学習器に対して'Standardize',trueを指定した場合、すべての SVM 学習器に対して同じ値を指定しなければなりません。SVM テンプレート オブジェクトの cell 配列を使用し、ある SVM 学習器では線形カーネル (
'KernelFunction','linear') を、別の SVM 学習器では異なるタイプのカーネル関数を使用する場合、線形カーネルの学習器に対してを指定しなければなりません。'SaveSupportVectors',trueカテゴリカル予測子 (
logical、categorical、char、string、またはcell) はサポートされません。名前と値の引数CategoricalPredictorsは使用できません。カテゴリカル予測子をモデルに含めるには、モデルを当てはめる前にdummyvarを使用してカテゴリカル予測子を前処理します。categoricalデータ型のクラス ラベルはサポートされません。学習データ内のクラス ラベル値 (TblまたはY) および名前と値の引数ClassNamesの値はどちらもcategoricalデータ型の配列にはできません。詳細については、
ClassificationECOCCoderConfigurerを参照してください。モデルに再学習させる際に変更できない名前と値の引数の詳細については、ヒントを参照してください。
詳細は、コード生成の紹介を参照してください。
使用上の注意および制限:
次のオブジェクト関数は GPU 配列を完全にサポートしています。
次のオブジェクト関数は GPU 配列のサポートに制限があります。
次の少なくとも 1 つに該当する場合、オブジェクト関数は GPU で実行されます。
モデルが GPU 配列を使用して当てはめられている。
オブジェクト関数に渡す予測子データが GPU 配列である。
詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2014b で導入MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)