メインコンテンツ

fitcecoc

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

説明

Mdl = fitcecoc(Tbl,ResponseVarName) は、table Tbl 内の予測子と Tbl.ResponseVarName 内のクラス ラベルを使用して、学習済みの完全なマルチクラス誤り訂正出力符号 (ECOC) モデルを返します。fitcecoc は、1 対 1 の符号化設計により K(K – 1)/2 個のバイナリ サポート ベクター マシン (SVM) モデルを使用します。K は一意なクラス ラベル (レベル) の数です。MdlClassificationECOC モデルです。

Mdl = fitcecoc(Tbl,formula) は、table Tbl 内の予測子とクラス ラベルを使用して ECOC モデルを返します。formula は、学習に使用する応答および Tbl 内の予測子変数サブセットの説明モデルです。

Mdl = fitcecoc(Tbl,Y) は、table Tbl の予測子とベクトル Y のクラス ラベルを使用して ECOC モデルを返します。

Mdl = fitcecoc(X,Y) は、予測子 X とクラス ラベル Y を使用して学習をさせた ECOC モデルを返します。

Mdl = fitcecoc(___,Name,Value) は、前の構文のいずれかを使用し、1 つ以上の Name,Value ペア引数で指定されたオプションを追加して ECOC モデルを返します。

たとえば、異なるバイナリ学習器、異なる符号化設計、または交差検証の実行を指定します。Name,Value ペア引数 Kfold を使用して交差検証を実行することをお勧めします。交差検証の結果により、モデルがどの程度一般化を行うかを判断します。

[Mdl,HyperparameterOptimizationResults] = fitcecoc(___,Name,Value) は、OptimizeHyperparameters が指定されていて次の条件のいずれかに該当する場合に、ハイパーパラメーターの最適化の結果も返します。

  • Learners="linear" または Learners="kernel" を指定している。HyperparameterOptimizationResultsBayesianOptimization オブジェクトになります。

  • HyperparameterOptimizationOptions を指定して ConstraintType オプションと ConstraintBounds オプションを設定している。HyperparameterOptimizationResultsAggregateBayesianOptimization オブジェクトになります。コンパクトなモデル サイズまたは交差検証損失に基づいて最適化するように選択したり、オプションは同じでも制約範囲は異なる複数の一連の最適化問題を実行するように選択したりできます。

OptimizeHyperparameters が指定されていて、これらの条件のいずれにも該当しない場合は、出力 HyperparameterOptimizationResults[] になり、代わりに MdlHyperparameterOptimizationResults プロパティに結果が格納されます。

メモ

入力変数が tall 配列の場合のサポートされている構文のリストについては、tall 配列を参照してください。

すべて折りたたむ

サポート ベクター マシン (SVM) バイナリ学習器を使用して、マルチクラス誤り訂正出力符号 (ECOC) モデルに学習をさせます。

フィッシャーのアヤメのデータ セットを読み込みます。予測子データ X と応答データ Y を指定します。

load fisheriris
X = meas;
Y = species;

既定のオプションを使用して、マルチクラス ECOC モデルに学習をさせます。

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


  Properties, Methods

MdlClassificationECOC モデルです。既定では、fitcecoc は SVM バイナリ学習器および 1 対 1 符号化設計を使用します。ドット表記を使用して Mdl プロパティにアクセスできます。

クラス名および符号化設計行列を表示します。

Mdl.ClassNames
ans = 3×1 cell
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

CodingMat = Mdl.CodingMatrix
CodingMat = 3×3

     1     1     0
    -1     0     1
     0    -1    -1

3 つのクラスに対して 1 対 1 符号化設計を使用すると、3 つのバイナリ学習器が生成されます。CodingMat の列は学習器に、行はクラスに対応します。クラスの順序は Mdl.ClassNames 内の順序と同じです。たとえば、CodingMat(:,1)[1; –1; 0] であり、'setosa' または 'versicolor' として分類されるすべての観測値を使用して最初の SVM バイナリ学習器が学習を行うことを示します。'setosa'1 に対応するので陽性クラスであり、'versicolor'–1 に対応するので陰性クラスです。

各バイナリ学習器にセルのインデックス付けおよびドット表記を使用してアクセスすることができます。

Mdl.BinaryLearners{1}   % The first binary learner
ans = 
  CompactClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: [-1 1]
           ScoreTransform: 'none'
                     Beta: [4×1 double]
                     Bias: 1.4505
         KernelParameters: [1×1 struct]


  Properties, Methods

再代入分類誤差を計算します。

error = resubLoss(Mdl)
error = 
0.0067

学習データに対する分類誤差は小さくなっていますが、分類器が過適合モデルになる可能性があります。代わりに、crossval を使用して分類器を交差検証し、交差検証分類誤差を計算することができます。

既定の線形学習器テンプレートを作成し、これを使用して複数のバイナリ線形分類モデルを含む ECOC モデルに学習をさせます。

NLP のデータ セットを読み込みます。

load nlpdata

X は予測子データのスパース行列、Y はクラス ラベルの categorical ベクトルです。データには 13 個のクラスが含まれています。

既定の線形学習器テンプレートを作成します。

t = templateLinear
t = 
Fit template for Linear.
    Learner: 'svm'

t は線形学習器のテンプレート オブジェクトです。t のプロパティはすべて空です。t を学習関数 (ECOC マルチクラス分類用の fitcecoc など) に渡す場合、空のプロパティはそれぞれの既定値に設定されます。たとえば、Type"classification" に設定されます。既定値を変更するには、templateLinear の名前と値の引数を参照してください。

複数のバイナリ線形分類モデルで構成される ECOC モデルに学習させます。これらの分類モデルは、ドキュメンテーション Web ページにおける単語の度数分布からソフトウェア製品を特定します。学習時間を短縮するため、予測子データを転置し、観測値が列に対応することを指定します。

X = X';
rng(1); % For reproducibility 
Mdl = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns')
Mdl = 
  CompactClassificationECOC
      ResponseName: 'Y'
        ClassNames: [comm    dsp    ecoder    fixedpoint    hdlcoder    phased    physmod    simulink    stats    supportpkg    symbolic    vision    xpc]
    ScoreTransform: 'none'
    BinaryLearners: {78×1 cell}
      CodingMatrix: [13×78 double]


  Properties, Methods

または、Learners","Linear" を指定して、既定の線形分類モデルを含む ECOC モデルに学習をさせることができます。

メモリを節約するため、fitcecoc は線形分類学習器を含む学習済みの ECOC モデルを CompactClassificationECOC モデル オブジェクトで返します。

SVM バイナリ学習器による ECOC 分類器を交差検証し、一般化分類誤差を推定します。

フィッシャーのアヤメのデータ セットを読み込みます。予測子データ X と応答データ Y を指定します。

load fisheriris
X = meas;
Y = species;
rng(1); % For reproducibility

SVM テンプレートを作成し、予測子を標準化します。

t = templateSVM('Standardize',true)
t = 
Fit template for SVM.
    Standardize: 1

t は SVM テンプレートです。テンプレート オブジェクトのプロパティは、ほとんとが空です。ECOC 分類器に学習をさせると、該当するプロパティが既定値に設定されます。

ECOC 分類器に学習をさせ、クラスの順序を指定します。

Mdl = fitcecoc(X,Y,'Learners',t,...
    'ClassNames',{'setosa','versicolor','virginica'});

MdlClassificationECOC 分類器です。ドット表記を使用してプロパティにアクセスできます。

10 分割交差検証を使用して Mdl を交差検証します。

CVMdl = crossval(Mdl);

CVMdlClassificationPartitionedECOC 交差検証 ECOC 分類器です。

一般化分類誤差を推定します。

genError = kfoldLoss(CVMdl)
genError = 
0.0400

一般化分類誤差が 4% なので、ECOC 分類器がかなり良好に一般化を行うことがわかります。

SVM バイナリ学習器を使用して ECOC 分類器に学習をさせます。はじめに、学習標本のラベルとクラス事後確率を予測します。次に、グリッド内の各点における最大のクラス事後確率を予測します。結果を可視化します。

フィッシャーのアヤメのデータ セットを読み込みます。予測子として花弁の寸法を、応答として種の名前を指定します。

load fisheriris
X = meas(:,3:4);
Y = species;
rng(1); % For reproducibility

SVM テンプレートを作成します。予測子を標準化し、ガウス カーネルを指定します。

t = templateSVM('Standardize',true,'KernelFunction','gaussian');

