fitcecoc
サポート ベクター マシンまたはその他の分類器向けのマルチクラス モデルの当てはめ
構文
説明
は、table Mdl = fitcecoc(Tbl,ResponseVarName)Tbl 内の予測子と Tbl.ResponseVarName 内のクラス ラベルを使用して、学習済みの完全なマルチクラス誤り訂正出力符号 (ECOC) モデルを返します。fitcecoc は、1 対 1 の符号化設計により K(K – 1)/2 個のバイナリ サポート ベクター マシン (SVM) モデルを使用します。K は一意なクラス ラベル (レベル) の数です。Mdl は ClassificationECOC モデルです。
は、前の構文のいずれかを使用し、1 つ以上の Mdl = fitcecoc(___,Name,Value)Name,Value ペア引数で指定されたオプションを追加して ECOC モデルを返します。
たとえば、異なるバイナリ学習器、異なる符号化設計、または交差検証の実行を指定します。Name,Value ペア引数 Kfold を使用して交差検証を実行することをお勧めします。交差検証の結果により、モデルがどの程度一般化を行うかを判断します。
[ は、Mdl,HyperparameterOptimizationResults] = fitcecoc(___,Name,Value)OptimizeHyperparameters が指定されていて次の条件のいずれかに該当する場合に、ハイパーパラメーターの最適化の結果も返します。
Learners="linear"またはLearners="kernel"を指定している。HyperparameterOptimizationResultsはBayesianOptimizationオブジェクトになります。HyperparameterOptimizationOptionsを指定してConstraintTypeオプションとConstraintBoundsオプションを設定している。HyperparameterOptimizationResultsはAggregateBayesianOptimizationオブジェクトになります。コンパクトなモデル サイズまたは交差検証損失に基づいて最適化するように選択したり、オプションは同じでも制約範囲は異なる複数の一連の最適化問題を実行するように選択したりできます。
OptimizeHyperparameters が指定されていて、これらの条件のいずれにも該当しない場合は、出力 HyperparameterOptimizationResults は [] になり、代わりに Mdl の HyperparameterOptimizationResults プロパティに結果が格納されます。
メモ
入力変数が 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
Mdl は ClassificationECOC モデルです。既定では、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 learnerans =
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 nlpdataX は予測子データのスパース行列、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'});
Mdl は ClassificationECOC 分類器です。ドット表記を使用してプロパティにアクセスできます。
10 分割交差検証を使用して Mdl を交差検証します。
CVMdl = crossval(Mdl);
CVMdl は ClassificationPartitionedECOC 交差検証 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).
Mdl は ClassificationECOC モデルです。同じ 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

