このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
マルチクラス誤り訂正出力符号 (ECOC) モデルを使用して観測値を分類
は、1 つ以上の名前と値のペアの引数によって指定された追加オプションを使用します。たとえば、事後確率の推定法、復号化方式、詳細レベルなどを指定できます。label
= predict(Mdl
,X
,Name,Value
)
フィッシャーのアヤメのデータセットを読み込みます。予測子データ X
、応答データ Y
、および Y
内のクラスの順序を指定します。
load fisheriris X = meas; Y = categorical(species); classOrder = unique(Y); rng(1); % For reproducibility
SVM バイナリ分類器を使用して ECOC モデルを学習させます。30% のホールドアウト標本を指定し、SVM テンプレートを使用して予測子を標準化し、クラスの順序を指定します。
t = templateSVM('Standardize',true); PMdl = fitcecoc(X,Y,'Holdout',0.30,'Learners',t,'ClassNames',classOrder); Mdl = PMdl.Trained{1}; % Extract trained, compact classifier
PMdl
は ClassificationPartitionedECOC
モデルです。これには Trained
プロパティが含まれています。これは、学習セットを使用して学習をさせた CompactClassificationECOC
モデルが格納されている、1 行 1 列の cell 配列です。
検定標本ラベルを予測します。真のラベルと予測されたラベルのランダムなサブセットを印刷します。
testInds = test(PMdl.Partition); % Extract the test indices XTest = X(testInds,:); YTest = Y(testInds,:); labels = predict(Mdl,XTest); idx = randsample(sum(testInds),10); table(YTest(idx),labels(idx),... 'VariableNames',{'TrueLabels','PredictedLabels'})
ans=10×2 table
TrueLabels PredictedLabels
__________ _______________
setosa setosa
versicolor virginica
setosa setosa
virginica virginica
versicolor versicolor
setosa setosa
virginica virginica
virginica virginica
setosa setosa
setosa setosa
Mdl
は、インデックス idx
をもつ検定標本観測値の 1 つを除くすべてに対して正しいラベルを付けました。
フィッシャーのアヤメのデータセットを読み込みます。予測子データ X
、応答データ Y
、および Y
内のクラスの順序を指定します。
load fisheriris X = meas; Y = categorical(species); classOrder = unique(Y); % Class order rng(1); % For reproducibility
SVM バイナリ分類器を使用して ECOC モデルを学習させます。30% のホールドアウト標本を指定します。SVM テンプレートを使用して予測子を標準化し、クラスの順序を指定します。
t = templateSVM('Standardize',true); PMdl = fitcecoc(X,Y,'Holdout',0.30,'Learners',t,'ClassNames',classOrder); Mdl = PMdl.Trained{1}; % Extract trained, compact classifier
PMdl
は ClassificationPartitionedECOC
モデルです。これには Trained
プロパティが含まれています。これは、学習セットを使用して学習をさせた CompactClassificationECOC
モデルが格納されている、1 行 1 列の cell 配列です。
SVM スコアは観測から判定境界までの符号付き距離です。したがって、 が定義域です。以下を行うカスタム バイナリ損失関数を作成します。
各学習器の符号化設計行列 (M) と陽性クラスの分類スコア (s) を各観測値のバイナリ損失にマッピングする。
線形損失を使用する。
中央値を使用してバイナリ学習器の損失を集計する。
バイナリ損失関数用に独立した関数を作成し、MATLAB® パスに保存できます。あるいは、無名バイナリ損失関数を指定できます。この場合、無名バイナリ損失関数に対する関数ハンドル (customBL
) を作成します。
customBL = @(M,s) median(1 - bsxfun(@times,M,s),2,'omitnan')/2;
検定標本ラベルを予測し、クラスごとの中央値のバイナリ損失を推定します。10 件の検定標本観測の無作為なセットでは、クラスごとに中央値の負のバイナリ損失を出力します。
testInds = test(PMdl.Partition); % Extract the test indices XTest = X(testInds,:); YTest = Y(testInds,:); [label,NegLoss] = predict(Mdl,XTest,'BinaryLoss',customBL); idx = randsample(sum(testInds),10); classOrder
classOrder = 3x1 categorical
setosa
versicolor
virginica
table(YTest(idx),label(idx),NegLoss(idx,:),'VariableNames',... {'TrueLabel','PredictedLabel','NegLoss'})
ans=10×3 table
TrueLabel PredictedLabel NegLoss
__________ ______________ __________________________________
setosa versicolor 0.18569 1.989 -3.6747
versicolor virginica -1.3316 -0.12346 -0.044933
setosa versicolor 0.13897 1.9274 -3.5664
virginica virginica -1.5133 -0.38288 0.39616
versicolor versicolor -0.87209 0.74813 -1.376
setosa versicolor 0.4838 1.9987 -3.9825
virginica virginica -1.9363 -0.67586 1.1122
virginica virginica -1.5789 -0.8337 0.91265
setosa versicolor 0.50999 2.1223 -4.1323
setosa versicolor 0.36117 2.0608 -3.922
列の順序は classOrder
の要素に対応します。符号が反転した最大損失に基づき、ラベルが予測されます。この結果は、線形損失の中央値が他の損失ほどは効果的に機能しないことを示しています。
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 = 3x1 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.0039322 0.003987 0.99208
{'virginica' } {'virginica' } 0.017067 0.018263 0.96467
{'virginica' } {'virginica' } 0.014948 0.015856 0.9692
{'versicolor'} {'versicolor'} 2.2197e-14 0.87318 0.12682
{'setosa' } {'setosa' } 0.999 0.00025092 0.00074638
{'versicolor'} {'virginica' } 2.2195e-14 0.05943 0.94057
{'versicolor'} {'versicolor'} 2.2194e-14 0.97001 0.029985
{'setosa' } {'setosa' } 0.999 0.00024991 0.0007474
{'versicolor'} {'versicolor'} 0.0085642 0.98259 0.0088487
{'setosa' } {'setosa' } 0.999 0.00025013 0.00074717
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
マルチクラス ECOC モデルに学習をさせ、並列計算を使用して事後確率を推定します。
arrhythmia
データセットを読み込みます。応答データ Y
を確認して、クラス数を決定します。
load arrhythmia
Y = categorical(Y);
tabulate(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%
K = numel(unique(Y));
いくつかのクラスはデータに表れません。また、他の多くのクラスでは相対的頻度が低くなります。
GentleBoost 法と 50 個の分類木弱学習器を使用するアンサンブル学習テンプレートを指定します。
t = templateEnsemble('GentleBoost',50,'Tree');
t
はテンプレート オブジェクトです。ほとんどのプロパティは空 ([]
) です。学習時は、すべての空のプロパティに対して既定値が使用されます。
応答変数には多数のクラスが含まれているので、スパースなランダム符号化設計を指定します。
rng(1); % For reproducibility Coding = designecoc(K,'sparserandom');
並列計算を使用する ECOC モデルを学習させます。15% のホールドアウト標本を指定し、事後確率をあてはめます。
pool = parpool; % Invokes workers
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 6).
options = statset('UseParallel',true); PMdl = fitcecoc(X,Y,'Learner',t,'Options',options,'Coding',Coding,... 'FitPosterior',true,'Holdout',0.15); Mdl = PMdl.Trained{1}; % Extract trained, compact classifier
PMdl
は ClassificationPartitionedECOC
モデルです。これには Trained
プロパティが含まれています。これは、学習セットを使用して学習をさせた CompactClassificationECOC
モデルが格納されている、1 行 1 列の cell 配列です。
このプールでは 6 つのワーカーが起動しましたが、ワーカー数はシステムによって異なる可能性があります。
事後確率を推定し、検定標本観測値からの無作為なセットを与えられたデータで、不整脈 (クラス1) がないと分類された事後確率を表示します。
testInds = test(PMdl.Partition); % Extract the test indices XTest = X(testInds,:); YTest = Y(testInds,:); [~,~,~,posterior] = predict(Mdl,XTest,'Options',options); idx = randsample(sum(testInds),10); table(idx,YTest(idx),posterior(idx,1),... 'VariableNames',{'TestSampleIndex','TrueLabel','PosteriorNoArrhythmia'})
ans=10×3 table
TestSampleIndex TrueLabel PosteriorNoArrhythmia
_______________ _________ _____________________
11 6 0.60631
41 4 0.23674
51 2 0.13802
33 10 0.43831
12 1 0.94332
8 1 0.97278
37 1 0.62807
24 10 0.96876
56 16 0.29375
30 1 0.64512
Mdl
— 完全またはコンパクトなマルチクラス ECOC モデルClassificationECOC
モデル オブジェクト | CompactClassificationECOC
モデル オブジェクト完全またはコンパクトなマルチクラス ECOC モデル。ClassificationECOC
または CompactClassificationECOC
モデル オブジェクトを指定します。
完全またはコンパクトな ECOC モデルを作成する方法については、ClassificationECOC
または CompactClassificationECOC
を参照してください。
X
— 分類対象の予測子データ分類対象の予測子データ。数値行列またはテーブルを指定します。
既定では、X
の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。
数値行列の場合
X
の列を構成する変数の順序は、Mdl
に学習させた予測子変数の順序と同じでなければなりません。
table (たとえば Tbl
) を使用して Mdl
に学習をさせる場合、Tbl
に含まれている予測子変数がすべて数値変数であれば、X
を数値行列にすることができます。学習時に Tbl
内の数値予測子をカテゴリカルとして扱うには、fitcecoc
の名前と値のペアの引数 CategoricalPredictors
を使用してカテゴリカル予測子を同定します。Tbl
に種類の異なる予測子変数 (数値および categorical データ型など) が混在し、X
が数値行列である場合、predict
でエラーがスローされます。
テーブルの場合
predict
は、文字ベクトルの cell 配列ではない cell 配列と複数列の変数をサポートしません。
table (たとえば Tbl
) を使用して Mdl
に学習をさせた場合、X
内のすべての予測子変数は変数名およびデータ型が、Mdl
に学習させた (Mdl.PredictorNames
に格納されている) 予測子変数と同じでなければなりません。ただし、X
の列の順序が Tbl
の列の順序に対応する必要はありません。Tbl
と X
の両方に追加の変数 (応答変数や観測値の重みなど) を含めることができますが、predict
はこれらを無視します。
数値行列を使用して Mdl
に学習をさせる場合、Mdl.PredictorNames
内の予測子名と X
内の対応する予測子変数名が同じでなければなりません。学習時に予測子の名前を指定する方法については、fitcecoc
の名前と値のペアの引数 PredictorNames
を参照してください。X
内の予測子変数はすべて数値ベクトルでなければなりません。X
に追加の変数 (応答変数や観測値の重みなど) を含めることができますが、predict
はこれらを無視します。
メモ
Mdl.BinaryLearners
が線形分類モデル (ClassificationLinear
) をもつ場合、観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns'
を指定することができます。ただし、'ObservationsIn','columns'
をテーブル内の予測子データに指定することはできません。
Mdl
に学習をさせるときに、fitcecoc
の名前と値のペアの引数 'Learners'
で指定したテンプレート オブジェクトについて 'Standardize',true
を設定したとします。この場合、対応するバイナリ学習器 j
について、対応する Mdl.BinaryLearner{j}.Mu
内の平均および Mdl.BinaryLearner{j}.Sigma
内の標準偏差を使用して、新しい予測子データの列が標準化されます。
データ型: table
| double
| single
オプションの Name,Value
引数のコンマ区切りペアを指定します。Name
は引数名で、Value
は対応する値です。Name
は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN
のように、複数の名前と値のペアの引数を、任意の順番で指定できます。
predict(Mdl,X,'BinaryLoss','quadratic','Decoding','lossbased')
は、バイナリ学習器の損失関数として 2 次関数を使用し、損失に基づく復号化方式をバイナリ損失の集計に使用するよう指定します。'BinaryLoss'
— バイナリ学習器損失関数'hamming'
| 'linear'
| 'logit'
| 'exponential'
| 'binodeviance'
| 'hinge'
| 'quadratic'
| 関数ハンドルバイナリ学習器の損失関数。'BinaryLoss'
と組み込みの損失関数名または関数ハンドルから構成されるコンマ区切りのペアとして指定します。
次の表で、組み込み関数について説明します。ここで、yj は特定のバイナリ学習器のクラス ラベル (集合 {–1,1,0} 内)、sj は観測値 j のスコア、g(yj,sj) はバイナリ損失の式です。
値 | 説明 | スコア領域 | g(yj,sj) |
---|---|---|---|
'binodeviance' | 二項分布からの逸脱度 | (–∞,∞) | log[1 + exp(–2yjsj)]/[2log(2)] |
'exponential' | 指数 | (–∞,∞) | exp(–yjsj)/2 |
'hamming' | ハミング | [0,1] または (–∞,∞) | [1 – sign(yjsj)]/2 |
'hinge' | ヒンジ | (–∞,∞) | max(0,1 – yjsj)/2 |
'linear' | 線形 | (–∞,∞) | (1 – yjsj)/2 |
'logit' | ロジスティック | (–∞,∞) | log[1 + exp(–yjsj)]/[2log(2)] |
'quadratic' | 2 次 | [0,1] | [1 – yj(2sj – 1)]2/2 |
バイナリ損失は、yj = 0 の場合に損失が 0.5 になるように正規化されます。また、各クラスについて平均のバイナリ損失が計算されます。
カスタム バイナリ損失関数の場合は関数ハンドルを指定します。たとえば、customFunction
の場合は 'BinaryLoss',@customFunction
を指定します。
customFunction
の形式は次のとおりです。
bLoss = customFunction(M,s)
M
は Mdl.CodingMatrix
に格納された K 行 L 列のコーディング行列です。
s
は、1 行 L 列の分類スコアの行ベクトルです。
bLoss
は分類損失です。このスカラーは、特定のクラスのすべての学習器についてバイナリ損失を集計します。たとえば、平均バイナリ損失を使用して、各クラスの学習器の損失を集計できます。
K は、クラスの数です。
L は、バイナリ学習器の数です。
カスタムなバイナリ損失関数を渡す例については、カスタム バイナリ損失関数の使用による ECOC モデルの検定標本ラベルの予測を参照してください。
BinaryLoss
の既定値は、バイナリ学習器が返すスコアの範囲によって異なります。次の表で、特定の仮定に基づく BinaryLoss
の既定値について説明します。
仮定 | 既定値 |
---|---|
すべてのバイナリ学習器が SVM であるか、SVM 学習器の線形またはカーネル分類モデルである。 | 'hinge' |
すべてのバイナリ学習器が、AdaboostM1 または GentleBoost によって学習をさせたアンサンブルである。 | 'exponential' |
すべてのバイナリ学習器が、LogitBoost によって学習をさせたアンサンブルである。 | 'binodeviance' |
すべてのバイナリ学習器が、ロジスティック回帰学習器の線形またはカーネル分類モデルである。または、fitcecoc で 'FitPosterior',true を設定して、クラスの事後確率を予測するよう指定した。 | 'quadratic' |
既定値を確認するには、コマンド ラインでドット表記を使用して学習済みモデルの BinaryLoss
プロパティを表示します。
例: 'BinaryLoss','binodeviance'
データ型: char
| string
| function_handle
'Decoding'
— 復号化スキーム'lossweighted'
(既定値) | 'lossbased'
バイナリ損失を集計する復号化方式。'Decoding'
と 'lossweighted'
または 'lossbased'
から構成されるコンマ区切りのペアとして指定します。詳細は、バイナリ損失を参照してください。
例: 'Decoding','lossbased'
'NumKLInitializations'
— ランダムな初期値の数0
(既定値) | 非負の整数スカラーカルバック・ライブラー ダイバージェンスの最小化により事後確率をあてはめるためのランダムな初期値の個数。'NumKLInitializations'
と非負の整数スカラーから構成されるコンマ区切りのペアとして指定します。
4 番目の出力引数 (Posterior
) を要求せず、'PosteriorMethod','kl'
(既定の設定) を設定する場合、NumKLInitializations
の値は無視されます。
詳細は、カルバック・ライブラー ダイバージェンスを使用する事後推定を参照してください。
例: 'NumKLInitializations',5
データ型: single
| double
'ObservationsIn'
— 予測子データにおける観測値の次元'rows'
(既定値) | 'columns'
予測子データにおける観測値の次元。'ObservationsIn'
と 'columns'
または 'rows'
から構成されるコンマ区切りのペアとして指定します。Mdl.BinaryLearners
には ClassificationLinear
モデルが格納されていなければなりません。
メモ
観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns'
を指定すると、実行時間が大幅に短縮される可能性があります。table の予測子データに対して 'ObservationsIn','columns'
を指定することはできません。
'Options'
— 推定オプション[]
(既定値) | statset
によって返される構造体配列推定オプション。statset
により返される 'Options'
と構造体配列から構成されるコンマ区切りのペアとして指定します。
並列計算を起動するには、以下を行います。
Parallel Computing Toolbox™ ライセンスが必要です。
'Options',statset('UseParallel',true)
を指定します。
'PosteriorMethod'
— 事後確率推定法'kl'
(既定値) | 'qp'
事後確率推定法。'PosteriorMethod'
と 'kl'
または 'qp'
で構成されるコンマ区切りのペアとして指定します。
PosteriorMethod
が 'kl'
の場合、バイナリ学習器によって返される予測された事後確率と期待された事後確率間のカルバック・ライブラー ダイバージェンスを最小化することにより、マルチクラス事後確率が推定されます。詳細については、カルバック・ライブラー ダイバージェンスを使用する事後推定を参照してください。
PosteriorMethod
が 'qp'
の場合、二次計画法を使用して最小二乗問題を解決することでマルチクラス事後確率が推定されます。このオプションを使用するには Optimization Toolbox™ ライセンスが必要です。詳細については、二次計画法を使用する事後推定を参照してください。
4 番目の出力引数 (Posterior
) を要求しない場合、PosteriorMethod
の値は無視されます。
例: 'PosteriorMethod','qp'
'Verbose'
— 詳細レベル0
(既定値) | 1
詳細レベル。'Verbose'
と 0
または 1
から構成されるコンマ区切りのペアとして指定します。Verbose
は、コマンド ウィンドウに表示される診断メッセージの量を制御します。
Verbose
が 0
の場合、診断メッセージは表示されません。それ以外の場合は、診断メッセージが表示されます。
例: 'Verbose',1
データ型: single
| double
label
— 予測クラス ラベル予測クラス ラベル。categorical 配列、文字配列、logical 配列、数値配列、または文字ベクトルの cell 配列として返されます。符号を反転した最大の平均バイナリ損失 (つまり、最小の平均バイナリ損失と等しい) の発生するクラスに観測を割り当てることで、観測の分類が予測されます。
label
は、Mdl
の学習に使用したクラス ラベルと同じデータ型をもち、X
と同じ行数になります。(string 配列は文字ベクトルの cell 配列として扱われます)。
Mdl.BinaryLearners
に ClassificationLinear
モデルが含まれている場合、label
は m 行 L 列の行列になります。m は X
内の観測値の個数、L は、線形分類モデル内の正則化強度の個数 (numel(Mdl.BinaryLearners{1}.Lambda)
) です。値 label(i,j)
は、正則化強度 Mdl.BinaryLearners{1}.Lambda(j)
を使用して学習をさせたモデルの観測値 i
の予測ラベルです。
それ以外の場合、label
は長さが m の列ベクトルになります。
NegLoss
— 符号を反転した平均バイナリ損失符号を反転した平均バイナリ損失。数値行列または数値配列として返されます。
Mdl.BinaryLearners
に ClassificationLinear
モデルが格納されている場合、NegLoss
は m x K x L の配列になります。
m は X
内の観測値数です。
K は学習データ内の異なるクラスの個数 (numel(Mdl.ClassNames)
) です。
L は線形分類モデル内の正則化強度の個数 (numel(Mdl.BinaryLearners{1}.Lambda)
) です。
NegLoss(i,k,j)
は、観測値 i
の符号を反転した平均バイナリ損失であり、正則化強度 Mdl.BinaryLearners{1}.Lambda(j)
を使用して学習をさせたモデルのクラス Mdl.ClassNames(k)
に対応します。
それ以外の場合、NegLoss
は m 行 K 列の行列になります。
PBScore
— 陽性クラス スコア各バイナリ分類器の陽性クラスのスコア。数値行列または数値配列として返されます。
Mdl.BinaryLearners
に ClassificationLinear
モデルが格納されている場合、PBScore
は m x B x L の配列になります。
m は X
内の観測値数です。
B は、バイナリ学習器の個数 (numel(Mdl.BinaryLearners)
) です。
L は線形分類モデル内の正則化強度の個数 (numel(Mdl.BinaryLearners{1}.Lambda)
) です。
PBScore(i,b,j)
は、正則化強度 Mdl.BinaryLearners{1}.Lambda(j)
を使用して学習をさせたモデルにおける、バイナリ学習器 b
を使用した、観測値 i
に対する陽性クラスのスコアです。
それ以外の場合、PBScore
は m 行 B 列の行列になります。
Posterior
— 事後クラス確率事後クラス確率。数値行列または数値配列として返されます。
Mdl.BinaryLearners
に ClassificationLinear
モデルが格納されている場合、Posterior
は m x K x L の配列になります。次元の定義については、NegLoss
を参照してください。Posterior(i,k,j)
は、正則化強度 Mdl.BinaryLearners{1}.Lambda(j)
を使用して学習をさせたモデルにおいて観測値 i
がクラス Mdl.ClassNames(k)
から派生する事後確率です。
それ以外の場合、Posterior
は m 行 K 列の行列になります。
"バイナリ損失" は、バイナリ学習器がどの程度の精度で観測値をクラスに分類するかを判断する、クラスと分類スコアの関数です。
以下のように仮定します。
mkj は符号化設計行列 M の要素 (k,j)、つまりバイナリ学習器 j のクラス k に対応するコード。
sj は観測値に対するバイナリ学習器 j のスコア。
g はバイナリ損失関数。
は観測値の予測クラス。
"損失に基づく復号化" [Escalera 他] では、バイナリ学習器全体のバイナリ損失の和が最小になるクラスにより、観測値の予測クラスが決まります。つまり、次のようになります。
"損失に重みを付けた復号化" [Escalera 他] では、バイナリ学習器全体のバイナリ損失の平均が最小になるクラスにより、観測値の予測クラスが決まります。つまり、次のようになります。
Allwein 他によると、すべてのクラスで損失値が同じ動的範囲に収まるので、損失に重みを付けた復号化では分類精度が向上します。
次の表は、サポートされる損失関数をまとめています。ここで、yj は特定のバイナリ学習器のクラス ラベル (集合 {–1,1,0} 内)、sj は観測値 j のスコアであり、g(yj,sj) です。
値 | 説明 | スコア領域 | g(yj,sj) |
---|---|---|---|
'binodeviance' | 二項分布からの逸脱度 | (–∞,∞) | log[1 + exp(–2yjsj)]/[2log(2)] |
'exponential' | 指数 | (–∞,∞) | exp(–yjsj)/2 |
'hamming' | ハミング | [0,1] または (–∞,∞) | [1 – sign(yjsj)]/2 |
'hinge' | ヒンジ | (–∞,∞) | max(0,1 – yjsj)/2 |
'linear' | 線形 | (–∞,∞) | (1 – yjsj)/2 |
'logit' | ロジスティック | (–∞,∞) | log[1 + exp(–yjsj)]/[2log(2)] |
'quadratic' | 2 次 | [0,1] | [1 – yj(2sj – 1)]2/2 |
バイナリ損失は、yj = 0 のときに損失が 0.5 になるように正規化され、バイナリ学習器の平均を使用して集計されます [Allwein 他]。
ECOC 分類器の全体的な性能の尺度である全体の分類損失 (オブジェクト関数 loss
および predict
の名前と値のペアの引数 'LossFun'
により指定) とバイナリ損失を混同しないでください。
カルバック・ライブラー ダイバージェンスを最小化するか、二次計画法を使用することにより、クラス事後確率を推定できます。以下の事後推定アルゴリズムに関する説明では、次のように仮定します。
mkj は符号化設計行列 M の要素 (k,j) です。
I はインジケーター関数です。
は、ある観測値のクラス k (k = 1、...、K) に対するクラス事後確率の推定値です。
rj はバイナリ学習器 j の陽性クラス事後確率です。つまり、rj は、学習データが与えられる場合、バイナリ学習器 j が観測値を陽性クラスに分類する確率です。
既定では、カルバック・ライブラー ダイバージェンスは最小化され、クラス事後確率が推定されます。予測された陽性クラス事後確率と観測された陽性クラス事後確率の間のカルバック・ライブラー ダイバージェンスは次のようになります。
ここで、 はバイナリ学習器 j の重みです。
Sj は、バイナリ学習器 j が学習する一連の観測値のインデックスです。
は、観測値 i の重みです。
ダイバージェンスは反復して最小化されます。最初のステップとして、クラス事後確率の初期値 を選択します。
'NumKLIterations'
を指定しない場合、次の確定的な初期値の集合が両方試され、Δ を最小化する集合が選択されます。
は、次の連立方程式の解です。
ここで、M01 はすべての mkj = -1 を 0 に置き換えた M、r は L 個のバイナリ学習器によって返された陽性クラス事後確率のベクトルです [Dietterich 他]。lsqnonneg
を使いシステムを解きます。
'NumKLIterations',c
を指定した場合 (c
は自然数)、集合 は次のように選択され、Δ を最小化する集合が使用されます。
前述した確定的な初期値の集合の両方が試されます。
rand
を使用して長さ K のベクトル c
を無作為に生成し、各ベクトルの合計が 1 になるように正規化します。
反復 t では、以下の手順が実行されます。
を計算します。
次の式を使用して、次のクラスの事後確率を推定します。
合計が 1 になるように を正規化します。
収束を確認します。
詳細については、[Hastie 他] および [Zadrozny] を参照してください。
[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] Dietterich, T., and G. Bakiri. “Solving Multiclass Learning Problems Via Error-Correcting Output Codes.” Journal of Artificial Intelligence Research. Vol. 2, 1995, pp. 263–286.
[3] 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.
[4] Escalera, S., O. Pujol, and P. Radeva. “Separability of ternary codes for sparse designs of error-correcting output codes.” Pattern Recognition. Vol. 30, Issue 3, 2009, pp. 285–297.
[5] Hastie, T., and R. Tibshirani. “Classification by Pairwise Coupling.” Annals of Statistics. Vol. 26, Issue 2, 1998, pp. 451–471.
[6] Wu, T. F., C. J. Lin, and R. Weng. “Probability Estimates for Multi-Class Classification by Pairwise Coupling.” Journal of Machine Learning Research. Vol. 5, 2004, pp. 975–1005.
[7] Zadrozny, B. “Reducing Multiclass to Binary by Coupling Probability Estimates.” NIPS 2001: Proceedings of Advances in Neural Information Processing Systems 14, 2001, pp. 1041–1048.
使用上の注意事項および制限事項:
Mdl
にカーネルまたは線形のバイナリ学習器が含まれる場合、predict
は tall table
データをサポートしません。
詳細は、tall 配列を参照してください。
使用上の注意事項および制限事項:
コーダー コンフィギュアラーを使用して、predict
と update
の両方について C/C++ コードを生成できます。または、saveLearnerForCoder
、loadLearnerForCoder
、および codegen
を使用して predict
のコードのみを生成します。
predict
と update
に対するコード生成 — learnerCoderConfigurer
を使用してコーダー コンフィギュアラーを作成してから、generateCode
を使用してコードを生成します。これにより、生成されたコードのモデル パラメーターは、コードの再生成を必要としない更新が可能になります。
predict
のコード生成 — saveLearnerForCoder
を使用して、学習済みモデルを保存します。loadLearnerForCoder
を使用して保存済みモデルを読み込んで関数 predict
を呼び出す、エントリポイント関数を定義します。次に、codegen
(MATLAB Coder) を使用して、エントリポイント関数のコードを生成します。
predict
に対する単精度の C/C++ コードを生成することもできます。単精度コード生成では、関数 loadLearnerForCoder
への追加の入力として、名前と値のペアの引数 'DataType','single'
を指定します。
次の表は、predict
の引数に関する注意です。この表に含まれていない引数は、完全にサポートされています。
引数 | 注意と制限 |
---|---|
Mdl | モデル オブジェクトの使用上の注意および制限については、 |
X |
|
Posterior | この出力引数はサポートされていません。 |
名前と値のペアの引数 | 名前と値のペアの引数に含まれる名前はコンパイル時の定数でなければなりません。 |
BinaryLoss |
|
NumKLInitializations | この名前と値のペアの引数はサポートされていません。 |
ObservationsIn | 名前と値のペアの引数 'ObservationsIn' の値は、コンパイル時の定数でなければなりません。たとえば、生成されたコードで名前と値のペアの引数 'ObservationsIn','columns' を使用するには、{coder.Constant('ObservationsIn'),coder.Constant('columns')} を codegen (MATLAB Coder) の -args の値に含めます。 |
Options | この名前と値のペアの引数はサポートされていません。 |
PosteriorMethod | この名前と値のペアの引数はサポートされていません。 |
Verbose | コーダー コンフィギュアラーを使用せずに MEX ファイルを生成する場合は、Verbose を指定できます。それ以外の場合、codegen は Verbose をサポートしません。 |
詳細は、コード生成の紹介を参照してください。
並列実行するには、'UseParallel'
オプションを true
に設定します。
statset
を使用してオプション構造体の 'UseParallel'
フィールドを true
に設定し、この関数を呼び出すときに名前と値のペアの引数 'Options'
を指定します。
たとえば、次のようにします。'Options',statset('UseParallel',true)
詳細は、名前と値のペアの引数 'Options'
を参照してください。
並列計算の全般的な情報については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
ClassificationECOC
| CompactClassificationECOC
| fitcecoc
| loss
| resubPredict
| statset
| quadprog
(Optimization Toolbox)
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
Select web siteYou can also select a web site from the following list:
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.