t は SVM テンプレートです。ほとんどのプロパティは空です。ECOC 分類器を学習させると、適用可能なプロパティが既定値に設定されます。

SVM テンプレートを使用して ECOC 分類器を学習させます。'FitPosterior' 名前と値のペアの引数を使用して分類スコアをクラス事後確率 (predict または resubPredict により返されます) へ変換します。名前と値のペアの引数 'ClassNames' を使用して、クラスの順序を指定します。名前と値のペアの引数 'Verbose' を使用して、学習中に診断メッセージを表示します。

Mdl = fitcecoc(X,Y,'Learners',t,'FitPosterior',true,...
    'ClassNames',{'setosa','versicolor','virginica'},...
    'Verbose',2);
Training binary learner 1 (SVM) out of 3 with 50 negative and 50 positive observations.
Negative class indices: 2
Positive class indices: 1

Fitting posterior probabilities for learner 1 (SVM).
Training binary learner 2 (SVM) out of 3 with 50 negative and 50 positive observations.
Negative class indices: 3
Positive class indices: 1

Fitting posterior probabilities for learner 2 (SVM).
Training binary learner 3 (SVM) out of 3 with 50 negative and 50 positive observations.
Negative class indices: 3
Positive class indices: 2

Fitting posterior probabilities for learner 3 (SVM).

MdlClassificationECOC モデルです。同じ SVM テンプレートが各バイナリ学習器に適用されますが、テンプレートの cell ベクトルを渡すことで各バイナリ学習器のオプションを調整できます。

学習標本のラベルとクラス事後確率を予測します。名前と値のペアの引数 'Verbose' を使用して、ラベルとクラス事後確率の計算中に診断メッセージを表示します。

[label,~,~,Posterior] = resubPredict(Mdl,'Verbose',1);
Predictions from all learners have been computed.
Loss for all observations has been computed.
Computing posterior probabilities...
Mdl.BinaryLoss
ans = 
'quadratic'

バイナリ損失の平均が最小となるクラスに観測が割り当てられます。すべてのバイナリ学習器が事後確率を計算しているので、バイナリ損失関数は quadratic になります。

無作為な結果の集合を表示します。

idx = randsample(size(X,1),10,1);
Mdl.ClassNames
ans = 3×1 cell
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

table(Y(idx),label(idx),Posterior(idx,:),...
    'VariableNames',{'TrueLabel','PredLabel','Posterior'})
ans=10×3 table
      TrueLabel         PredLabel                     Posterior               
    ______________    ______________    ______________________________________

    {'virginica' }    {'virginica' }     0.0039319     0.0039866       0.99208
    {'virginica' }    {'virginica' }      0.017066      0.018262       0.96467
    {'virginica' }    {'virginica' }      0.014947      0.015855        0.9692
    {'versicolor'}    {'versicolor'}    2.2197e-14       0.87318       0.12682
    {'setosa'    }    {'setosa'    }         0.999    0.00025091    0.00074639
    {'versicolor'}    {'virginica' }    2.2195e-14      0.059427       0.94057
    {'versicolor'}    {'versicolor'}    2.2194e-14       0.97002      0.029984
    {'setosa'    }    {'setosa'    }         0.999     0.0002499    0.00074741
    {'versicolor'}    {'versicolor'}     0.0085638       0.98259     0.0088482
    {'setosa'    }    {'setosa'    }         0.999    0.00025013    0.00074718

Posterior の列は Mdl.ClassNames のクラスの順序に対応します。

観測された予測子領域の値のグリッドを定義します。グリッド内の各インスタンスの事後確率を予測します。

xMax = max(X);
xMin = min(X);

x1Pts = linspace(xMin(1),xMax(1));
x2Pts = linspace(xMin(2),xMax(2));
[x1Grid,x2Grid] = meshgrid(x1Pts,x2Pts);

[~,~,~,PosteriorRegion] = predict(Mdl,[x1Grid(:),x2Grid(:)]);

各グリッドの座標では、クラス間の最大クラス事後確率をプロットします。

contourf(x1Grid,x2Grid,...
        reshape(max(PosteriorRegion,[],2),size(x1Grid,1),size(x1Grid,2)));
h = colorbar;
h.YLabel.String = 'Maximum posterior';
h.YLabel.FontSize = 15;

hold on
gh = gscatter(X(:,1),X(:,2),Y,'krk','*xd',8);
gh(2).LineWidth = 2;
gh(3).LineWidth = 2;

title('Iris Petal Measurements and Maximum Posterior')
xlabel('Petal length (cm)')
ylabel('Petal width (cm)')
axis tight
legend(gh,'Location','NorthWest')
hold off

Figure contains an axes object. The axes object with title Iris Petal Measurements and Maximum Posterior, xlabel Petal length (cm), ylabel Petal width (cm) contains 4 objects of type contour, line. One or more of the lines displays its values using only markers These objects represent setosa, versicolor, virginica.

代理分岐をもつ決定木の GentleBoost アンサンブルを使用して、1 対他の ECOC 分類器に学習をさせます。学習を高速化するため、数値予測子をビン化し、並列計算を使用します。ビン化は、fitcecoc が木学習器を使用する場合のみ有効です。学習後、10 分割交差検証を使用して分類誤差を推定します。並列計算には Parallel Computing Toolbox™ が必要であることに注意してください。

標本データの読み込み

arrhythmia データ セットを読み込み検証します。

load arrhythmia
[n,p] = size(X)
n = 452
p = 279
isLabels = unique(Y);
nLabels = numel(isLabels)
nLabels = 13
tabulate(categorical(Y))
  Value    Count   Percent
      1      245     54.20%
      2       44      9.73%
      3       15      3.32%
      4       15      3.32%
      5       13      2.88%
      6       25      5.53%
      7        3      0.66%
      8        2      0.44%
      9        9      1.99%
     10       50     11.06%
     14        4      0.88%
     15        5      1.11%
     16       22      4.87%

このデータ セットには 279 個の予測子が含まれ、452 という標本サイズは相対的に小さいものです。16 個の異なるラベルのうち、13 個のみが応答 (Y) で表現されています。各ラベルは不整脈のさまざまな段階を表しており、観測値の 54.20% がクラス 1 に含まれています。

1 対他 ECOC 分類器の学習

アンサンブル テンプレートを作成します。少なくとも 3 つの引数を指定しなければなりません。手法、学習器の数、および学習器のタイプです。この例では、手法として 'GentleBoost'、学習器の個数として 100 を指定します。欠損観測値があるので、代理分岐を使用する決定木テンプレートを指定します。

tTree = templateTree('surrogate','on');
tEnsemble = templateEnsemble('GentleBoost',100,tTree);

tEnsemble はテンプレート オブジェクトです。ほとんどのプロパティは空ですが、学習中に既定値が入力されます。

決定木のアンサンブルをバイナリ学習器として使用して、1 対他の ECOC 分類器を学習させます。学習を高速化するため、ビン化と並列計算を使用します。

  • ビン化 ('NumBins',50) — 学習データ セットが大きい場合、名前と値のペアの引数 'NumBins' を使用することにより学習を高速化できます (精度が低下する可能性があります)。この引数は、fitcecoc が木学習器を使用する場合のみ有効です。'NumBins' の値を指定した場合、指定した個数の同確率のビンにすべての数値予測子がビン化され、元のデータではなくビンのインデックスに対して木が成長します。はじめに 'NumBins',50 を試してから、精度と学習速度に応じて 'NumBins' の値を変更できます。

  • 並列計算 ('Options',statset('UseParallel',true)) — Parallel Computing Toolbox のライセンスがある場合、プール内のワーカーに各バイナリ学習器を送る並列計算を使用して、計算を高速化できます。ワーカーの個数はシステム構成によって異なります。デュアルコア以上のシステムの場合、バイナリ学習器について決定木を使用すると、fitcecoc は Intel® スレッディング ビルディング ブロック (TBB) を使用して学習を並列化します。したがって、単一のコンピューターで 'UseParallel' オプションを指定しても役に立ちません。このオプションは、クラスターに対して使用します。

さらに、事前確率として 1/K を指定します。K = 13 は異なるクラスの個数です。

options = statset('UseParallel',true);
Mdl = fitcecoc(X,Y,'Coding','onevsall','Learners',tEnsemble,...
                'Prior','uniform','NumBins',50,'Options',options);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).

MdlClassificationECOC モデルです。

交差検証