代理分岐をもつ決定木の 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).
Mdl は ClassificationECOC モデルです。
交差検証
10 分割交差検証を使用して ECOC 分類器の交差検証を実行します。
CVMdl = crossval(Mdl,'Options',options);Warning: One or more folds do not contain points from all the groups.
CVMdl は ClassificationPartitionedECOC モデルです。少なくとも 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 になります。X に NaN が含まれている場合、対応する 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

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 (インメモリ データを使用する場合の既定) に変更します。
再現性を得るため、rng と tallrng を使用して乱数発生器のシードを設定します。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 オブジェクトを作成して、カーネル バイナリ学習器のプロパティを指定します。具体的には、拡張次元数を に増やします。
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 スカラーを指定しなければなりません。たとえば、応答変数 Y が Tbl.Y として格納されている場合、"Y" として指定します。それ以外の場合、モデルを学習させるときに、Tbl の列は Y を含めてすべて予測子として扱われます。
応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。Y が文字配列である場合、応答変数の各要素は配列の 1 つの行に対応しなければなりません。
名前と値の引数 ClassNames を使用してクラスの順序を指定することをお勧めします。
データ型: char | string
応答変数および予測子変数サブセットの説明モデル。"Y~x1+x2+x3" という形式の文字ベクトルまたは string スカラーを指定します。この形式では、Y は応答変数を、x1、x2 および 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 の欠損値の処理はバイナリ学習器によって異なります。詳細については、バイナリ学習器の学習関数 fitcdiscr、fitckernel、fitcknn、fitclinear、fitcnb、fitcsvm、fitctree または 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 つの組み合わせに分割します。いずれのクラスも無視されません。各バイナリ学習器では、すべてのクラス割り当てが –1 および 1 になり、割り当てに陽性クラスと陰性クラスが少なくとも 1 つずつ含まれます。 | |
"denserandom" | ランダム。ただし、約 10 log2K | 各バイナリ学習器には、陽性または陰性クラス (少なくとも各 1 つ) が無作為に割り当てられます。詳細については、ランダム符号化設計行列を参照してください。 |
"onevsall" | K | 各バイナリ学習器では、1 つのクラスは陽性で残りは陰性です。この計画は陽性クラス割り当てのすべての組み合わせを使用します。 |
"ordinal" | K – 1 | 1 番目のバイナリ学習器では、1 番目のクラスが陰性であり、残りは陽性です。2 番目のバイナリ学習器では、最初の 2 つのクラスが陰性であり、残りは陽性です。他についても同様です。 |
"sparserandom" | ランダム。ただし、約 15 log2K | 各バイナリ学習器では、各クラスに確率 0.25 で陽性または陰性が無作為に割り当てられ、確率が 0.5 の場合にクラスが無視されます。詳細については、ランダム符号化設計行列を参照してください。 |
"ternarycomplete" | この計画はクラスをすべて 3 つの組み合わせに分割します。すべてのクラス割り当てが 0、–1、および 1 になり、各割り当てに陽性クラスと陰性クラスが少なくとも 1 つずつ含まれます。 |
符号化設計は、カスタム符号化行列を使用して指定することもできます。K 行 L 列の行列を使用します。各行はクラスに対応し、各列はバイナリ学習器に対応します。クラス順 (行) は ClassNames での順序に対応します。以下のガイドラインに従って行列を作成します。
カスタム符号化行列は、すべての要素が
–1、0、または1でなければなりません。また、値は二分法によるクラス割り当てに対応しなければなりません。Coding(i,j)は、学習器jがクラスiの観測値に割り当てるクラスとなります。値 二分法によるクラス割り当て –1学習器 jは、クラスiの観測値を陰性クラスに割り当てます。0学習の前に、学習器 jはクラスiの観測値をデータ セットから削除します。1学習器 jは、クラスiの観測値を陽性クラスに割り当てます。すべての列に
–1および1が少なくとも 1 つずつ含まれていなければなりません。i≠jとなるすべての列インデックス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) で構成されるコンマ区切りのペアで指定します。
FitPosterior が true の場合、バイナリ学習器分類スコアは事後確率に変換されます。事後確率は、kfoldPredict、predict または resubPredict を使用して取得できます。
以下の場合、fitcecoc は事後確率の当てはめをサポートしません。
アンサンブル法が
AdaBoostM2、LPBoost、RUSBoost、RobustBoostまたはTotalBoostである。バイナリ学習器 (
Learners) が、SVM を実装する線形分類モデルまたはカーネル分類モデルである。線形分類モデルまたはカーネル分類モデルの事後確率を得るには、代わりにロジスティック回帰を実装してください。
例: 'FitPosterior',true
データ型: logical
バイナリ学習器テンプレート。文字ベクトル、string スカラー、テンプレート オブジェクト、またはテンプレート オブジェクトの cell ベクトルとして指定します。特に、SVM などのバイナリ学習器と、GentleBoost、LogitBoost および 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 バイナリ学習器と既定の単純ベイズ学習器を同時に含めることはできません。前者は (-∞,∞) の範囲にあるスコアを、後者はスコアとして事後確率を返します。それ以外の場合は、カスタム損失を関数ハンドルとして関数
predictやlossなどに指定しなくてはなりません。線形分類モデル学習器のテンプレートを他のテンプレートとともに指定することはできません。
同様に、カーネル分類モデル学習器のテンプレートを他のテンプレートとともに指定することはできません。
既定では、既定の 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' および 0、1 または 2 のいずれかで構成されるコンマ区切りのペアとして指定します。Verbose により、コマンド ウィンドウに表示されるバイナリ学習器ごとの診断情報の量が制御されます。
次の表は、使用できる詳細レベル オプションの一覧です。
| 値 | 説明 |
|---|---|
0 | 診断情報は表示されません。 |
1 | 新しいバイナリ学習器を学習させるたびに診断メッセージが表示されます。 |
2 | 新しいバイナリ学習器を学習させるたびに追加の診断メッセージが表示されます。 |
各バイナリ学習器には、この名前と値のペアの引数とは無関係な独自の詳細レベルがあります。バイナリ学習器の詳細レベルを変更するには、テンプレート オブジェクトを作成し、名前と値のペアの引数 'Verbose' を指定します。その後、名前と値のペアの引数 'Learners' を使用してテンプレート オブジェクトを fitcecoc に渡します。
例: 'Verbose',1
データ型: double | single
交差検証オプション
交差検証分割。交差検証のタイプと学習セットおよび検証セットのインデックス付けを指定する cvpartition オブジェクトとして指定します。
交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartition、Holdout、KFold、Leaveout の 4 つのうちのいずれかのみです。
例: cvp = cvpartition(500,KFold=5) を使用して、500 個の観測値に対する 5 分割交差検証について無作為な分割を作成するとします。この場合、CVPartition=cvp を設定して交差検証分割を指定できます。
ホールドアウト検証に使用するデータの比率。範囲 (0,1) のスカラー値として指定します。Holdout=p を指定した場合、以下の手順が実行されます。
p*100% のデータを無作為に選択して検証データとして確保し、残りのデータを使用してモデルに学習をさせる。コンパクトな学習済みモデルを交差検証済みモデルの
Trainedプロパティに格納する。
交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartition、Holdout、KFold、Leaveout の 4 つのうちのいずれかのみです。
例: Holdout=0.1
データ型: double | single
交差検証済みモデルで使用する分割の数。1 より大きい正の整数値として指定します。KFold=k を指定した場合、以下の手順が実行されます。
データを無作為に
k個のセットに分割する。各セットについて、そのセットを検証データとして確保し、他の
k– 1 個のセットを使用してモデルに学習をさせる。k個のコンパクトな学習済みモデルを、交差検証済みモデルのTrainedプロパティに含まれているk行 1 列の cell ベクトルに格納する。
交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartition、Holdout、KFold、Leaveout の 4 つのうちのいずれかのみです。
例: KFold=5
データ型: single | double
Leave-one-out 法の交差検証のフラグ。'Leaveout' と 'on' または 'off' で構成されるコンマ区切りのペアとして指定します。'Leaveout','on' を指定する場合、n 個の各観察に対して、次が実行されます。ここで、n は size(Mdl.X,1) です。
観測は検証データとして予約され、モデルは他の n – 1 個の観測を使用して学習させる
n 個のコンパクトな学習済みモデルを、交差検証済みモデルの
Trainedプロパティに含まれている n 行 1 列の cell ベクトルのセルに格納する。
交差検証済みモデルを作成するために使用できるオプションは、CVPartition、Holdout、KFold、Leaveout のいずれかのみです。
メモ
線形分類モデル学習器またはカーネル分類モデル学習器から構成される ECOC モデルの交差検証では、Leave-one-out は推奨されません。
例: 'Leaveout','on'
その他の分類オプション
カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。
| 値 | 説明 |
|---|---|
| 正の整数のベクトル | ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~
|
| logical ベクトル |
|
| 文字行列 | 行列の各行は予測子変数の名前です。名前は 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' |
これらが真の場合は、並列プールと同じサイズの cell 配列を使用します。並列プールが開いていない場合、1 つ (設定に依存) が開かれます。 |
'UseParallel' | Parallel Computing Toolbox を保有している場合、 デュアルコア以上のシステムの場合、バイナリ学習器について決定木を使用すると、 |
'UseSubstreams' | 'Streams' で指定されたストリームを使用して計算する場合は true に設定します。既定値は false です。たとえば、Streams を'mlfg6331_64' または 'mrg32k3a' といったサブストリームを許可するタイプに設定します。 |
確実に結果を予測しやすくなるベスト プラクティスは、parpool (Parallel Computing Toolbox) を使用し、fitcecoc によって並列計算を呼び出す前に並列プールを明示的に生成します。
例: 'Options',statset('UseParallel',true)
データ型: struct
予測子変数名。一意な名前の string 配列または一意な文字ベクトルの cell 配列として指定します。PredictorNames の機能は、学習データの提供方法によって決まります。
XとYを指定した場合、PredictorNamesを使用してX内の予測子変数に名前を割り当てることができます。PredictorNames内の名前の順序は、Xの列の順序に一致しなければなりません。つまり、PredictorNames{1}はX(:,1)の名前、PredictorNames{2}はX(:,2)の名前であり、他も同様です。また、size(X,2)とnumel(PredictorNames)は等しくなければなりません。既定では
PredictorNamesは{'x1','x2',...}です。
Tblを指定する場合、PredictorNamesを使用して学習に使用する予測子変数を選択できます。つまり、fitcecocは、学習中にPredictorNamesの予測子変数と応答変数のみを使用します。PredictorNamesはTbl.Properties.VariableNamesのサブセットでなければならず、応答変数の名前を含めることはできません。既定では、すべての予測子変数の名前が
PredictorNamesに格納されます。PredictorNamesとformulaの両方ではなく、いずれか一方を使用して学習用の予測子を指定することをお勧めします。
例: "PredictorNames",["SepalLength","SepalWidth","PetalLength","PetalWidth"]
データ型: string | cell
各クラスの事前確率。'Prior' と次の表の値から構成されるコンマ区切りのペアとして指定します。
| 値 | 説明 |
|---|---|
'empirical' | クラスの事前確率は、Y のクラスの相対的頻度です。 |
'uniform' | クラスの事前確率はいずれも 1/K (K はクラス数) となります。 |
| 数値ベクトル | 各要素はクラスの事前確率です。Mdl.ClassNames に従って要素を並べ替えるか、ClassNames 名前と値のペアの引数を使用して順序を指定します。要素は合計が 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 スカラーを指定しなければなりません。たとえば、重みベクトル W が Tbl.W として格納されている場合、"W" として指定します。それ以外の場合、モデルに学習をさせるときに、Tbl の列は W を含めてすべて予測子または応答として扱われます。
既定の設定では、Weights は ones( です。n,1)n は X または 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 では、以下のパラメーターを使用できます。
Coding—fitcecocは"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 を渡します。
既定では、コマンド ラインに反復表示が表示され、最適化のハイパーパラメーターの個数に従ってプロットが表示されます。最適化とプロットにおける目的関数は誤分類率です。反復表示を制御するには、名前と値の引数 HyperparameterOptimizationOptions の Verbose オプションを設定します。プロットを制御するには、名前と値の引数 HyperparameterOptimizationOptions の ShowPlots フィールドを設定します。
たとえば、ECOC 分類器の最適化を参照してください。
例: "OptimizeHyperparameters","auto"
最適化のオプション。HyperparameterOptimizationOptions オブジェクトまたは構造体として指定します。この引数を指定すると、名前と値の引数 OptimizeHyperparameters の効果が変化します。HyperparameterOptimizationOptions を指定する場合、OptimizeHyperparameters も指定しなければなりません。オプションはいずれも任意です。ただし、AggregateOptimizationResults を返すには ConstraintBounds と ConstraintType を設定しなければなりません。構造体で設定できるオプションは HyperparameterOptimizationOptions オブジェクトと同じです。
| オプション | 値 | 既定の設定 |
|---|---|---|
Optimizer |
| "bayesopt" |
ConstraintBounds | N 個の最適化問題の制約範囲。N 行 2 列の数値行列または | [] |
ConstraintTarget | 最適化問題の制約ターゲット。 | ConstraintBounds と ConstraintType を指定する場合の既定値は "matlab" です。そうでない場合、既定値は [] となります。 |
ConstraintType | 最適化問題の制約タイプ。 | [] |
AcquisitionFunctionName | 獲得関数のタイプ:
目的関数の実行時に最適化が決まるので、名前に | "expected-improvement-per-second-plus" |
MaxObjectiveEvaluations | 目的関数評価の最大数。ConstraintBounds を使用して最適化問題を複数指定する場合、MaxObjectiveEvaluations の値は各最適化問題に個別に適用されます。 |
|
MaxTime | 最適化の制限時間。非負の実数スカラーとして指定します。制限時間の単位は、 | Inf |
NumGridDivisions | Optimizer="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 | コマンド ラインにおける表示レベル:
詳細については、 | 1 |
UseParallel | ベイズ最適化を並列実行するかどうかを示す logical 値。並列実行には Parallel Computing Toolbox が必要です。並列でのタイミングに再現性がないため、並列ベイズ最適化で再現性のある結果が生成されるとは限りません。詳細については、並列ベイズ最適化を参照してください。 | false |
Repartition | 反復ごとに交差検証を再分割するかどうかを示す論理値。このオプションが 分割ノイズが考慮されるので、通常は値を | false |
| 次の 3 つのオプションのいずれか 1 つのみを指定してください。 | ||
CVPartition | cvpartition によって作成された cvpartition オブジェクト | 交差検証オプションが指定されていない場合は Kfold=5 |
Holdout | ホールドアウトの比率を表す範囲 (0,1) のスカラー | |
Kfold | 1 より大きい整数 | |
例: HyperparameterOptimizationOptions=struct(UseParallel=true)
出力引数
学習済みの ECOC 分類器。ClassificationECOC モデル オブジェクト、CompactClassificationECOC モデル オブジェクト、ClassificationPartitionedECOC 交差検証済みモデル オブジェクト、ClassificationPartitionedLinearECOC 交差検証済みモデル オブジェクト、または ClassificationPartitionedKernelECOC 交差検証済みモデル オブジェクトとして返されます。
OptimizeHyperparameters を指定して HyperparameterOptimizationOptions の ConstraintType オプションと ConstraintBounds オプションを設定している場合、Mdl はモデル オブジェクトの N 行 1 列の cell 配列になります。ここで、N は ConstraintBounds の行数と等しくなります。いずれの最適化問題からも実行可能なモデルが得られない場合、cell 配列の各値が [] になります。
次の表は、指定されたバイナリ学習器のタイプ、および交差検証を実行するかどうかに応じて、fitcecoc がどのタイプのモデル オブジェクトを返すかを示しています。
| 線形分類モデル学習器 | カーネル分類モデル学習器 | 交差検証 | 返されるモデル オブジェクト |
|---|---|---|---|
| なし | なし | なし | ClassificationECOC |
| なし | なし | あり | ClassificationPartitionedECOC |
| あり | なし | なし | CompactClassificationECOC |
| あり | なし | あり | ClassificationPartitionedLinearECOC |
| なし | あり | なし | CompactClassificationECOC |
| なし | あり | あり | ClassificationPartitionedKernelECOC |
ハイパーパラメーターの交差検証最適化の説明。BayesianOptimization オブジェクト、AggregateBayesianOptimization オブジェクト、またはハイパーパラメーターと関連する値の table として返されます。
名前と値の引数 OptimizeHyperparameters が空以外で、次の条件のいずれかに該当する場合、HyperparameterOptimizationResults は空以外になります。
Learnersの値が"linear"または"kernel"。名前と値の引数
HyperparameterOptimizationOptionsのConstraintTypeオプションとConstraintBoundsオプションが空以外。
ConstraintType と ConstraintBounds を指定している場合、HyperparameterOptimizationResults は AggregateBayesianOptimization オブジェクトになります。それ以外の場合、HyperparameterOptimizationResults の値は HyperparameterOptimizationOptions の Optimizer オプションの値によって異なります。
"bayesopt"(既定) —BayesianOptimizationクラスのオブジェクト"gridsearch"または"randomsearch"— 使用したハイパーパラメーター、観測された目的関数の値 (交差検証損失)、および最小 (最良) から最大 (最悪) までの観測値の順位が格納されている table
制限
fitcecocは、線形分類モデルの学習のみについてスパース行列をサポートします。他のすべてのモデルの場合、代わりに予測子データの完全な行列を指定します。
詳細
"誤り訂正出力符号 (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 モデルは他のマルチクラス モデルと比較して分類精度を向上させることができます[2]。
"符号化設計" は、各バイナリ学習器がどのクラスを学習したのかを要素が指示する行列です。つまり、マルチクラス問題がどのように一連のバイナリ問題にされたのかを示します。
符号化設計の各行は各クラスに対応し、各列はバイナリ学習器に対応します。三項符号化設計では、特定の列 (バイナリ学習器) に対して以下が実行されます。
1 が含まれている行の場合、対応するクラスの観測値をすべて陽性クラスにグループ化するようバイナリ学習器に指示します。
–1 が含まれている行の場合、対応するクラスの観測値をすべて陰性クラスにグループ化するようバイナリ学習器に指示します。
0 が含まれている行の場合、対応するクラスの観測値をすべて無視するようバイナリ学習器に指示します。
ハミング尺度に基づく行の最小ペアワイズ距離が大きい符号化設計行列が最適です。行のペアワイズ距離の詳細については、ランダム符号化設計行列および[3]を参照してください。
次の表は一般的な符号化設計について説明しています。
| 符号化設計 | 説明 | 学習器の数 | 行の最小ペアワイズ距離 |
|---|---|---|---|
| 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) と比較します。

