updateMetrics
説明
ストリーミング データが与えられると、updateMetrics
は、インクリメンタル学習用の構成済みのマルチクラス誤り訂正出力符号 (ECOC) 分類モデル (incrementalClassificationECOC
オブジェクト) のパフォーマンスを測定します。updateMetrics
はパフォーマンス メトリクスを出力モデルに格納します。
updateMetrics
では柔軟なインクリメンタル学習が可能です。この関数を呼び出してデータの入力チャンクでモデルのパフォーマンス メトリクスを更新した後、モデルにデータを学習させる前に他のアクションを実行できます。たとえば、データのチャンクでのパフォーマンスに基づいて、モデルに学習させる必要があるかどうかを決定できます。また、関数 updateMetricsAndFit
を使用すると、データが到達したときにモデルのパフォーマンス メトリクスの更新とモデルの学習の両方を 1 回の呼び出しで実行できます。
指定したデータのバッチにおけるモデルのパフォーマンスを測定するには、代わりに loss
を呼び出します。
例
インクリメンタル モデルのパフォーマンスの追跡
fitcecoc
を使用して ECOC 分類モデルに学習させ、それをインクリメンタル学習器に変換し、その性能をストリーミング データまで追跡します。
データの読み込みと前処理
人の行動のデータ セットを読み込みます。データをランダムにシャッフルします。
load humanactivity rng(1) % For reproducibility n = numel(actid); idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
データ セットの詳細については、コマンド ラインで Description
を入力してください。
ECOC 分類モデルの学習
ECOC 分類モデルをデータの半分の無作為標本に当てはめます。
idxtt = randsample([true false],n,true); TTMdl = fitcecoc(X(idxtt,:),Y(idxtt))
TTMdl = ClassificationECOC ResponseName: 'Y' CategoricalPredictors: [] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' BinaryLearners: {10x1 cell} CodingName: 'onevsone'
TTMdl
は、従来式の学習済みモデルを表す ClassificationECOC
モデル オブジェクトです。
学習済みモデルの変換
従来式の学習済み分類モデルをインクリメンタル学習用のモデルに変換します。
IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl = incrementalClassificationECOC IsWarm: 1 Metrics: [1x2 table] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' BinaryLearners: {10x1 cell} CodingName: 'onevsone' Decoding: 'lossweighted'
IncrementalMdl
は incrementalClassificationECOC
モデルです。モデルの表示で、モデルがウォームである (IsWarm
が 1
) ことが示されています。そのため、updateMetrics
は、与えられたデータでのモデルのパフォーマンス メトリクスを追跡できます。
パフォーマンス メトリクスの追跡
関数 updateMetrics
を使用して、残りのデータでのモデル パフォーマンスを追跡します。50 個の観測値を一度に処理して、データ ストリームをシミュレートします。各反復で次を行います。
updateMetrics
を呼び出し、観測値の入力チャンクを所与として、モデルの分類誤差の累積とウィンドウを更新します。前のインクリメンタル モデルを上書きして、Metrics
プロパティを更新します。関数がモデルをデータ チャンクに当てはめないことに注意してください。チャンクはモデルに対して "新しい" データです。分類誤差と 1 番目のバイナリ学習器の 1 番目のモデル係数 を保存します。
% Preallocation idxil = ~idxtt; nil = sum(idxil); numObsPerChunk = 50; nchunk = floor(nil/numObsPerChunk); mc = array2table(zeros(nchunk,2),VariableNames=["Cumulative","Window"]); beta11 = [IncrementalMdl.BinaryLearners{1}.Beta(1); zeros(nchunk,1)]; Xil = X(idxil,:); Yil = Y(idxil); % Incremental fitting for j = 1:nchunk ibegin = min(nil,numObsPerChunk*(j-1) + 1); iend = min(nil,numObsPerChunk*j); idx = ibegin:iend; IncrementalMdl = updateMetrics(IncrementalMdl,Xil(idx,:),Yil(idx)); mc{j,:} = IncrementalMdl.Metrics{"ClassificationError",:}; beta11(j+1) = IncrementalMdl.BinaryLearners{1}.Beta(1); end
IncrementalMdl
は、モデル パフォーマンスをデータ ストリーム内の観測値まで追跡した incrementalClassificationECOC
モデル オブジェクトです。
パフォーマンス メトリクスと推定された係数 のトレース プロットを別々のタイルにプロットします。
t = tiledlayout(2,1); nexttile plot(mc.Variables) xlim([0 nchunk]) ylabel("Classification Error") legend(mc.Properties.VariableNames) nexttile plot(beta11) ylabel("\beta_{11}") xlim([0 nchunk]); xlabel(t,"Iteration")
累積の損失は安定していますが、ウィンドウの損失には学習全体を通じて急な変動があります。updateMetrics
がモデルをデータに当てはめないため、 は変更されません。
観測値の方向および観測値の重みの指定
fitcecoc
を使用して ECOC 分類モデルに学習させ、それをインクリメンタル学習器に変換し、その性能をストリーミング データで追跡してからモデルをデータに当てはめます。インクリメンタル学習関数用に、観測値を列に配置し、観測値の重みを指定します。
データの読み込みと前処理
人の行動のデータ セットを読み込みます。データをランダムにシャッフルします。
load humanactivity rng(1); % For reproducibility n = numel(actid); idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
データ セットの詳細については、コマンド ラインで Description
を入力してください。
静止している被験者 (Y
<= 2) のデータが、移動している被験者のデータの倍の品質であると仮定します。静止している被験者の観測値に重み 2 を割り当て、移動している被験者の観測値に重み 1 を割り当てる重み変数を作成します。
W = ones(n,1) + (Y <=2);
ECOC 分類モデルの学習
ECOC 分類モデルをデータの半分の無作為標本に当てはめます。観測値の重みを指定します。
idxtt = randsample([true false],n,true); TTMdl = fitcecoc(X(idxtt,:),Y(idxtt),Weights=W(idxtt))
TTMdl = ClassificationECOC ResponseName: 'Y' CategoricalPredictors: [] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' BinaryLearners: {10x1 cell} CodingName: 'onevsone'
TTMdl
は従来式の学習済み ECOC 分類モデルを表す ClassificationECOC
モデル オブジェクトです。
学習済みモデルの変換
従来式の学習済みモデルをインクリメンタル学習用のモデルに変換します。
IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl = incrementalClassificationECOC IsWarm: 1 Metrics: [1x2 table] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' BinaryLearners: {10x1 cell} CodingName: 'onevsone' Decoding: 'lossweighted'
IncrementalMdl
は incrementalClassificationECOC
モデルです。クラス名が IncrementalMdl.ClassNames
で指定されているため、インクリメンタル学習で見つかるラベルは IncrementalMdl.ClassNames
のいずれかでなければなりません。
パフォーマンス メトリクスの追跡とモデルの当てはめの個別の実行
関数 updateMetrics
および fit
を使用して、残りのデータに対してインクリメンタル学習を実行します。インクリメンタル学習用に、予測子データの観測値を列に配置します。各反復で次を行います。
50 個の観測値を一度に処理して、データ ストリームをシミュレートします。
updateMetrics
を呼び出し、観測値の入力チャンクを所与として、モデルの分類誤差の累積とウィンドウを更新します。前のインクリメンタル モデルを上書きして、Metrics
プロパティ内の損失を更新します。関数がモデルをデータ チャンクに当てはめないことに注意してください。チャンクはモデルに対して "新しい" データです。観測値の向きを列方向に指定し、観測値の重みを指定します。分類誤差を保存します。
fit
を呼び出して、観測値の入力チャンクにモデルを当てはめます。前のインクリメンタル モデルを上書きして、モデル パラメーターを更新します。観測値の向きを列方向に指定し、観測値の重みを指定します。
% Preallocation idxil = ~idxtt; nil = sum(idxil); numObsPerChunk = 50; nchunk = floor(nil/numObsPerChunk); mc = array2table(zeros(nchunk,2),VariableNames=["Cumulative","Window"]); Xil = X(idxil,:)'; Yil = Y(idxil); Wil = W(idxil); % Incremental fitting for j = 1:nchunk ibegin = min(nil,numObsPerChunk*(j-1) + 1); iend = min(nil,numObsPerChunk*j); idx = ibegin:iend; IncrementalMdl = updateMetrics(IncrementalMdl,Xil(:,idx),Yil(idx), ... Weights=Wil(idx),ObservationsIn="columns"); mc{j,:} = IncrementalMdl.Metrics{"ClassificationError",:}; IncrementalMdl = fit(IncrementalMdl,Xil(:,idx),Yil(idx), ... Weights=Wil(idx),ObservationsIn="columns"); end
IncrementalMdl
は、ストリーム内のすべてのデータで学習させた incrementalClassificationECOC
モデル オブジェクトです。
あるいは、updateMetricsAndFit
を使用して、新しいデータ チャンクに対するモデルのパフォーマンス メトリクスを更新し、モデルをデータに当てはめることもできます。
パフォーマンス メトリクスのトレース プロットをプロットします。
plot(mc.Variables) xlim([0 nchunk]) legend(mc.Properties.VariableNames) ylabel("Classification Error") xlabel("Iteration")
累積の損失は徐々に安定しますが、ウィンドウの損失には学習全体を通じて急な変動があります。
条件付き学習の実行
ECOC 分類モデルのパフォーマンスが低下した場合にのみ、そのモデルに対してインクリメンタル学習を行います。
人の行動のデータ セットを読み込みます。データをランダムにシャッフルします。
load humanactivity n = numel(actid); rng(1) % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
データ セットの詳細については、コマンド ラインで Description
を入力してください。
予測される最大クラス数が 5 で、メトリクス ウィンドウ サイズが 1000 となるように、インクリメンタル学習用の ECOC 分類モデルを構成します。モデルを最初の 1000 個の観測値に当てはめて updateMetrics
用にモデルを準備します。
Mdl = incrementalClassificationECOC(MaxNumClasses=5,MetricsWindowSize=1000); initobs = 1000; Mdl = fit(Mdl,X(1:initobs,:),Y(1:initobs));
Mdl
は incrementalClassificationECOC
モデル オブジェクトです。
モデルのプロパティを照会して、モデルがウォームであるかどうかを調べます。
isWarm = Mdl.IsWarm
isWarm = logical
1
Mdl.IsWarm
が 1 であるため、Mdl
はウォームです。
条件付きの当てはめを行い、インクリメンタル学習を実行します。各反復でこの手順に従います。
100 個の観測値のチャンクを一度に処理することで、データ ストリームをシミュレートします。
入力データ チャンクでモデルのパフォーマンスを更新します。
誤分類誤差率が 0.05 を超える場合にのみ、モデルをデータ チャンクに当てはめます。
パフォーマンスと当てはめを追跡するときは、前のインクリメンタル モデルを上書きします。
誤分類誤差率と 1 番目のバイナリ学習器 の 1 番目のモデル係数を保存し、学習中にそれらがどのように進化するかを確認します。
fit
がモデルに学習させるタイミングを追跡します。
% Preallocation numObsPerChunk = 100; nchunk = floor((n - initobs)/numObsPerChunk); beta11 = zeros(nchunk,1); ce = array2table(nan(nchunk,2),VariableNames=["Cumulative","Window"]); trained = false(nchunk,1); % Incremental fitting for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1 + initobs); iend = min(n,numObsPerChunk*j + initobs); idx = ibegin:iend; Mdl = updateMetrics(Mdl,X(idx,:),Y(idx)); ce{j,:} = Mdl.Metrics{"ClassificationError",:}; if ce{j,2} > 0.05 Mdl = fit(Mdl,X(idx,:),Y(idx)); trained(j) = true; end beta11(j) = Mdl.BinaryLearners{1}.Beta(1); end
Mdl
は、ストリーム内のすべてのデータで学習させた incrementalClassificationECOC
モデル オブジェクトです。
モデルのパフォーマンスと が学習中にどのように進化するかを確認するには、それらを別々のタイルにプロットします。
t = tiledlayout(2,1); nexttile plot(beta11) hold on plot(find(trained),beta11(trained),"r.") xlim([0 nchunk]) ylabel("\beta_{11}") legend("\beta_{11}","Training occurs",Location="best") hold off nexttile plot(ce.Variables) yline(0.05,"--") xlim([0 nchunk]) ylabel("Misclassification Error Rate") legend(ce.Properties.VariableNames,Location="best") xlabel(t,"Iteration")
のトレース プロットは、前の観測ウィンドウ内における損失が最大で 0.05 である定数値の期間を示します。
モデルとバイナリ学習器のパフォーマンス メトリクスを追跡するためのインクリメンタル モデルの構成
クラスの最大数を指定してインクリメンタル ECOC 学習器を準備します。モデルのパフォーマンスとモデル内の各バイナリ学習器のパフォーマンスを追跡するように構成します。
incrementalClassificationECOC
を呼び出してインクリメンタル学習用の ECOC モデルを作成します。データ内の予測される最大クラス数を 5 と指定し、モデル内のバイナリ学習器のパフォーマンス メトリクスを更新するように指定します。
Mdl = incrementalClassificationECOC(MaxNumClasses=5,UpdateBinaryLearnerMetrics=true);
Mdl
は incrementalClassificationECOC
モデルです。そのプロパティはすべて読み取り専用です。
符号化設計行列を表示します。
Mdl.CodingMatrix
ans = 5×10
1 1 1 1 0 0 0 0 0 0
-1 0 0 0 1 1 1 0 0 0
0 -1 0 0 -1 0 0 1 1 0
0 0 -1 0 0 -1 0 -1 0 1
0 0 0 -1 0 0 -1 0 -1 -1
各行はクラスに対応し、各列はバイナリ学習器に対応します。たとえば、1 番目のバイナリ学習器はクラス 1 と 2、4 番目のバイナリ学習器はクラス 1 と 5 に対応しており、どちらの学習器でもクラス 1 を陽性クラスと仮定しています。
モデルのプロパティを照会して、モデルがウォームであるかどうかを調べます。
isWarm = Mdl.IsWarm
isWarm = logical
0
Mdl.IsWarm
が 0
であるため、Mdl
はウォームではありません。
メトリクスのウォームアップ期間を表示して、モデルのパフォーマンスを測定する前にインクリメンタル近似関数 (fit
など) で処理しなければならない観測値の数を調べます。
numObsBeforeMetrics = Mdl.MetricsWarmupPeriod
numObsBeforeMetrics = 1000
人の行動のデータ セットを読み込みます。データをランダムにシャッフルします。
load humanactivity n = numel(actid); rng(1) % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
応答ベクトル actid
には行動 ID が整数で格納されます。1 ~ 5 はそれぞれ、座る、立つ、歩く、走る、踊る、を表します。データ セットの詳細については、コマンド ラインで Description
を入力してください。
各反復で次のアクションを実行してインクリメンタル学習を実装します。
50 個の観測値のチャンクを処理して、データ ストリームをシミュレート。
updateMetrics
を使用して入力チャンクでモデルのパフォーマンス メトリクスを測定し、入力モデルを上書き。モデルを入力チャンクに当てはめ、入力モデルを上書き。
1 番目のバイナリ学習器の 1 番目のモデル係数 を保存。
モデルとそのバイナリ学習器の誤分類誤差率を保存。
% Preallocation numObsPerChunk = 50; nchunk = floor(n/numObsPerChunk); ce = array2table(zeros(nchunk,2),VariableNames=["Cumulative","Window"]); beta11 = zeros(nchunk,1); numBinaryLearners = length(Mdl.BinaryLearners); BinaryLearnerIsWarm = zeros(numBinaryLearners,1); numtrainobs = zeros(nchunk,numBinaryLearners); blMetrics = cell(numBinaryLearners,1); for k = 1:numBinaryLearners blMetrics{k} = array2table(zeros(nchunk,2),VariableNames=["Cumulative","Window"]); end % Incremental learning for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1); iend = min(n,numObsPerChunk*j); idx = ibegin:iend; Mdl = updateMetrics(Mdl,X(idx,:),Y(idx)); ce{j,:} = Mdl.Metrics{"ClassificationError",:}; for k = 1:numBinaryLearners blMetrics{k}{j,:} = Mdl.BinaryLearners{k}.Metrics{"ClassificationError",:}; end Mdl = fit(Mdl,X(idx,:),Y(idx)); beta11(j) = Mdl.BinaryLearners{1}.Beta(1); for k = 1:numBinaryLearners numtrainobs(j,k) = Mdl.BinaryLearners{k}.NumTrainingObservations; if Mdl.BinaryLearners{k}.IsWarm == false BinaryLearnerIsWarm(k) = j; end end end
Mdl
は、ストリーム内のすべてのデータで学習させた incrementalClassificationECOC
モデル オブジェクトです。
パフォーマンス メトリクスと がインクリメンタル学習中にどのように進化するかを確認するには、それらを別々のタイルにプロットします。
figure t = tiledlayout(2,1); nexttile plot(beta11) ylabel("\beta_{11}") xlim([0 nchunk]) nexttile plot(ce.Variables) ylabel("ClassificationError") xline(numObsBeforeMetrics/numObsPerChunk,"--") xlim([0 nchunk]) legend(ce.Properties.VariableNames) xlabel(t,"Iteration")
mdlIsWarm = numObsBeforeMetrics/numObsPerChunk
mdlIsWarm = 20
プロットは、fit
によるデータへのモデルの当てはめは常に実行され、updateMetrics
はメトリクスのウォームアップ期間 (20 チャンク) が経過するまでは分類誤差を追跡しないことを示しています。
クラス 3 に対応するバイナリ学習器のパフォーマンス メトリクスをプロットします。
bl = find(Mdl.CodingMatrix(3,:)); % Find binary learners for class 3 figure t = tiledlayout(length(bl),1); ax = zeros(length(bl),1); for i = 1 : length(bl) ax(i) = nexttile; plot(blMetrics{bl(i)}.Variables) xline(numObsBeforeMetrics/numObsPerChunk,"--") xline(BinaryLearnerIsWarm(1),":") xlim([0 nchunk]) positiveClass = find(Mdl.CodingMatrix(:,bl(i))==1); negativeClass = find(Mdl.CodingMatrix(:,bl(i))==-1); title(join(["Binary Learner for classes ",positiveClass," and ",negativeClass])) end legend(ax(1),blMetrics{bl(1)}.Properties.VariableNames,Location="best") linkaxes(ax) ylim([0,0.02]) ylabel(t,"ClassificationError") xlabel(t,"Iteration")
BinaryLearnerIsWarm(bl)
ans = 4×1
42
41
51
60
バイナリ学習器は、その学習器が 1000 個の観測値に当てはめられた後にウォームになります。バイナリ学習器ではその学習器の陽性クラスまたは陰性クラスに対応する観測値しか使用しないため、各バイナリ学習器が異なる学習反復数でウォームになります。また、updateMetrics
はバイナリ学習器の Window
メトリクスを非同期に更新します。
1 つ目のプロットは、座る (クラス 1) と歩く (クラス 3) のどちらの活動かを判別するバイナリ学習器について、分類誤差 (または誤分類率) が 0 であることを示しています。次の 3 つのプロットは、歩く (クラス 3) を立つ (クラス 2)、走る (クラス 4)、および踊る (クラス 5) のそれぞれと区別する 3 つのバイナリ学習器の誤分類率を示しています。これらの 3 つのバイナリ学習器は、1 つ目のバイナリ学習器よりも誤分類率が高くなっています。
入力引数
Mdl
— インクリメンタル学習モデル
incrementalClassificationECOC
モデル オブジェクト
パフォーマンスを測定するインクリメンタル学習モデル。incrementalClassificationECOC
モデル オブジェクトとして指定します。Mdl
は、incrementalClassificationECOC
を直接呼び出して作成することも、サポートされている従来式の学習済み機械学習モデルを関数 incrementalLearner
で変換して作成することもできます。
Mdl.IsWarm
が false
の場合、updateMetrics
はモデルのパフォーマンスを追跡しません。updateMetrics
でパフォーマンス メトリクスを追跡する前に、次の両方のアクションを実行しなければなりません。
入力モデル
Mdl
を予測されるすべてのクラスに当てはめます (incrementalClassificationECOC
の引数MaxNumClasses
とClassNames
を参照)。入力モデル
Mdl
とデータをfit
に渡して、Mdl
をMdl.MetricsWarmupPeriod
の観測値に当てはめます。詳細については、パフォーマンス メトリクスを参照してください。
X
— 予測子データのチャンク
浮動小数点行列
予測子データのチャンク。n 個の観測値と Mdl.NumPredictors
個の予測子変数で構成される浮動小数点行列として指定します。名前と値の引数 ObservationsIn
の値は、変数と観測値の方向を決定します。ObservationsIn
の既定値は "rows"
であり、予測子データの観測値が X
の行に沿うことを示しています。
観測値のラベル Y
の長さと X
の観測値の数は同じでなければなりません。Y(
は j
)X
内の観測値 j (行または列) のラベルです。
メモ
Mdl.NumPredictors
= 0 の場合、updateMetrics
はX
から予測子の数を推測し、出力モデルの対応するプロパティを設定します。それ以外の場合、ストリーミング データ内の予測子変数の数がMdl.NumPredictors
から変化すると、updateMetrics
がエラーを生成します。updateMetrics
は、浮動小数点の入力予測子データのみをサポートしています。入力データに categorical データが含まれている場合は、エンコード バージョンの categorical データを準備する必要があります。dummyvar
を使用して、各カテゴリカル変数をダミー変数で構成される数値行列に変換します。その後、すべてのダミー変数行列とその他の数値予測子を連結します。詳細については、ダミー変数を参照してください。
データ型: single
| double
Y
— ラベルのチャンク
categorical 配列 | 文字配列 | string 配列 | logical ベクトル | 浮動小数点ベクトル | 文字ベクトルの cell 配列
ラベルのチャンク。categorical 配列、文字配列、string 配列、logical ベクトル、浮動小数点ベクトル、または文字ベクトルの cell 配列として指定します。
観測値のラベル Y
の長さと X
の観測値の数は同じでなければなりません。Y(
は j
)X
内の観測値 j (行または列) のラベルです。
次の状況のいずれかまたは両方に該当する場合、updateMetrics
からエラーが発行されます。
Y
に新しいラベルが格納された時点で既にクラスの最大数に達していた (incrementalClassificationECOC
の引数MaxNumClasses
およびClassNames
を参照)。入力モデル
Mdl
のClassNames
プロパティが空以外で、Y
とMdl.ClassNames
のデータ型が異なる。
データ型: char
| string
| cell
| categorical
| logical
| single
| double
メモ
観測値 (予測子またはラベル) または重みが少なくとも 1 つの欠損 (NaN
) 値を含む場合、updateMetrics
はその観測値を無視します。したがって、updateMetrics
は n 個よりも少ない観測値を使用してモデル パフォーマンスを計算します。ここで n は X
内の観測値数です。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
例: ObservationsIn="columns",Weights=W
は、予測子行列の列が観測値に対応すること、およびインクリメンタル学習中に適用する観測値の重みがベクトル W
に格納されていることを指定します。
ObservationsIn
— 予測子データにおける観測値の次元
"rows"
(既定値) | "columns"
予測子データにおける観測値の次元。"rows"
または "columns"
として指定します。
例: ObservationsIn="columns"
データ型: char
| string
出力引数
Mdl
— 更新されたインクリメンタル学習用の ECOC 分類モデル
incrementalClassificationECOC
モデル オブジェクト
更新されたインクリメンタル学習用の ECOC 分類モデル。入力モデル Mdl
と同じデータ型のインクリメンタル学習モデル オブジェクト incrementalClassificationECOC
として返されます。
モデルがウォームでない場合、updateMetrics
はパフォーマンス メトリクスを計算しません。その結果、Mdl
の Metrics
プロパティは、NaN
値で構成された状態を完全に維持します。モデルがウォームの場合、updateMetrics
は、新しいデータ X
と Y
における累積およびウィンドウのパフォーマンス メトリクスを計算し、Mdl.Metrics
の対応する要素を上書きします。入力モデル Mdl
の他のプロパティは、すべて出力モデル Mdl
に引き継がれます。詳細については、パフォーマンス メトリクスを参照してください。
ヒント
従来式の学習とは異なり、インクリメンタル学習には個別のテスト (ホールドアウト) セットが存在しない場合もあります。そのため、データの各入力チャンクをテスト セットとして扱うには、インクリメンタル モデルと各入力チャンクを、
fit
を使用して同じデータでモデルに学習させる前にupdateMetrics
に渡します。
アルゴリズム
パフォーマンス メトリクス
updateMetrics
およびupdateMetricsAndFit
は、インクリメンタル モデルが "ウォーム" (IsWarm
プロパティがtrue
) のときにのみ、新しいデータからMdl.Metrics
の table の行ラベルで指定されたモデルのパフォーマンス メトリクスを追跡します。incrementalLearner
を使用してインクリメンタル モデルを作成するときに、MetricsWarmupPeriod
が 0 (incrementalLearner
の既定値) である場合、モデルは作成時にウォームになります。それ以外の場合、インクリメンタル モデルは、関数
fit
またはupdateMetricsAndFit
で次の両方のアクションを実行するとウォームになります。インクリメンタル モデルを
Mdl.MetricsWarmupPeriod
の観測値 ("メトリクスのウォームアップ期間") に当てはめる。インクリメンタル モデルを予測されるすべてのクラスに当てはめる (
incrementalClassificationECOC
の引数MaxNumClasses
とClassNames
を参照)。
Mdl.Metrics
プロパティは、各パフォーマンス メトリクスの 2 つの形式を table の変数 (列)Cumulative
およびWindow
とし、個々のメトリクスを行に格納します。インクリメンタル モデルがウォームになると、updateMetrics
およびupdateMetricsAndFit
は次の頻度でメトリクスを更新します。Cumulative
— 関数は、モデルの性能追跡の開始以降の累積メトリクスを計算します。関数は、関数が呼び出されるたびにメトリクスを更新し、提供されたデータ セット全体に基づいて計算を行います。Window
— 関数は、Mdl.MetricsWindowSize
プロパティによって決定されたウィンドウ内のすべての観測値に基づいてメトリクスを計算します。Mdl.MetricsWindowSize
によってソフトウェアがWindow
メトリクスを更新する頻度も決まります。たとえば、Mdl.MetricsWindowSize
が 20 の場合、関数は提供されたデータの最後の 20 個の観測値に基づいてメトリクスを計算します (X((end – 20 + 1):end,:)
およびY((end – 20 + 1):end)
)。ウィンドウ内のパフォーマンス メトリクスを追跡するインクリメンタル関数は、次のプロセスを使用します。
指定された各メトリクスについて長さ
Mdl.MetricsWindowSize
のバッファーを保存し、観測値の重みのバッファーを保存します。入力観測値のバッチに基づくモデル性能をメトリクス バッファーの要素に入力し、対応する観測値の重みを重みバッファーに格納します。
バッファーがいっぱいになると、
Mdl.Metrics.Window
をメトリクス ウィンドウの性能の加重平均で上書きします。関数が観測値のバッチを処理するときにバッファーがあふれる場合、最新の入力観測値Mdl.MetricsWindowSize
がバッファーに入り、最も古い観測値がバッファーから削除されます。たとえば、Mdl.MetricsWindowSize
が 20 で、メトリクス バッファーには前に処理されたバッチからの 10 個の値が存在し、15 個の値が入力されるとします。長さ 20 のウィンドウを構成するため、関数は 15 個の入力観測値からの測定値と前のバッチからの最新の 5 個の測定値を使用します。
Cumulative
とWindow
のパフォーマンス メトリクスの値を計算する際、スコアがNaN
の観測値は省略されます。
観測値の重み
事前クラス確率分布が既知の場合 (つまり、事前分布が経験的分布でない場合)、updateMetrics
は、観測値の重みを正規化して、それぞれのクラスの事前クラス確率の合計になるようにします。このアクションは、既定の観測値の重みがそれぞれの事前クラス確率であることを前提としています。
クラスの事前確率分布が経験的分布の場合、ソフトウェアは、updateMetrics
が呼び出されるたびに、指定された観測値の重みを正規化して、合計が 1 になるようにします。
バージョン履歴
R2022a で導入
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)