10 分割交差検証を使用して ECOC 分類器の交差検証を実行します。

CVMdl = crossval(Mdl,'Options',options);
Warning: One or more folds do not contain points from all the groups.

CVMdlClassificationPartitionedECOC モデルです。少なくとも 1 つの分割の学習中に、いくつかのクラスが表示されないことが警告でわかります。したがって、これらの分割は欠損クラスに対するラベルを予測できません。cell のインデックス指定とドット表記を使用して、分割の結果を調査できます。たとえば、1 番目の分割の結果にアクセスするには CVMdl.Trained{1} と入力します。

交差検証済みの ECOC 分類器を使用して、検証分割のラベルを予測します。混同行列は、confusionchart を使用して計算できます。内側の位置のプロパティを変更してチャートを移動およびサイズ変更することにより、行要約の内部にパーセントが表示されるようにします。

oofLabel = kfoldPredict(CVMdl,'Options',options);
ConfMat = confusionchart(Y,oofLabel,'RowSummary','total-normalized');
ConfMat.InnerPosition = [0.10 0.12 0.85 0.85];

ビン化されたデータの再現

学習済みモデルの BinEdges プロパティと関数discretizeを使用して、ビン化された予測子データを再現します。

X = Mdl.X; % Predictor data
Xbinned = zeros(size(X));
edges = Mdl.BinEdges;
% Find indices of binned predictors.
idxNumeric = find(~cellfun(@isempty,edges));
if iscolumn(idxNumeric)
    idxNumeric = idxNumeric';
end
for j = idxNumeric 
    x = X(:,j);
    % Convert x to array if x is a table.
    if istable(x)
        x = table2array(x);
    end
    % Group x into bins by using the discretize function.
    xbinned = discretize(x,[-inf; edges{j}; inf]);
    Xbinned(:,j) = xbinned;
end

数値予測子の場合、1 からビンの数までの範囲にあるビンのインデックスが Xbinned に格納されます。カテゴリカル予測子の場合、Xbinned の値は 0 になります。XNaN が含まれている場合、対応する Xbinned の値は NaN になります。

fitcecoc を使用してハイパーパラメーターを自動的に最適化します。

fisheriris データ セットを読み込みます。

load fisheriris
X = meas;
Y = species;

自動的なハイパーパラメーター最適化を使用して、5 分割交差検証損失を最小化するハイパーパラメーターを求めます。再現性を得るために、乱数シードを設定し、'expected-improvement-plus' の獲得関数を使用します。

rng default
Mdl = fitcecoc(X,Y,'OptimizeHyperparameters','auto',...
    'HyperparameterOptimizationOptions',struct('AcquisitionFunctionName',...
    'expected-improvement-plus'))
|===================================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Coding | BoxConstraint|  KernelScale |  Standardize |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |              |
|===================================================================================================================================|
|    1 | Best   |         0.3 |      8.7187 |         0.3 |         0.3 |     onevsall |       76.389 |    0.0012205 |         true |
|    2 | Best   |     0.10667 |     0.16881 |     0.10667 |      0.1204 |     onevsone |    0.0013787 |       41.108 |        false |
|    3 | Best   |        0.04 |     0.52286 |        0.04 |       0.135 |     onevsall |       16.632 |      0.18987 |        false |
|    4 | Accept |    0.046667 |     0.19809 |        0.04 |    0.079094 |     onevsone |      0.04843 |    0.0042504 |         true |
|    5 | Accept |    0.046667 |     0.65773 |        0.04 |     0.04019 |     onevsall |       15.204 |      0.15933 |        false |
|    6 | Accept |        0.08 |     0.12094 |        0.04 |    0.043201 |     onevsall |       77.055 |       4.7599 |        false |
|    7 | Accept |        0.16 |       4.765 |        0.04 |     0.04347 |     onevsall |     0.037396 |    0.0010042 |        false |
|    8 | Accept |    0.046667 |     0.12104 |        0.04 |    0.043477 |     onevsone |    0.0041486 |      0.32592 |         true |
|    9 | Accept |    0.046667 |     0.19223 |        0.04 |    0.043118 |     onevsone |       4.6545 |     0.041226 |         true |
|   10 | Accept |     0.16667 |     0.12903 |        0.04 |    0.043001 |     onevsone |    0.0030987 |       300.86 |         true |
|   11 | Accept |    0.046667 |      1.9383 |        0.04 |    0.042997 |     onevsone |       128.38 |     0.005555 |        false |
|   12 | Accept |    0.046667 |     0.11227 |        0.04 |    0.043207 |     onevsone |     0.081215 |      0.11353 |        false |
|   13 | Accept |     0.33333 |     0.11539 |        0.04 |    0.043431 |     onevsall |       243.89 |       987.69 |         true |
|   14 | Accept |        0.14 |       2.015 |        0.04 |    0.043265 |     onevsone |       27.177 |    0.0010036 |         true |
|   15 | Accept |        0.04 |     0.12176 |        0.04 |    0.040139 |     onevsone |    0.0011464 |     0.001003 |        false |
|   16 | Accept |    0.046667 |     0.12033 |        0.04 |    0.040165 |     onevsone |    0.0010135 |     0.021485 |         true |
|   17 | Accept |    0.046667 |      1.1847 |        0.04 |    0.040381 |     onevsone |      0.42331 |    0.0010054 |        false |
|   18 | Accept |        0.14 |      5.9083 |        0.04 |     0.04025 |     onevsall |       956.72 |     0.053616 |        false |
|   19 | Accept |     0.26667 |     0.11253 |        0.04 |     0.04023 |     onevsall |     0.058487 |       1.2227 |        false |
|   20 | Best   |        0.04 |     0.18573 |        0.04 |    0.039873 |     onevsone |      0.79359 |       1.4535 |         true |
|===================================================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   |       Coding | BoxConstraint|  KernelScale |  Standardize |
|      | result |             | runtime     | (observed)  | (estim.)    |              |              |              |              |
|===================================================================================================================================|
|   21 | Accept |        0.04 |     0.12618 |        0.04 |    0.039837 |     onevsone |       8.8581 |        1.123 |        false |
|   22 | Accept |        0.04 |     0.12366 |        0.04 |    0.039802 |     onevsone |       755.56 |        21.24 |        false |
|   23 | Accept |     0.10667 |     0.11454 |        0.04 |    0.039824 |     onevsone |       41.541 |       966.05 |        false |
|   24 | Accept |        0.04 |     0.14556 |        0.04 |    0.039764 |     onevsone |       966.21 |      0.33603 |        false |
|   25 | Accept |     0.39333 |      7.2704 |        0.04 |    0.040001 |     onevsall |       11.928 |     0.001094 |        false |
|   26 | Accept |        0.04 |     0.11669 |        0.04 |    0.039986 |     onevsone |      0.12946 |     0.092435 |         true |
|   27 | Accept |        0.04 |     0.14272 |        0.04 |    0.039984 |     onevsone |       6.8428 |     0.039038 |        false |
|   28 | Accept |        0.04 |     0.12505 |        0.04 |    0.039983 |     onevsone |    0.0010014 |     0.019004 |        false |
|   29 | Accept |        0.04 |      0.1259 |        0.04 |    0.039985 |     onevsone |       194.14 |       1.8004 |         true |
|   30 | Accept |    0.046667 |     0.11376 |        0.04 |    0.039985 |     onevsone |       769.43 |       141.77 |         true |

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 43.9684 seconds
Total objective function evaluation time: 35.8132

Best observed feasible point:
     Coding     BoxConstraint    KernelScale    Standardize
    ________    _____________    ___________    ___________

    onevsone       0.79359         1.4535          true    

Observed objective function value = 0.04
Estimated objective function value = 0.040004
Function evaluation time = 0.18573

Best estimated feasible point (according to models):
     Coding     BoxConstraint    KernelScale    Standardize
    ________    _____________    ___________    ___________

    onevsone       0.12946        0.092435         true    

Estimated objective function value = 0.039985
Estimated function evaluation time = 0.11672

Figure contains an axes object. The axes object with title Min objective vs. Number of function evaluations, xlabel Function evaluations, ylabel Min objective contains 2 objects of type line. These objects represent Min observed objective, Estimated min objective.

Mdl = 
  ClassificationECOC
                         ResponseName: 'Y'
                CategoricalPredictors: []
                           ClassNames: {'setosa'  'versicolor'  'virginica'}
                       ScoreTransform: 'none'
                       BinaryLearners: {3×1 cell}
                           CodingName: 'onevsone'
    HyperparameterOptimizationResults: [1×1 BayesianOptimization]


  Properties, Methods