ヒント
バイナリ学習器の数はクラス数とともに増加します。多数のクラスがある問題では、符号化設計
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、0、または 1 である。
すべての列に –1 および 1 が少なくとも 1 つずつ含まれている。
すべての列ベクトル u と v のそれぞれについて、u ≠ v かつ u ≠ –v である。
すべての行ベクトルが一意である。
行列は任意の 2 つのクラスを分離できます。つまり、任意の行から他の任意の行に次のルールに従って移動できる。
1 から –1 または –1 から 1 に垂直方向に移動。
非ゼロ要素から別の非ゼロ要素に水平方向に移動。
垂直方向の移動に行列の列を一度だけ使用。
上記のルールを使用して、行 i から行 j に移動できない場合、クラス i および j は計画により分離できません。たとえば、次の符号化設計ではクラス 1 および 2 をクラス 3 および 4 から分離できません。
2 行目の 2 列目に 0 があるので、2 行目の –1 を 2 列目に水平に移動できません。したがって、この符号化設計は拒否されます。
並列計算を使用する場合 (Options を参照)、fitcecoc はバイナリ学習器を並列して学習させます。
名前と値の引数 Cost、Prior、および Weights を指定すると、出力モデル オブジェクトに Cost、Prior、および W の各プロパティの指定値がそれぞれ格納されます。Cost プロパティには、ユーザー指定のコスト行列がそのまま格納されます。Prior プロパティと W プロパティには、正規化後の事前確率と観測値の重みがそれぞれ格納されます。詳細については、誤分類コスト行列、事前確率、および観測値の重みを参照してください。
各バイナリ学習器について、ソフトウェアは、事前確率を 2 要素のベクトルに正規化し、コスト行列を 2 行 2 列の行列に正規化します。その後、2 行 2 列のコスト行列で指定されているペナルティを組み込むことで事前確率ベクトルを調整し、コスト行列を既定のコスト行列に設定します。Mdl のバイナリ学習器 (Mdl.BinaryLearners) の Cost プロパティと Prior プロパティに調整後の値が格納されます。具体的には、以下の手順が実行されます。
各バイナリ学習器に指定されたクラス事前確率 (
Prior) が正規化されます。M は符号化設計行列であり、I(A,c) は指標行列であると仮定します。指標行列の次元数は A と同じです。指標行列の要素は、対応する A の要素が c の場合は 1、それ以外の場合は 0 になります。M+1 および M-1 は、次の条件を満たす K 行 L 列の行列と仮定します。M+1 = M○I(M,1)、ここで ○ は要素単位の乗算です (つまり、
Mplus = M.*(M == 1))。また、M+1 の列ベクトル l を と表します。M-1 = -M○I(M,-1) (つまり、
Mminus = -M.*(M == -1))。また、M-1 の列ベクトル l を と表します。
および と表します。ここで、π はクラスについて指定した事前確率のベクトル (
Prior) です。すると、バイナリ学習器 l について正および負のスカラーのクラス事前確率は次のようになります。
ここで、j = {-1,1} です。 は a の 1 ノルムです。
各バイナリ学習器の K 行 K 列のコスト行列 C (
Cost) が正規化されます。バイナリ学習器 l で陰性クラスの観測値を陽性クラスに分類するコストは次のようになります。同様に、陽性クラスの観測値を陰性クラスに分類するコストは次のようになります。
バイナリ学習器 l のコスト行列は次のようになります。
ECOC モデルは誤分類のコストをクラス事前確率に組み込むことで対応します。次のようにして、バイナリ学習器のクラス事前確率が調整され、コスト行列が既定のコスト行列に設定されます。
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 個の行列が無作為に生成されます。次によって与えられるハミング尺度 ([3]) に基づき、行の最小ペアワイズ距離が最大になる行列が保持されます。
ここで、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] 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.
拡張機能
fitcecoc 関数は、tall 配列を次の使用上の注意および制限付きでサポートします。
以下の構文がサポートされます。
Mdl = fitcecoc(X,Y)Mdl = fitcecoc(X,Y,Name,Value)[Mdl,FitInfo,HyperparameterOptimizationResults] = fitcecoc(X,Y,Name,Value)— 名前と値のペアの引数'OptimizeHyperparameters'が指定された場合、fitcecocは追加の出力引数FitInfoおよびHyperparameterOptimizationResultsを返します。
出力引数
FitInfoは、現在は将来の使用のために予約されている空の構造体配列です。交差検証に関連するオプションはサポートされていません。以下の名前と値のペアの引数がサポートされます。
'ClassNames''Cost''Coding'— 既定値は'onevsall'です。'HyperparameterOptimizationOptions'— 交差検証として、tall 最適化では'Holdout'検証のみがサポートされます。既定では、データの 20% がホールドアウト検証データとして選択されて確保され、残りのデータがモデルの学習に使用されます。この引数を使用してホールドアウトの比率に別の値を指定できます。たとえば、データの 30% を検証データとして確保するには'HyperparameterOptimizationOptions',struct('Holdout',0.3)と指定します。'Learners'— 既定値は'linear'です。'linear'、'kernel'、templateLinearオブジェクト、templateKernelオブジェクト、またはこれらのオブジェクトの cell 配列を指定できます。'OptimizeHyperparameters'— 線形バイナリ学習器を使用する場合、ハイパーパラメーター'Regularization'の値は'ridge'でなければなりません。'Prior''Verbose'— 既定値は1です。'Weights'
以下は、tall 配列専用の追加の名前と値のペアの引数です。
'NumConcurrent'— ファイル I/O 操作を結合することにより並列的に学習をさせるバイナリ学習器の個数を指定する正の整数スカラー。'NumConcurrent'の既定値は1であり、これはfitcecocがバイナリ学習器に逐次的に学習させることを意味します。'NumConcurrent'は、分散クラスター メモリに入力配列が収まらない場合に最も有益です。それ以外の場合は、入力配列をキャッシュできるので、高速化を無視できます。Apache® Spark™ で独自のコードを実行する場合、通信に使用できるメモリによって
NumConcurrentの上限が制限されます。使用している Apache Spark の構成の'spark.executor.memory'および'spark.driver.memory'プロパティをチェックしてください。詳細は、parallel.cluster.Hadoop(Parallel Computing Toolbox)を参照してください。Apache Spark、およびコードの実行場所を制御する他の実行環境の詳細については、他の製品による tall 配列の拡張を参照してください。
詳細は、tall 配列を参照してください。
並列実行するには、次のいずれかの方法で 'UseParallel' オプションを true に設定します。
statsetを使用してオプション構造体の'UseParallel'オプションをtrueに設定し、fitceocを呼び出すときに名前と値のペアの引数'Options'を指定します。たとえば、次のようにします。
'Options',statset('UseParallel',true)詳細は、名前と値のペアの引数
'Options'を参照してください。fitceocを呼び出すときに名前と値のペアの引数HyperparameterOptimizationOptionsでUseParallel=trueオプションを使用することにより、ハイパーパラメーターの最適化を並列実行します。並列的なハイパーパラメーターの最適化の詳細については、並列ベイズ最適化を参照してください。
並列計算の全般的な情報については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
使用上の注意および制限:
名前と値の引数
Learnersは、次の表で指定されている学習器のいずれかの値としてのみ指定できます。学習器 テンプレート オブジェクト作成関数 gpuArrayのサポート"svm"templateSVMGPU 配列 ( fitcsvmの場合)"ensemble"templateEnsembleGPU 配列 ( fitcensembleの場合)"knn"templateKNNGPU 配列 ( fitcknnの場合)"linear"templateLinearGPU 配列 ( fitclinearの場合)"tree"templateTreeGPU 配列 ( fitctreeの場合)
詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2014b で導入HyperparameterOptimizationOptions に UseParallel=true が含まれている場合にソフトウェアで並列プールを開けないと、fitcecoc は既定で逐次計算を実行します。
以前のリリースでは、このような状況でソフトウェアからエラーが発行されます。
fitcecoc に gpuArray 入力を渡すときに、線形学習器とアンサンブル学習器を指定できるようになりました。
fitcecoc では、アンサンブル バイナリ学習器を使用するときにハイパーパラメーターの最適化がサポートされます。Learners の値が "ensemble" であるか、関数 templateEnsemble を使用して作成されたアンサンブル テンプレートである場合に、名前と値の引数 OptimizeHyperparameters を指定できます。
アンサンブル バイナリ学習器を使用してハイパーパラメーターの最適化を実行する場合、アンサンブル法は
"AdaBoostM1"、"GentleBoost"、または"LogitBoost"でなければならず、アンサンブルの弱学習器は木でなければなりません。値
"ensemble"は、適応ロジスティック回帰集約法 (LogitBoost)、100 学習サイクル、木弱学習器を使用するアンサンブルに対応します。
fitcecoc でアンサンブル バイナリ学習器を使用してベイズ最適化を実行する場合、MaxObjectiveEvaluations に使用される既定値は 70 です。詳細については、HyperparameterOptimizationOptions を参照してください。
関数 hyperparameters を使用して、アンサンブル バイナリ学習器に対する使用可能なハイパーパラメーターと既定のハイパーパラメーターを確認できます。さらに、この関数を使用してハイパーパラメーターとその範囲を調整できます。"fitcecoc" を近似関数の名前として指定し、"ensemble" またはアンサンブル テンプレートを学習器タイプとして指定します。
R2023b 以降では、Learners の値として "kernel"、"knn"、または "svm" を指定し、OptimizeHyperparameters の値として "auto" を指定した場合、fitcecoc には最適化可能なハイパーパラメーターとして Standardize が含まれます。
R2022a 以降では、線形バイナリ学習器 ('linear' または templateLinear) をもつ ECOC モデルのハイパーパラメーターを最適化するように指定した場合に、特定のソルバーを使用するように指定しないと、最適化プロセスの各反復で選択された正則化タイプに応じて、メモリ制限 BFGS (LBFGS) ソルバーまたは可分近似によるスパース再構成 (SpaRSA) ソルバーのいずれかが fitcecoc で使用されます。
Regularizationが'ridge'の場合、Solverの値は既定では'lbfgs'に設定されます。Regularizationが'lasso'の場合、Solverの値は既定では'sparsa'に設定されます。
以前のリリースでは、ハイパーパラメーターの最適化での既定のソルバーの選択には、正則化タイプ、学習器タイプ、予測子の数など、さまざまな要因が関係していました。詳細については、Solver を参照してください。
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)