このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
predict
マルチクラス誤り訂正出力符号 (ECOC) モデルを使用して観測値を分類
構文
説明
は、1 つ以上の名前と値のペアの引数によって指定された追加オプションを使用します。たとえば、事後確率の推定法、復号化方式、詳細レベルなどを指定できます。label
= predict(Mdl
,X
,Name,Value
)
例
ECOC モデルの使用による学習データのテスト標本ラベルの予測
フィッシャーのアヤメのデータ セットを読み込みます。予測子データ 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 つを除くすべてに対して正しいラベルを付けました。
カスタム バイナリ損失関数の使用による ECOC モデルのテスト標本ラベルの予測
フィッシャーのアヤメのデータ セットを読み込みます。予測子データ 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 - (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.1858 1.9878 -3.6736
versicolor virginica -1.3315 -0.12361 -0.044843
setosa versicolor 0.13891 1.9261 -3.565
virginica virginica -1.513 -0.38284 0.39588
versicolor versicolor -0.87221 0.74738 -1.3752
setosa versicolor 0.48413 1.9976 -3.9818
virginica virginica -1.936 -0.67566 1.1117
virginica virginica -1.5786 -0.83331 0.91194
setosa versicolor 0.51027 2.1211 -4.1314
setosa versicolor 0.36128 2.0596 -3.9209
列の順序は classOrder
の要素に対応します。符号が反転した最大損失に基づき、ラベルが予測されます。この結果は、線形損失の中央値が他の損失ほどは効果的に機能しないことを示しています。
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 = 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
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: 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 になるように正規化されます。また、各クラスについて平均のバイナリ損失が計算されます[1]。
カスタム バイナリ損失関数の場合は関数ハンドルを指定します。たとえば、
customFunction
の場合は'BinaryLoss',@customFunction
を指定します。customFunction
の形式は次のとおりです。bLoss = customFunction(M,s)
M
はMdl.CodingMatrix
に格納された K 行 B 列の符号化行列です。s
は 1 行 B 列の分類スコアの行ベクトルです。bLoss
は分類損失です。このスカラーは、特定のクラスのすべての学習器についてバイナリ損失を集計します。たとえば、平均バイナリ損失を使用して、各クラスの学習器の損失を集計できます。K は、クラスの数です。
B はバイナリ学習器の数です。
カスタムなバイナリ損失関数を渡す例については、カスタム バイナリ損失関数の使用による ECOC モデルのテスト標本ラベルの予測を参照してください。
次の表に BinaryLoss
の既定値を示します。既定値は、バイナリ学習器が返すスコアの範囲によって異なります。
仮定 | 既定値 |
---|---|
すべてのバイナリ学習器が次のいずれかである。
| 'quadratic' |
すべてのバイナリ学習器が SVM であるか、SVM 学習器の線形またはカーネル分類モデルである。 | 'hinge' |
すべてのバイナリ学習器が、AdaboostM1 または GentleBoost によって学習をさせたアンサンブルである。 | 'exponential' |
すべてのバイナリ学習器が、LogitBoost によって学習をさせたアンサンブルである。 | 'binodeviance' |
fitcecoc で 'FitPosterior',true を設定して、クラスの事後確率を予測するように指定している。 | 'quadratic' |
バイナリ学習器が異種混合で、さまざまな損失関数を使用している。 | 'hamming' |
既定値を確認するには、コマンド ラインでドット表記を使用して学習済みモデルの 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 配列
予測クラス ラベル。categorical 配列、文字配列、logical 配列、数値配列、または文字ベクトルの cell 配列として返されます。
関数 predict
は、符号を反転した平均バイナリ損失が最大になるクラス (つまり、平均バイナリ損失が最小になるクラス) に観測値を割り当てることで観測値の分類を予測します。観測値の損失値が NaN
の場合、関数はこの観測値を、学習ラベルの最大比率を占める多数クラスに分類します。
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)
に対応します。Decoding
が'lossbased'
の場合、NegLoss(i,k,j)
はバイナリ損失の合計をバイナリ学習器の総数で割った値になります。Decoding
が'lossweighted'
の場合、NegLoss(i,k,j)
はバイナリ損失の合計を 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 列の行列になります。
詳細
バイナリ損失
"バイナリ損失" は、バイナリ学習器がどの程度の精度で観測値をクラスに分類するかを決定する、クラスと分類スコアの関数です。ソフトウェアでバイナリ損失をどのように集計して各観測値の予測クラスを判定するかは、ECOC モデルの "復号化方式" で指定します。
以下のように仮定します。
mkj は符号化設計行列 M の要素 (k,j)、つまりバイナリ学習器 j のクラス k に対応する符号。M は K 行 B 列の行列であり、K はクラスの数、B はバイナリ学習器の数です。
sj は観測値に対するバイナリ学習器 j のスコア。
g はバイナリ損失関数。
は観測値の予測クラス。
ソフトウェアでは 2 つの復号化方式をサポートしています。
関数 predict
、resubPredict
、および kfoldPredict
は、それぞれの観測値とクラスについて、argmin
の目的関数の符号反転値を 2 番目の出力引数 (NegLoss
) として返します。
次の表は、サポートされる損失関数をまとめたものです。ここで、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 になるようにバイナリ損失が正規化され、バイナリ学習器の平均が集計に使用されます[1]。
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] を参照してください。
代替機能
Simulink ブロック
Simulink® に ECOC 分類モデルの予測を統合するには、Statistics and Machine Learning Toolbox™ ライブラリにある ClassificationECOC Predict ブロックを使用するか、MATLAB® Function ブロックを関数 predict
と共に使用します。例については、ClassificationECOC Predict ブロックの使用によるクラス ラベルの予測とMATLAB Function ブロックの使用によるクラス ラベルの予測を参照してください。
使用するアプローチを判断する際は、以下を考慮してください。
Statistics and Machine Learning Toolbox ライブラリ ブロックを使用する場合、固定小数点ツール (Fixed-Point Designer)を使用して浮動小数点モデルを固定小数点に変換できます。
MATLAB Function ブロックを関数
predict
と共に使用する場合は、可変サイズの配列に対するサポートを有効にしなければなりません。MATLAB Function ブロックを使用する場合、予測の前処理や後処理のために、同じ MATLAB Function ブロック内で MATLAB 関数を使用することができます。
参照
[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. “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.
[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.
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
使用上の注意事項および制限事項:
Mdl
にカーネルまたは線形のバイナリ学習器が含まれる場合、predict
は talltable
データをサポートしません。
詳細は、tall 配列を参照してください。
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
コーダー コンフィギュアラーを使用して、
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
事後確率を予測するモデルを保存するために
saveLearnerForCoder
を使用し、モデルを読み込むためにloadLearnerForCoder
を使用した場合、loadLearnerForCoder
はScoreTransform
プロパティを MATLAB ワークスペースに復元できません。しかしloadLearnerForCoder
は、コード生成用のコンパイル時に、エントリポイント関数内でScoreTransform
プロパティを含めてモデルを読み込むことができます。モデル オブジェクトの使用上の注意および制限については、
CompactClassificationECOC
オブジェクトのコード生成を参照してください。
X
一般的なコード生成の場合、
X
は、単精度または倍精度の行列か、数値変数、カテゴリカル変数、またはその両方を含む table でなければなりません。コーダー コンフィギュアラー ワークフローでは、
X
は単精度または倍精度の行列でなければなりません。X
の観測値の数は可変サイズにすることができますが、X
の変数の数は固定でなければなりません。X
を table として指定する場合、モデルは table を使用して学習させたものでなければならず、かつ予測のためのエントリポイント関数で次を行う必要があります。データを配列として受け入れる。
データ入力の引数から table を作成し、その table 内で変数名を指定する。
table を
predict
に渡す。
このテーブルのワークフローの例については、table のデータを分類するためのコードの生成を参照してください。コード生成におけるテーブルの使用の詳細については、table のコード生成 (MATLAB Coder)およびコード生成における table の制限事項 (MATLAB Coder)を参照してください。
Posterior
この出力引数はサポートされていません。 名前と値のペアの引数 名前と値の引数に含まれる名前はコンパイル時の定数でなければなりません。 BinaryLoss
名前と値のペアの引数
'BinaryLoss'
の値は、コンパイル時の定数でなければなりません。たとえば、生成されたコードで名前と値のペアの引数'BinaryLoss','logit'
を使用するには、{coder.Constant('BinaryLoss'),coder.Constant('logit')}
をcodegen
(MATLAB Coder) の-args
の値に含めます。生成されるコードで名前と値のペアの引数
'BinaryLoss'
をカスタム バイナリ損失関数に設定するには、MATLAB の検索パス上でカスタム関数を定義し、カスタム関数のハンドルではなく名前を指定します。カスタム関数の名前は、コンパイル時の定数でなければなりません。たとえば、customFunction
という名前のカスタム関数を定義した場合、{coder.Constant('BinaryLoss'),coder.Constant('customFunction')}
をcodegen
(MATLAB Coder) の-args
の値に含めます。
NumKLInitializations
この名前と値のペアの引数はサポートされていません。 ObservationsIn
名前と値の引数
ObservationsIn
の値は、コンパイル時の定数でなければなりません。たとえば、生成されたコードで名前と値の引数"ObservationsIn","columns"
を使用するには、{coder.Constant("ObservationsIn"),coder.Constant("columns")}
をcodegen
(MATLAB Coder) の-args
の値に含めます。Options
この名前と値のペアの引数はサポートされていません。 PosteriorMethod
この名前と値のペアの引数はサポートされていません。 Verbose
コーダー コンフィギュアラーを使用せずに MEX ファイルを生成する場合は、 Verbose
を指定できます。それ以外の場合、codegen
はVerbose
をサポートしません。
詳細は、コード生成の紹介を参照してください。
自動並列サポート
Parallel Computing Toolbox™ を使用して自動的に並列計算を実行することで、コードを高速化します。
並列実行するには、この関数を呼び出すときに名前と値の引数 Options
を指定し、statset
を使用してオプション構造体の UseParallel
フィールドを true
に設定します。
Options=statset(UseParallel=true)
並列計算の詳細については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
使用上の注意事項および制限事項:
関数
predict
では代理分岐をもつ決定木学習器を使用して学習させたモデルはサポートしていません。関数
predict
では SVM 学習器を使用して学習させたモデルはサポートしていません。
詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2014b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
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: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)