tall データに対して学習をさせた 2 つのマルチクラス ECOC モデルを作成します。一方のモデルに対して線形バイナリ学習器を、もう一方に対してカーネル バイナリ学習器を使用します。2 つのモデルの再代入分類誤差を比較します。

一般に、tall データのマルチクラス分類は、fitcecoc と線形バイナリ学習器またはカーネル バイナリ学習器を使用して実行できます。fitcecoc を使用して tall 配列に対してモデルに学習をさせる場合、SVM バイナリ学習器を直接使用することはできません。しかし、SVM を使用する線形バイナリ分類モデルまたはカーネル バイナリ分類モデルは使用できます。

tall 配列に対する計算を実行する場合、MATLAB® は並列プール (Parallel Computing Toolbox™ がある場合は既定) またはローカルの MATLAB セッションを使用します。Parallel Computing Toolbox がある場合でもローカルの MATLAB セッションを使用して例を実行するには、関数mapreducerを使用してグローバルな実行環境を変更できます。

フィッシャーのアヤメのデータ セットが含まれているフォルダーを参照するデータストアを作成します。datastore によって NaN 値に置き換えられるようにするため、'NA' 値を欠損データとして指定します。tall バージョンの予測子および応答データを作成します。

ds = datastore('fisheriris.csv','TreatAsMissing','NA');
t = tall(ds);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).
X = [t.SepalLength t.SepalWidth t.PetalLength t.PetalWidth];
Y = t.Species;

予測子データを標準化します。

Z = zscore(X);

tall データと線形バイナリ学習器を使用するマルチクラス ECOC モデルに学習をさせます。既定では、tall 配列を fitcecoc に渡すと、SVM を使用する線形バイナリ学習器の学習が行われます。応答データに含まれている一意なクラスは 3 つだけなので、符号化方式を 1 対他 (tall データを使用する場合の既定) から 1 対 1 (インメモリ データを使用する場合の既定) に変更します。

再現性を得るため、rngtallrng を使用して乱数発生器のシードを設定します。tall 配列の場合、ワーカーの個数と実行環境によって結果が異なる可能性があります。詳細については、コードの実行場所の制御を参照してください。

rng('default') 
tallrng('default')
mdlLinear = fitcecoc(Z,Y,'Coding','onevsone')
Training binary learner 1 (Linear) out of 3.
Training binary learner 2 (Linear) out of 3.
Training binary learner 3 (Linear) out of 3.
mdlLinear = 
  CompactClassificationECOC
      ResponseName: 'Y'
        ClassNames: {'setosa'  'versicolor'  'virginica'}
    ScoreTransform: 'none'
    BinaryLearners: {3×1 cell}
      CodingMatrix: [3×3 double]


  Properties, Methods

mdlLinear は、3 つのバイナリ学習器から構成される CompactClassificationECOC モデルです。

tall データとカーネル バイナリ学習器を使用するマルチクラス ECOC モデルに学習をさせます。はじめに、templateKernel オブジェクトを作成して、カーネル バイナリ学習器のプロパティを指定します。具体的には、拡張次元数を 216 に増やします。

tKernel = templateKernel('NumExpansionDimensions',2^16)
tKernel = 
Fit template for classification Kernel.

             BetaTolerance: []
                 BlockSize: []
             BoxConstraint: []
                   Epsilon: []
    NumExpansionDimensions: 65536
         GradientTolerance: []
        HessianHistorySize: []
            IterationLimit: []
               KernelScale: []
                    Lambda: []
                   Learner: 'svm'
              LossFunction: []
                    Stream: []
            VerbosityLevel: []
                   Version: 1
                    Method: 'Kernel'
                      Type: 'classification'

既定では、カーネル バイナリ学習器は SVM を使用します。

templateKernel オブジェクトを fitcecoc に渡し、符号化方式を 1 対 1 に変更します。

mdlKernel = fitcecoc(Z,Y,'Learners',tKernel,'Coding','onevsone')
Training binary learner 1 (Kernel) out of 3.
Training binary learner 2 (Kernel) out of 3.
Training binary learner 3 (Kernel) out of 3.
mdlKernel = 
  CompactClassificationECOC
      ResponseName: 'Y'
        ClassNames: {'setosa'  'versicolor'  'virginica'}
    ScoreTransform: 'none'
    BinaryLearners: {3×1 cell}
      CodingMatrix: [3×3 double]


  Properties, Methods

mdlKernel も、3 つのバイナリ学習器から構成される CompactClassificationECOC モデルです。

2 つのモデルの再代入分類誤差を比較します。

errorLinear = gather(loss(mdlLinear,Z,Y))
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 1: Completed in 1.4 sec
Evaluation completed in 1.6 sec
errorLinear = 0.0333
errorKernel = gather(loss(mdlKernel,Z,Y))
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 1: Completed in 15 sec
Evaluation completed in 16 sec
errorKernel = 0.0067

mdlKernel が誤分類した学習データの比率は、mdlLinear より少なくなっています。

入力引数

すべて折りたたむ

標本データ。table として指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの予測子に対応します。オプションとして、Tbl に応答変数用の列を 1 つ追加できます。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。

Tbl に応答変数が含まれている場合に Tbl 内の他の変数をすべて予測子として使用するには、ResponseVarName を使用して応答変数を指定します。

Tbl に応答変数が含まれている場合に Tbl 内の他の変数の一部のみを予測子として使用するには、formula を使用して式を指定します。

Tbl に応答変数が含まれていない場合は、Y を使用して応答変数を指定します。応答変数の長さと Tbl の行数は同じでなければなりません。

データ型: table

応答変数の名前。Tbl 内の変数の名前で指定します。

ResponseVarName には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、応答変数 YTbl.Y として格納されている場合、"Y" として指定します。それ以外の場合、モデルを学習させるときに、Tbl の列は Y を含めてすべて予測子として扱われます。

応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。Y が文字配列である場合、応答変数の各要素は配列の 1 つの行に対応しなければなりません。

名前と値の引数 ClassNames を使用してクラスの順序を指定することをお勧めします。

データ型: char | string

応答変数および予測子変数サブセットの説明モデル。"Y~x1+x2+x3" という形式の文字ベクトルまたは string スカラーを指定します。この形式では、Y は応答変数を、x1x2 および x3 は予測子変数を表します。

モデルに学習をさせるための予測子として Tbl 内の変数のサブセットを指定するには、式を使用します。式を指定した場合、formula に現れない Tbl 内の変数は使用されません。

式の変数名は Tbl の変数名 (Tbl.Properties.VariableNames) であり、有効な MATLAB® 識別子でなければなりません。関数 isvarname を使用して Tbl の変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName を使用してそれらを変換できます。

データ型: char | string

ECOC モデルに学習させるクラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。

Y が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。

Y の長さと Tbl または X の行数は、同じでなければなりません。

ClassNames 名前と値のペアの引数を使用したクラスの順序を指定することをお勧めします。

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

予測子データ。完全な行列またはスパース行列を指定します。

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

予測子の名前を X に表示される順序で指定するには、PredictorNames 名前と値のペアの引数を使用します。

メモ

  • 線形分類学習器の場合、観測値が列に対応するように X を配置して 'ObservationsIn','columns' を指定すると、最適化実行時間が大幅に短縮される可能性があります。

  • 他のすべての学習器では、観測値が行に対応するように X を配置します。

  • fitcecoc は、線形分類モデルの学習のみについてスパース行列をサポートします。

データ型: double | single

メモ

NaN、空の文字ベクトル ('')、空の string ("")、<missing> および <undefined> 要素は欠損データとして扱われます。Y の欠損値に対応する行 X は削除されます。ただし、X の欠損値の処理はバイナリ学習器によって異なります。詳細については、バイナリ学習器の学習関数 fitcdiscrfitckernelfitcknnfitclinearfitcnbfitcsvmfitctree または fitcensemble を参照してください。観測の削除により、有効な学習や交差検証の標本サイズが小さくなります。

名前と値の引数

すべて展開する

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

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

例: 'Learners','tree','Coding','onevsone','CrossVal','on' は、すべてのバイナリ学習器について決定木を使用し、1 対 1 の符号化設計を使用し、10 分割の交差検証を実装することを指定します。

メモ

交差検証の名前と値の引数は、名前と値の引数 OptimizeHyperparameters と一緒には使用できません。OptimizeHyperparameters の場合の交差検証は、名前と値の引数 HyperparameterOptimizationOptions を使用することのみによって変更できます。

ECOC 分類器オプション

すべて展開する

符号化設計名。'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 つずつ含まれます。

符号化設計は、カスタム符号化行列を使用して指定することもできます。KL 列の行列を使用します。各行はクラスに対応し、各列はバイナリ学習器に対応します。クラス順 (行) は 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

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

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

    説明
    "discriminant"判別分析。既定のオプションについては、templateDiscriminant を参照してください。

    "ensemble" (R2024a 以降)

    アンサンブル学習モデル。既定では、適応ロジスティック回帰 ("LogitBoost") 集約法、100 学習サイクル、木弱学習器を使用するアンサンブルになります。その他の既定のオプションについては、templateEnsemble を参照してください。
    "kernel"カーネル分類モデル。既定のオプションについては、templateKernel を参照してください。
    "knn"k 最近傍。既定のオプションについては、templateKNN を参照してください。
    "linear"線形分類モデル。既定のオプションについては、templateLinear を参照してください。
    "naivebayes"単純ベイズ。既定のオプションについては、templateNaiveBayes を参照してください。
    "svm"SVM。既定のオプションについては、templateSVM を参照してください。
    "tree"分類木。既定のオプションについては、templateTree を参照してください。

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

    • templateDiscriminant、判別分析用。

    • templateEnsemble、アンサンブル学習用。少なくとも学習の方式 (Method)、学習器の数 (NLearn) および学習器のタイプ (Learners) を指定しなくてはなりません。バイナリ学習にはアンサンブル法 "AdaBoostM2" を使用できません。名前と値の引数 OptimizeHyperparameters を使用してハイパーパラメーターの最適化を実行する場合、アンサンブル法は "AdaBoostM1""GentleBoost"、または "LogitBoost" でなければならず、アンサンブルの弱学習器は木でなければなりません。

    • templateKernel、カーネル分類用。

    • k 最近傍向けの templateKNN

    • templateLinear、線形分類用。

    • templateNaiveBayes、単純ベイズ用。

    • templateSVM、SVM 用。

    • templateTree、分類木用。

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

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

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

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

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

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

例: "Learners","tree"

数値予測子のビンの個数。'NumBins' と正の整数スカラーから構成されるコンマ区切りのペアとして指定します。この引数は、fitcecoc が木学習器を使用する場合、つまり、'Learners''tree'templateTree を使用して作成したテンプレート オブジェクト、または templateEnsemble と木弱学習器を使用して作成したテンプレート オブジェクトである場合のみ有効です。

  • NumBins の値が空 (既定) である場合、fitcecoc はどの予測子もビン化しません。

  • NumBins の値として正の整数スカラー (numBins) を指定した場合、fitcecoc は最大 numBins 個の同確率のビンにすべての数値予測子をビン化し、元のデータではなくビンのインデックスに対して木が成長します。

    • 予測子に含まれる一意の値が numBins より少なければ、ビンの数を numBins より少なくすることができます。

    • fitcecoc は、カテゴリカル予測子をビン化しません。

大規模な学習データ セットを使用する場合、このビン化オプションを使用すると学習を高速化できますが、精度が低下する可能性があります。はじめに "NumBins",50 を試してから、精度と学習速度に応じて値を変更できます。

学習済みのモデルでは、ビンのエッジは BinEdges プロパティに格納されます。

例: 'NumBins',50

データ型: single | double

同時に学習をさせるバイナリ学習器の個数。'NumConcurrent' と正の整数スカラーから構成されるコンマ区切りのペアとして指定します。既定値は、fitcecoc が逐次的にバイナリ学習器に学習をさせることを意味する 1 です。

メモ

このオプションは、tall 配列に対して fitcecoc を使用する場合のみ適用されます。詳細は、tall 配列を参照してください。

データ型: single | double

予測子データにおける観測値の次元。'ObservationsIn''columns' または 'rows' から構成されるコンマ区切りのペアとして指定します。

メモ

  • 線形分類学習器の場合、観測値が列に対応するように X を配置して 'ObservationsIn','columns' を指定すると、最適化実行時間が大幅に短縮される可能性があります。

  • 他のすべての学習器では、観測値が行に対応するように X を配置します。

例: 'ObservationsIn','columns'

詳細レベル。'Verbose' および 01 または 2 のいずれかで構成されるコンマ区切りのペアとして指定します。Verbose により、コマンド ウィンドウに表示されるバイナリ学習器ごとの診断情報の量が制御されます。

次の表は、使用できる詳細レベル オプションの一覧です。

説明
0診断情報は表示されません。
1新しいバイナリ学習器を学習させるたびに診断メッセージが表示されます。
2新しいバイナリ学習器を学習させるたびに追加の診断メッセージが表示されます。

各バイナリ学習器には、この名前と値のペアの引数とは無関係な独自の詳細レベルがあります。バイナリ学習器の詳細レベルを変更するには、テンプレート オブジェクトを作成し、名前と値のペアの引数 'Verbose' を指定します。その後、名前と値のペアの引数 'Learners' を使用してテンプレート オブジェクトを fitcecoc に渡します。

例: 'Verbose',1

データ型: double | single

交差検証オプション

すべて展開する

交差検証分類器を学習させるためのフラグ。'Crossval''on' または 'off' で構成されるコンマ区切りのペアとして指定します。

'on' を指定すると、10 の分割を使用して交差検証分類器の学習が実行されます。

CVPartitionHoldoutKFold または Leaveout 名前と値のペアの引数のいずれかを使用してこの交差検証の設定をオーバーライドできます。交差検証済みモデルを作成するときに使用できる交差検証の名前と値のペアの引数は、一度に 1 つだけです。

または、後で Mdlcrossval に渡して交差検証を実行します。

例: 'Crossval','on'

交差検証分割。交差検証のタイプと学習セットおよび検証セットのインデックス付けを指定する cvpartition オブジェクトとして指定します。

交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

例: cvp = cvpartition(500,KFold=5) を使用して、500 個の観測値に対する 5 分割交差検証について無作為な分割を作成するとします。この場合、CVPartition=cvp を設定して交差検証分割を指定できます。

ホールドアウト検証に使用するデータの比率。範囲 (0,1) のスカラー値として指定します。Holdout=p を指定した場合、以下の手順が実行されます。

  1. p*100% のデータを無作為に選択して検証データとして確保し、残りのデータを使用してモデルに学習をさせる。

  2. コンパクトな学習済みモデルを交差検証済みモデルの Trained プロパティに格納する。

交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

例: Holdout=0.1

データ型: double | single

交差検証済みモデルで使用する分割の数。1 より大きい正の整数値として指定します。KFold=k を指定した場合、以下の手順が実行されます。

  1. データを無作為に k 個のセットに分割する。

  2. 各セットについて、そのセットを検証データとして確保し、他の k – 1 個のセットを使用してモデルに学習をさせる。

  3. k 個のコンパクトな学習済みモデルを、交差検証済みモデルの Trained プロパティに含まれている k 行 1 列の cell ベクトルに格納する。

交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

例: KFold=5

データ型: single | double

Leave-one-out 法の交差検証のフラグ。'Leaveout''on' または 'off' で構成されるコンマ区切りのペアとして指定します。'Leaveout','on' を指定する場合、n 個の各観察に対して、次が実行されます。ここで、nsize(Mdl.X,1) です。

  1. 観測は検証データとして予約され、モデルは他の n – 1 個の観測を使用して学習させる

  2. n 個のコンパクトな学習済みモデルを、交差検証済みモデルの Trained プロパティに含まれている n 行 1 列の cell ベクトルのセルに格納する。

交差検証済みモデルを作成するために使用できるオプションは、CVPartitionHoldoutKFoldLeaveout のいずれかのみです。

メモ

線形分類モデル学習器またはカーネル分類モデル学習器から構成される ECOC モデルの交差検証では、Leave-one-out は推奨されません。

例: 'Leaveout','on'

その他の分類オプション

すべて展開する

カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。

説明
正の整数のベクトル

ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~ p です。p はモデルの学習に使用した予測子の数です。

fitcecoc が入力変数のサブセットを予測子として使用する場合、関数はサブセットのみを使用して予測子にインデックスを作成します。応答変数、観測値の重みの変数、または関数で使用されないその他の変数は、いずれも CategoricalPredictors 値でカウントされません。

logical ベクトル

true というエントリは、対応する予測子がカテゴリカルであることを意味します。ベクトルの長さは p です。

文字行列行列の各行は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。
文字ベクトルの cell 配列または string 配列配列の各要素は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。
"all"すべての予測子がカテゴリカルです。

'CategoricalPredictors' の仕様は以下の場合適切です。

  • 少なくとも 1 つの予測子がカテゴリカルであり、すべてのバイナリ学習器が分類木、単純ベイズ学習器、SVM、線形学習器、カーネル学習器、または分類木のアンサンブルである場合。

  • すべての予測子がカテゴリカルで少なくとも 1 つのバイナリ学習器が kNN である場合。

他の学習器の場合に 'CategoricalPredictors' を指定すると、そのバイナリ学習器に学習をさせることはできないという警告が出力されます。たとえば、ソフトウェアは、カテゴリカル予測子を使用して判別分析分類器に学習させることはできません。

各学習器は、学習器に対応する近似関数と同じ方法でカテゴリカル予測子を特定して処理します。カーネル学習器については fitckernel'CategoricalPredictors' を、k 最近傍学習器については fitcknn'CategoricalPredictors' を、線形学習器については fitclinear'CategoricalPredictors' を、単純ベイズ学習器については fitcnb'CategoricalPredictors' を、SVM 学習器については fitcsvm'CategoricalPredictors' を、木学習器については fitctree'CategoricalPredictors' を参照してください。

例: 'CategoricalPredictors','all'

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

学習に使用するクラスの名前。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列として指定します。ClassNames のデータ型は Tbl 内の応答変数または Y と同じでなければなりません。

ClassNames が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。

ClassNames の使用目的は次のとおりです。

  • 学習時のクラスの順序を指定する。

  • クラスの順序に対応する入力または出力引数の次元の順序を指定する。たとえば、Cost の次元の順序や predict によって返される分類スコアの列の順序を指定するために ClassNames を使用します。

  • 学習用にクラスのサブセットを選択する。たとえば、Y に含まれているすべての異なるクラス名の集合が ["a","b","c"] であるとします。クラス "a" および "c" のみの観測値を使用してモデルに学習をさせるには、ClassNames=["a","c"] を指定します。

ClassNames の既定値は、Tbl 内の応答変数または Y に含まれているすべての異なるクラス名の集合です。

例: ClassNames=["b","g"]

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

誤分類のコスト。'Cost' と正方行列または構造体から構成されるコンマ区切りペアとして指定します。指定する項目によって、内容は次のように変わります。

  • 正方行列 Cost の場合、Cost(i,j) は真のクラスが i である点をクラス j に分類するコストです。つまり、行は真のクラスに、列は予測するクラスに対応します。Cost の対応する行および列についてクラスの順序を指定するには、名前と値のペアの引数 ClassNames をさらに指定します。

  • 構造体 S の場合、次の 2 つのフィールドが必要となります。

    • S.ClassNames: Y と同じデータ型のクラス名を表す変数を含む。

    • S.ClassificationCosts。行と列の順序が S.ClassNames と同じコスト行列。

既定値は ones(K) - eye(K) です。K は異なるクラスの数です。

例: 'Cost',[0 1 2 ; 1 0 2; 2 2 0]

データ型: double | single | struct

並列計算。'Options'statset により返される構造体配列で構成されるコンマ区切りのペアとして指定します。並列計算には Parallel Computing Toolbox™ が必要です。fitcecoc はフィールド 'Streams''UseParallel' および 'UseSubtreams' を使用します。

次の表は、使用できるオプションの一覧です。

オプション説明
'Streams'

RandStream オブジェクトまたはそのようなオブジェクトの cell 配列。Streams を指定しない場合、既定のストリームが使用されます。Streams を指定する場合、以下が真である場合を除き、単一オブジェクトを使用します。

  • 開いている並列プールがある。

  • UseParalleltrue

  • UseSubstreamsfalse

これらが真の場合は、並列プールと同じサイズの cell 配列を使用します。並列プールが開いていない場合、1 つ (設定に依存) が開かれます。Streams は単一の乱数ストリームを提供しなければなりません。

'UseParallel'

Parallel Computing Toolbox を保有している場合、'UseParallel',true を設定してワーカーのプールを呼び出すことができます。関数 fitcecoc は、各バイナリ学習器をプール内のワーカーに送ります。

デュアルコア以上のシステムの場合、バイナリ学習器について決定木を使用すると、fitcecoc は Intel® スレッディング ビルディング ブロック (TBB) を使用して学習を並列化します。したがって、単一のコンピューターで 'UseParallel' オプションを指定しても役に立ちません。このオプションは、クラスターに対して使用します。Intel TBB の詳細については、https://www.intel.com/content/www/us/en/developer/tools/oneapi/onetbb.htmlを参照してください。

'UseSubstreams''Streams' で指定されたストリームを使用して計算する場合は true に設定します。既定値は false です。たとえば、Streams'mlfg6331_64' または 'mrg32k3a' といったサブストリームを許可するタイプに設定します。

確実に結果を予測しやすくなるベスト プラクティスは、parpool (Parallel Computing Toolbox) を使用し、fitcecoc によって並列計算を呼び出す前に並列プールを明示的に生成します。

例: 'Options',statset('UseParallel',true)

データ型: struct

予測子変数名。一意な名前の string 配列または一意な文字ベクトルの cell 配列として指定します。PredictorNames の機能は、学習データの提供方法によって決まります。

  • XY を指定した場合、PredictorNames を使用して X 内の予測子変数に名前を割り当てることができます。

    • PredictorNames 内の名前の順序は、X の列の順序に一致しなければなりません。つまり、PredictorNames{1}X(:,1) の名前、PredictorNames{2}X(:,2) の名前であり、他も同様です。また、size(X,2)numel(PredictorNames) は等しくなければなりません。

    • 既定では PredictorNames{'x1','x2',...} です。

  • Tbl を指定する場合、PredictorNames を使用して学習に使用する予測子変数を選択できます。つまり、fitcecoc は、学習中に PredictorNames の予測子変数と応答変数のみを使用します。

    • PredictorNamesTbl.Properties.VariableNames のサブセットでなければならず、応答変数の名前を含めることはできません。

    • 既定では、すべての予測子変数の名前が PredictorNames に格納されます。

    • PredictorNamesformula の両方ではなく、いずれか一方を使用して学習用の予測子を指定することをお勧めします。

例: "PredictorNames",["SepalLength","SepalWidth","PetalLength","PetalWidth"]

データ型: string | cell

各クラスの事前確率。'Prior' と次の表の値から構成されるコンマ区切りのペアとして指定します。

説明
'empirical'クラスの事前確率は、Y のクラスの相対的頻度です。
'uniform'クラスの事前確率はいずれも 1/K (K はクラス数) となります。
数値ベクトル各要素はクラスの事前確率です。Mdl.ClassNames に従って要素を並べ替えるか、ClassNames 名前と値のペアの引数を使用して順序を指定します。要素は合計が 1 になるように正規化されます。
構造体

構造体 S には 2 つのフィールドがあります。

  • S.ClassNames: Y と同じ型の変数のクラス名が格納されます。

  • S.ClassProbs: 対応する事前確率のベクトルが格納されます。要素は合計が 1 になるように正規化されます。

クラスの事前確率を組み込む方法については、事前確率と誤分類コストを参照してください。

例: struct('ClassNames',{{'setosa','versicolor','virginica'}},'ClassProbs',1:3)

データ型: single | double | char | string | struct

応答変数名。文字ベクトルまたは string スカラーとして指定します。

  • Y を指定した場合、ResponseName を使用して応答変数の名前を指定できます。

  • ResponseVarName または formula を指定した場合、ResponseName を使用できません。

例: ResponseName="response"

データ型: char | string

観測値の重み。正の値の数値ベクトルまたは Tbl 内の変数の名前として指定します。X または Tbl の各行に含まれている観測値は、Weights の対応する値で重み付けされます。Weights のサイズは、X または Tbl の行数と等しくなければなりません。

入力データを table Tbl として指定した場合、Weights は数値ベクトルが含まれている Tbl 内の変数の名前にすることができます。この場合、Weights には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、重みベクトル WTbl.W として格納されている場合、"W" として指定します。それ以外の場合、モデルに学習をさせるときに、Tbl の列は W を含めてすべて予測子または応答として扱われます。

既定の設定では、Weightsones(n,1) です。nX または Tbl の観測値数です。

合計が各クラスの事前確率の値と等しくなるように Weights が正規化されます。Inf の重みはサポートされません。

データ型: double | single | char | string

ハイパーパラメーターの最適化

すべて展開する

最適化するパラメーター。次のいずれかを指定します。

  • "none" — 最適化を行いません。

  • "auto" — 指定された Learners の既定パラメーターと共に "Coding" を使用します。

    • Learners = "svm" (既定) — ["BoxConstraint","KernelScale","Standardize"]

    • Learners = "discriminant"["Delta","Gamma"]

    • Learners = "ensemble"["LearnRate","Method","MinLeafSize","NumLearningCycles"]

    • Learners = "kernel"["KernelScale","Lambda","Standardize"]

    • Learners = "knn"["Distance","NumNeighbors","Standardize"]

    • Learners = "linear"["Lambda","Learner"]

    • Learners = "tree""MinLeafSize"

  • "all" — すべての使用可能パラメーターを最適化します。

  • 使用可能パラメーター名の string 配列または cell 配列

  • optimizableVariable オブジェクトのベクトル。通常は hyperparameters の出力です。

最適化では、パラメーターを変化させることにより、fitcecoc の交差検証損失 (誤差) を最小化しようとします。交差検証のタイプおよびその他の最適化の側面を制御するには、名前と値の引数 HyperparameterOptimizationOptions を使用します。HyperparameterOptimizationOptions を使用すると、ConstraintType オプションと ConstraintBounds オプションを設定することにより、交差検証損失の代わりに (コンパクトな) モデル サイズを最適化の目的として使用できます。

メモ

OptimizeHyperparameters の値は、他の名前と値の引数を使用して指定した値より優先されます。たとえば、OptimizeHyperparameters"auto" に設定すると、fitcecoc"auto" オプションに対応するハイパーパラメーターを最適化して、ハイパーパラメーターに指定された値を無視します。

fitcecoc では、以下のパラメーターを使用できます。

  • Codingfitcecoc"onevsall""onevsone" で探索します。

  • 次の表で指定されている、選択した Learners に対する使用可能ハイパーパラメーター。

    学習器使用可能ハイパーパラメーター
    (太字は既定の設定)
    既定の範囲
    "discriminant"Delta範囲 [1e-6,1e3] の対数スケール
    Gamma[0,1] の実数値
    DiscrimType"linear""quadratic""diagLinear""diagQuadratic""pseudoLinear" および "pseudoQuadratic"

    "ensemble" (R2024a 以降)

    Method"AdaBoostM1""GentleBoost" および "LogitBoost"
    NumLearningCycles範囲 [10,500] の対数スケールの整数
    LearnRate範囲 [1e-3,1] の対数スケールの正の値
    MinLeafSize範囲 [1,max(2,floor(NumObservations/2))] の対数スケールの整数
    MaxNumSplits範囲 [1,max(2,NumObservations-1)] の対数スケールの整数
    SplitCriterion"deviance""gdi" および "twoing"
    "kernel"Learner"svm" および "logistic"
    KernelScale範囲 [1e-3,1e3] の対数スケールの正の値
    Lambda範囲 [1e-3/NumObservations,1e3/NumObservations] の対数スケールの正の値
    NumExpansionDimensions範囲 [100,10000] の対数スケールの整数
    Standardize"true" および "false"
    "knn"NumNeighbors範囲 [1, max(2,round(NumObservations/2))] の対数スケールの正の整数値
    Distance"cityblock""chebychev""correlation""cosine""euclidean""hamming""jaccard""mahalanobis""minkowski""seuclidean" および "spearman"
    DistanceWeight"equal""inverse" および "squaredinverse"
    Exponent[0.5,3] の正の値
    Standardize"true" および "false"
    "linear"Lambda範囲 [1e-5/NumObservations,1e5/NumObservations] の対数スケールの正の値
    Learner"svm" および "logistic"
    Regularization

    "ridge" および "lasso"

    • Regularization"ridge" の場合、関数は既定ではメモリ制限 BFGS (LBFGS) ソルバーを使用します。

    • Regularization"lasso" の場合、関数は既定では可分近似によるスパース再構成 (SpaRSA) ソルバーを使用します。

    "svm"BoxConstraint範囲 [1e-3,1e3] の対数スケールの正の値
    KernelScale範囲 [1e-3,1e3] の対数スケールの正の値
    KernelFunction"gaussian""linear" および "polynomial"
    PolynomialOrder範囲 [2,4] の整数
    Standardize"true" および "false"
    "tree"MinLeafSize範囲 [1,max(2,floor(NumObservations/2))] の対数スケールの整数
    MaxNumSplits範囲 [1,max(2,NumObservations-1)] の対数スケールの整数
    SplitCriterion"gdi""deviance" および "twoing"
    NumVariablesToSample範囲 [1,max(2,NumPredictors)] の整数

    または、選択した Learners と共に hyperparameters を次のように使用します。

    load fisheriris % hyperparameters requires data and learner
    params = hyperparameters("fitcecoc",meas,species,"svm");

    使用可能な、または既定のハイパーパラメーターを調べるには、params を確認します。

既定以外のパラメーターを設定するには、既定以外の値が含まれている optimizableVariable オブジェクトのベクトルを渡します。以下に例を示します。

load fisheriris
params = hyperparameters("fitcecoc",meas,species,"svm");
params(2).Range = [1e-4,1e6];

OptimizeHyperparameters の値として params を渡します。

既定では、コマンド ラインに反復表示が表示され、最適化のハイパーパラメーターの個数に従ってプロットが表示されます。最適化とプロットにおける目的関数は誤分類率です。反復表示を制御するには、名前と値の引数 HyperparameterOptimizationOptionsVerbose オプションを設定します。プロットを制御するには、名前と値の引数 HyperparameterOptimizationOptionsShowPlots フィールドを設定します。

たとえば、ECOC 分類器の最適化を参照してください。

例: "OptimizeHyperparameters","auto"

最適化のオプション。HyperparameterOptimizationOptions オブジェクトまたは構造体として指定します。この引数を指定すると、名前と値の引数 OptimizeHyperparameters の効果が変化します。HyperparameterOptimizationOptions を指定する場合、OptimizeHyperparameters も指定しなければなりません。オプションはいずれも任意です。ただし、AggregateOptimizationResults を返すには ConstraintBoundsConstraintType を設定しなければなりません。構造体で設定できるオプションは HyperparameterOptimizationOptions オブジェクトと同じです。

オプション既定の設定
Optimizer
  • "bayesopt" — ベイズ最適化を使用。内部的には bayesopt が呼び出されます。

  • "gridsearch" — 次元ごとに NumGridDivisions の値があるグリッド探索を使用。"gridsearch" では、グリッドからの一様な非復元抽出により、無作為な順序で探索します。最適化後、sortrows(Mdl.HyperparameterOptimizationResults) コマンドを使用してグリッド順の table を取得できます。

  • "randomsearch"MaxObjectiveEvaluations 個の点で無作為に探索。

"bayesopt"
ConstraintBounds

N 個の最適化問題の制約範囲。N 行 2 列の数値行列または [] として指定します。ConstraintBounds の列には最適化問題の下限と上限の値が含まれます。ConstraintBounds を数値ベクトルとして指定すると、ConstraintBounds の 2 列目に値が代入され、1 列目にはゼロが代入されます。ConstraintBounds を指定する場合、ConstraintType も指定しなければなりません。

[]
ConstraintTarget

最適化問題の制約ターゲット。"matlab" または "coder" として指定します。ConstraintBoundsConstraintType[] の場合に ConstraintTarget を設定すると、ConstraintTarget[] に設定されます。ConstraintTargetConstraintType の値により、目的関数と制約関数が決まります。詳細については、HyperparameterOptimizationOptions を参照してください。

ConstraintBoundsConstraintType を指定する場合の既定値は "matlab" です。そうでない場合、既定値は [] となります。
ConstraintType

最適化問題の制約タイプ。"size" または "loss" として指定します。ConstraintType を指定する場合、ConstraintBounds も指定しなければなりません。ConstraintTargetConstraintType の値により、目的関数と制約関数が決まります。詳細については、HyperparameterOptimizationOptions を参照してください。

[]
AcquisitionFunctionName

獲得関数のタイプ:

  • "expected-improvement-per-second-plus"

  • "expected-improvement"

  • "expected-improvement-plus"

  • "expected-improvement-per-second"

  • "lower-confidence-bound"

  • "probability-of-improvement"

目的関数の実行時に最適化が決まるので、名前に per-second が含まれている獲得関数は、再現性がある結果を生成しません。名前に plus が含まれている獲得関数は、領域を過剰利用している場合に動作を変更します。詳細は、獲得関数のタイプを参照してください。

"expected-improvement-per-second-plus"
MaxObjectiveEvaluations目的関数評価の最大数。ConstraintBounds を使用して最適化問題を複数指定する場合、MaxObjectiveEvaluations の値は各最適化問題に個別に適用されます。
  • "bayesopt" および "randomsearch" の場合は Learners がアンサンブル学習モデルでなければ 30

  • "bayesopt" および "randomsearch" の場合は Learners がアンサンブル学習モデルであれば 70

  • "gridsearch" の場合はグリッド全体

MaxTime

最適化の制限時間。非負の実数スカラーとして指定します。制限時間の単位は、tictoc によって測定される秒です。MaxTime の値にかかわらず、少なくとも 1 回は最適化反復が実行されます。MaxTime は関数評価を中断させないため、実行時間が MaxTime を超える可能性があります。ConstraintBounds を使用して最適化問題を複数指定する場合、制限時間は各最適化問題に個別に適用されます。

Inf
NumGridDivisionsOptimizer="gridsearch" における各次元の値の個数。値は、各次元の値の個数を表す正の整数のベクトル、またはすべての次元に適用されるスカラーが可能です。カテゴリカル変数の場合、このオプションは無視されます。10
ShowPlots最適化の進行状況のプロットを表示するかどうかを示す logical 値。このオプションが true の場合、最適な観測された目的関数値が反復回数に対してプロットされます。ベイズ最適化を使用する場合 (Optimizer="bayesopt")、最適な推定された目的関数値もプロットされます。最適な観測された目的関数値および最適な推定された目的関数値は、反復表示の BestSoFar (observed) 列および BestSoFar (estim.) 列の値にそれぞれ対応しています。これらの値は、Mdl.HyperparameterOptimizationResults のプロパティ ObjectiveMinimumTrace および EstimatedObjectiveMinimumTrace で確認できます。問題にベイズ最適化の最適化パラメーターが 1 つまたは 2 つある場合、ShowPlots はパラメーターに対する目的関数のモデルもプロットします。true
SaveIntermediateResults最適化の結果を保存するかどうかを示す logical 値。このオプションが true の場合、"BayesoptResults" という名前のワークスペース変数が反復ごとに上書きされます。この変数は BayesianOptimization オブジェクトです。ConstraintBounds を使用して最適化問題を複数指定する場合、ワークスペース変数は "AggregateBayesoptResults" という名前の AggregateBayesianOptimization オブジェクトになります。false
Verbose

コマンド ラインにおける表示レベル:

  • 0 — 反復表示なし

  • 1 — 反復表示あり

  • 2 — 反復表示と追加情報

詳細については、bayesopt の名前と値の引数 Verbose およびベイズ最適化の使用による分類器の当てはめの最適化の例を参照してください。

1
UseParallelベイズ最適化を並列実行するかどうかを示す logical 値。並列実行には Parallel Computing Toolbox が必要です。並列でのタイミングに再現性がないため、並列ベイズ最適化で再現性のある結果が生成されるとは限りません。詳細については、並列ベイズ最適化を参照してください。false
Repartition

反復ごとに交差検証を再分割するかどうかを示す論理値。このオプションが false の場合、オプティマイザーは単一の分割を最適化に使用します。

分割ノイズが考慮されるので、通常は値を true にすると最も確実な結果が得られます。ただし、true で最適な結果を得るには、2 倍以上の関数評価が必要になります。

false
次の 3 つのオプションのいずれか 1 つのみを指定してください。
CVPartitioncvpartition によって作成された cvpartition オブジェクト交差検証オプションが指定されていない場合は Kfold=5
Holdoutホールドアウトの比率を表す範囲 (0,1) のスカラー
Kfold1 より大きい整数

例: HyperparameterOptimizationOptions=struct(UseParallel=true)

出力引数

すべて折りたたむ

学習済みの ECOC 分類器。ClassificationECOC モデル オブジェクト、CompactClassificationECOC モデル オブジェクト、ClassificationPartitionedECOC 交差検証済みモデル オブジェクト、ClassificationPartitionedLinearECOC 交差検証済みモデル オブジェクト、または ClassificationPartitionedKernelECOC 交差検証済みモデル オブジェクトとして返されます。

OptimizeHyperparameters を指定して HyperparameterOptimizationOptionsConstraintType オプションと ConstraintBounds オプションを設定している場合、Mdl はモデル オブジェクトの N 行 1 列の cell 配列になります。ここで、NConstraintBounds の行数と等しくなります。いずれの最適化問題からも実行可能なモデルが得られない場合、cell 配列の各値が [] になります。

次の表は、指定されたバイナリ学習器のタイプ、および交差検証を実行するかどうかに応じて、fitcecoc がどのタイプのモデル オブジェクトを返すかを示しています。

線形分類モデル学習器カーネル分類モデル学習器交差検証返されるモデル オブジェクト
なしなしなしClassificationECOC
なしなしありClassificationPartitionedECOC
ありなしなしCompactClassificationECOC
ありなしありClassificationPartitionedLinearECOC
なしありなしCompactClassificationECOC
なしありありClassificationPartitionedKernelECOC

ハイパーパラメーターの交差検証最適化の説明。BayesianOptimization オブジェクト、AggregateBayesianOptimization オブジェクト、またはハイパーパラメーターと関連する値の table として返されます。

名前と値の引数 OptimizeHyperparameters が空以外で、次の条件のいずれかに該当する場合、HyperparameterOptimizationResults は空以外になります。

ConstraintTypeConstraintBounds を指定している場合、HyperparameterOptimizationResultsAggregateBayesianOptimization オブジェクトになります。それ以外の場合、HyperparameterOptimizationResults の値は HyperparameterOptimizationOptionsOptimizer オプションの値によって異なります。

  • "bayesopt" (既定) — BayesianOptimization クラスのオブジェクト

  • "gridsearch" または "randomsearch" — 使用したハイパーパラメーター、観測された目的関数の値 (交差検証損失)、および最小 (最良) から最大 (最悪) までの観測値の順位が格納されている table

制限

  • fitcecoc は、線形分類モデルの学習のみについてスパース行列をサポートします。他のすべてのモデルの場合、代わりに予測子データの完全な行列を指定します。

詳細

すべて折りたたむ

ヒント

  • バイナリ学習器の数はクラス数とともに増加します。多数のクラスがある問題では、符号化設計 binarycomplete および ternarycomplete は効率的ではありません。ただし、

    • K ≤ 4 の場合、sparserandom ではなく ternarycomplete 符号化設計を使用します。

    • K ≤ 5 の場合、denserandom ではなく binarycomplete 符号化設計を使用します。

    コマンド ウィンドウに Mdl.CodingMatrix を入力して学習させた ECOC 分類器の符号化設計行列を表示できます。

  • アプリケーションへの詳細な知識を用い、計算上の制約を考慮して符号化行列を作成しなければなりません。十分な計算能力と時間がある場合、いくつかの符号化行列を試し、最大のパフォーマンスが得られるものを選択してください (たとえば、confusionchart を使用して各モデルの混同行列を確認します)。

  • 観測値が多いデータ セットの場合、Leave-one-out 交差検証 (Leaveout) では不十分です。代わりに、k 分割交差検証 (KFold) を使用してください。

  • モデルに学習をさせた後で、新しいデータについてラベルを予測する C/C++ コードを生成できます。C/C++ コードの生成には MATLAB Coder™ が必要です。詳細については、コード生成の紹介を参照してください。

アルゴリズム

すべて折りたたむ

参照

[1] Allwein, E., R. Schapire, and Y. Singer. “Reducing multiclass to binary: A unifying approach for margin classifiers.” Journal of Machine Learning Research. Vol. 1, 2000, pp. 113–141.

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

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

[4] Escalera, S., O. Pujol, and P. Radeva. “On the decoding process in ternary error-correcting output codes.” IEEE Transactions on Pattern Analysis and Machine Intelligence. Vol. 32, Issue 7, 2010, pp. 120–134.

拡張機能

すべて展開する

バージョン履歴

R2014b で導入

すべて展開する