Main Content

updateMetrics

ECOC インクリメンタル学習分類モデルの新しいデータに基づくパフォーマンス メトリクスの更新

R2022a 以降

    説明

    ストリーミング データが与えられると、updateMetrics は、インクリメンタル学習用の構成済みのマルチクラス誤り訂正出力符号 (ECOC) 分類モデル (incrementalClassificationECOC オブジェクト) のパフォーマンスを測定します。updateMetrics はパフォーマンス メトリクスを出力モデルに格納します。

    updateMetrics では柔軟なインクリメンタル学習が可能です。この関数を呼び出してデータの入力チャンクでモデルのパフォーマンス メトリクスを更新した後、モデルにデータを学習させる前に他のアクションを実行できます。たとえば、データのチャンクでのパフォーマンスに基づいて、モデルに学習させる必要があるかどうかを決定できます。また、関数 updateMetricsAndFit を使用すると、データが到達したときにモデルのパフォーマンス メトリクスの更新とモデルの学習の両方を 1 回の呼び出しで実行できます。

    指定したデータのバッチにおけるモデルのパフォーマンスを測定するには、代わりに loss を呼び出します。

    Mdl = updateMetrics(Mdl,X,Y) は、インクリメンタル学習モデル Mdl を返します。これは、入力予測子と応答データ (それぞれ XY) のモデル パフォーマンス メトリクスを含むように変更された入力インクリメンタル学習モデル Mdl です。

    入力モデルが "ウォーム" (Mdl.IsWarmtrue) の場合、updateMetrics は以前に計算されたメトリクスを上書きし、Metrics プロパティに新しい値を保存します。それ以外の場合、updateMetrics は代わりに MetricsNaN 値を保存します。

    Mdl = updateMetrics(Mdl,X,Y,Name=Value) は、1 つ以上の名前と値の引数によって指定された追加オプションを使用します。たとえば、予測子データ行列の列が観測値に対応するように指定したり、観測値の重みを設定したりできます。

    すべて折りたたむ

    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'
    
    
    

    IncrementalMdlincrementalClassificationECOC モデルです。モデルの表示で、モデルがウォームである (IsWarm1) ことが示されています。そのため、updateMetrics は、与えられたデータでのモデルのパフォーマンス メトリクスを追跡できます。

    パフォーマンス メトリクスの追跡

    関数 updateMetrics を使用して、残りのデータでのモデル パフォーマンスを追跡します。50 個の観測値を一度に処理して、データ ストリームをシミュレートします。各反復で次を行います。

    1. updateMetrics を呼び出し、観測値の入力チャンクを所与として、モデルの分類誤差の累積とウィンドウを更新します。前のインクリメンタル モデルを上書きして、Metrics プロパティを更新します。関数がモデルをデータ チャンクに当てはめないことに注意してください。チャンクはモデルに対して "新しい" データです。

    2. 分類誤差と 1 番目のバイナリ学習器の 1 番目のモデル係数 β11 を保存します。

    % 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 モデル オブジェクトです。

    パフォーマンス メトリクスと推定された係数 β11 のトレース プロットを別々のタイルにプロットします。

    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")

    Figure contains 2 axes objects. Axes object 1 with ylabel Classification Error contains 2 objects of type line. These objects represent Cumulative, Window. Axes object 2 with ylabel \beta_{11} contains an object of type line.

    累積の損失は安定していますが、ウィンドウの損失には学習全体を通じて急な変動があります。updateMetrics がモデルをデータに当てはめないため、β11 は変更されません。

    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'
    
    
    

    IncrementalMdlincrementalClassificationECOC モデルです。クラス名が IncrementalMdl.ClassNames で指定されているため、インクリメンタル学習で見つかるラベルは IncrementalMdl.ClassNames のいずれかでなければなりません。

    パフォーマンス メトリクスの追跡とモデルの当てはめの個別の実行

    関数 updateMetrics および fit を使用して、残りのデータに対してインクリメンタル学習を実行します。インクリメンタル学習用に、予測子データの観測値を列に配置します。各反復で次を行います。

    1. 50 個の観測値を一度に処理して、データ ストリームをシミュレートします。

    2. updateMetrics を呼び出し、観測値の入力チャンクを所与として、モデルの分類誤差の累積とウィンドウを更新します。前のインクリメンタル モデルを上書きして、Metrics プロパティ内の損失を更新します。関数がモデルをデータ チャンクに当てはめないことに注意してください。チャンクはモデルに対して "新しい" データです。観測値の向きを列方向に指定し、観測値の重みを指定します。

    3. 分類誤差を保存します。

    4. 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")

    Figure contains an axes object. The axes object with xlabel Iteration, ylabel Classification Error contains 2 objects of type line. These objects represent Cumulative, Window.

    累積の損失は徐々に安定しますが、ウィンドウの損失には学習全体を通じて急な変動があります。

    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));

    MdlincrementalClassificationECOC モデル オブジェクトです。

    モデルのプロパティを照会して、モデルがウォームであるかどうかを調べます。

    isWarm = Mdl.IsWarm
    isWarm = logical
       1
    
    

    Mdl.IsWarm が 1 であるため、Mdl はウォームです。

    条件付きの当てはめを行い、インクリメンタル学習を実行します。各反復でこの手順に従います。

    • 100 個の観測値のチャンクを一度に処理することで、データ ストリームをシミュレートします。

    • 入力データ チャンクでモデルのパフォーマンスを更新します。

    • 誤分類誤差率が 0.05 を超える場合にのみ、モデルをデータ チャンクに当てはめます。

    • パフォーマンスと当てはめを追跡するときは、前のインクリメンタル モデルを上書きします。

    • 誤分類誤差率と 1 番目のバイナリ学習器 β11 の 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 モデル オブジェクトです。

    モデルのパフォーマンスと β11 が学習中にどのように進化するかを確認するには、それらを別々のタイルにプロットします。

    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")

    Figure contains 2 axes objects. Axes object 1 with ylabel \beta_{11} contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent \beta_{11}, Training occurs. Axes object 2 with ylabel Misclassification Error Rate contains 3 objects of type line, constantline. These objects represent Cumulative, Window.

    β11 のトレース プロットは、前の観測ウィンドウ内における損失が最大で 0.05 である定数値の期間を示します。

    クラスの最大数を指定してインクリメンタル ECOC 学習器を準備します。モデルのパフォーマンスとモデル内の各バイナリ学習器のパフォーマンスを追跡するように構成します。

    incrementalClassificationECOC を呼び出してインクリメンタル学習用の ECOC モデルを作成します。データ内の予測される最大クラス数を 5 と指定し、モデル内のバイナリ学習器のパフォーマンス メトリクスを更新するように指定します。

    Mdl = incrementalClassificationECOC(MaxNumClasses=5,UpdateBinaryLearnerMetrics=true);

    MdlincrementalClassificationECOC モデルです。そのプロパティはすべて読み取り専用です。

    符号化設計行列を表示します。

    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.IsWarm0 であるため、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 番目のモデル係数 β11 を保存。

    • モデルとそのバイナリ学習器の誤分類誤差率を保存。

    % 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 モデル オブジェクトです。

    パフォーマンス メトリクスと β11 がインクリメンタル学習中にどのように進化するかを確認するには、それらを別々のタイルにプロットします。

    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")

    Figure contains 2 axes objects. Axes object 1 with ylabel \beta_{11} contains an object of type line. Axes object 2 with ylabel ClassificationError contains 3 objects of type line, constantline. These objects represent Cumulative, Window.

    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")

    Figure contains 4 axes objects. Axes object 1 with title Binary Learner for classes 1 and 3 contains 4 objects of type line, constantline. These objects represent Cumulative, Window. Axes object 2 with title Binary Learner for classes 2 and 3 contains 4 objects of type line, constantline. Axes object 3 with title Binary Learner for classes 3 and 4 contains 4 objects of type line, constantline. Axes object 4 with title Binary Learner for classes 3 and 5 contains 4 objects of type line, constantline.

    BinaryLearnerIsWarm(bl)
    ans = 4×1
    
        42
        41
        51
        60
    
    

    バイナリ学習器は、その学習器が 1000 個の観測値に当てはめられた後にウォームになります。バイナリ学習器ではその学習器の陽性クラスまたは陰性クラスに対応する観測値しか使用しないため、各バイナリ学習器が異なる学習反復数でウォームになります。また、updateMetrics はバイナリ学習器の Window メトリクスを非同期に更新します。

    1 つ目のプロットは、座る (クラス 1) と歩く (クラス 3) のどちらの活動かを判別するバイナリ学習器について、分類誤差 (または誤分類率) が 0 であることを示しています。次の 3 つのプロットは、歩く (クラス 3) を立つ (クラス 2)、走る (クラス 4)、および踊る (クラス 5) のそれぞれと区別する 3 つのバイナリ学習器の誤分類率を示しています。これらの 3 つのバイナリ学習器は、1 つ目のバイナリ学習器よりも誤分類率が高くなっています。

    入力引数

    すべて折りたたむ

    パフォーマンスを測定するインクリメンタル学習モデル。incrementalClassificationECOC モデル オブジェクトとして指定します。Mdl は、incrementalClassificationECOC を直接呼び出して作成することも、サポートされている従来式の学習済み機械学習モデルを関数 incrementalLearner で変換して作成することもできます。

    Mdl.IsWarmfalse の場合、updateMetrics はモデルのパフォーマンスを追跡しません。updateMetrics でパフォーマンス メトリクスを追跡する前に、次の両方のアクションを実行しなければなりません。

    • 入力モデル Mdl を予測されるすべてのクラスに当てはめます (incrementalClassificationECOC の引数 MaxNumClassesClassNames を参照)。

    • 入力モデル Mdl とデータを fit に渡して、MdlMdl.MetricsWarmupPeriod の観測値に当てはめます。詳細については、パフォーマンス メトリクスを参照してください。

    予測子データのチャンク。n 個の観測値と Mdl.NumPredictors 個の予測子変数で構成される浮動小数点行列として指定します。名前と値の引数 ObservationsIn の値は、変数と観測値の方向を決定します。ObservationsIn の既定値は "rows" であり、予測子データの観測値が X の行に沿うことを示しています。

    観測値のラベル Y の長さと X の観測値の数は同じでなければなりません。Y(j)X 内の観測値 j (行または列) のラベルです。

    メモ

    • Mdl.NumPredictors = 0 の場合、updateMetricsX から予測子の数を推測し、出力モデルの対応するプロパティを設定します。それ以外の場合、ストリーミング データ内の予測子変数の数が Mdl.NumPredictors から変化すると、updateMetrics がエラーを生成します。

    • updateMetrics は、浮動小数点の入力予測子データのみをサポートしています。入力データに categorical データが含まれている場合は、エンコード バージョンの categorical データを準備する必要があります。dummyvar を使用して、各カテゴリカル変数をダミー変数で構成される数値行列に変換します。その後、すべてのダミー変数行列とその他の数値予測子を連結します。詳細については、ダミー変数を参照してください。

    データ型: single | double

    ラベルのチャンク。categorical 配列、文字配列、string 配列、logical ベクトル、浮動小数点ベクトル、または文字ベクトルの cell 配列として指定します。

    観測値のラベル Y の長さと X の観測値の数は同じでなければなりません。Y(j)X 内の観測値 j (行または列) のラベルです。

    次の状況のいずれかまたは両方に該当する場合、updateMetrics からエラーが発行されます。

    • Y に新しいラベルが格納された時点で既にクラスの最大数に達していた (incrementalClassificationECOC の引数 MaxNumClasses および ClassNames を参照)。

    • 入力モデル MdlClassNames プロパティが空以外で、YMdl.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 に格納されていることを指定します。

    予測子データにおける観測値の次元。"rows" または "columns" として指定します。

    例: ObservationsIn="columns"

    データ型: char | string

    観測値の重みのチャンク。正の値の浮動小数点ベクトルとして指定します。updateMetrics は、Weights 内の対応する値を使用して X 内の観測値に重みを付けます。Weights のサイズは X 内の観測値の数 n と同じでなければなりません。

    既定では Weightsones(n,1) です。

    正規化方式を含む詳細については、観測値の重みを参照してください。

    例: Weights=W は、観測値の重みをベクトル W として指定します。

    データ型: double | single

    出力引数

    すべて折りたたむ

    更新されたインクリメンタル学習用の ECOC 分類モデル。入力モデル Mdl と同じデータ型のインクリメンタル学習モデル オブジェクト incrementalClassificationECOC として返されます。

    モデルがウォームでない場合、updateMetrics はパフォーマンス メトリクスを計算しません。その結果、MdlMetrics プロパティは、NaN 値で構成された状態を完全に維持します。モデルがウォームの場合、updateMetrics は、新しいデータ XY における累積およびウィンドウのパフォーマンス メトリクスを計算し、Mdl.Metrics の対応する要素を上書きします。入力モデル Mdl の他のプロパティは、すべて出力モデル Mdl に引き継がれます。詳細については、パフォーマンス メトリクスを参照してください。

    ヒント

    • 従来式の学習とは異なり、インクリメンタル学習には個別のテスト (ホールドアウト) セットが存在しない場合もあります。そのため、データの各入力チャンクをテスト セットとして扱うには、インクリメンタル モデルと各入力チャンクを、fit を使用して同じデータでモデルに学習させる前に updateMetrics に渡します。

    アルゴリズム

    すべて折りたたむ

    パフォーマンス メトリクス

    • updateMetrics および updateMetricsAndFit は、インクリメンタル モデルが "ウォーム" (IsWarm プロパティが true) のときにのみ、新しいデータから Mdl.Metrics の table の行ラベルで指定されたモデルのパフォーマンス メトリクスを追跡します。

      • incrementalLearner を使用してインクリメンタル モデルを作成するときに、MetricsWarmupPeriod が 0 (incrementalLearner の既定値) である場合、モデルは作成時にウォームになります。

      • それ以外の場合、インクリメンタル モデルは、関数 fit または updateMetricsAndFit で次の両方のアクションを実行するとウォームになります。

        • インクリメンタル モデルを Mdl.MetricsWarmupPeriod の観測値 ("メトリクスのウォームアップ期間") に当てはめる。

        • インクリメンタル モデルを予測されるすべてのクラスに当てはめる (incrementalClassificationECOC の引数 MaxNumClassesClassNames を参照)。

    • 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))。

        ウィンドウ内のパフォーマンス メトリクスを追跡するインクリメンタル関数は、次のプロセスを使用します。

        1. 指定された各メトリクスについて長さ Mdl.MetricsWindowSize のバッファーを保存し、観測値の重みのバッファーを保存します。

        2. 入力観測値のバッチに基づくモデル性能をメトリクス バッファーの要素に入力し、対応する観測値の重みを重みバッファーに格納します。

        3. バッファーがいっぱいになると、Mdl.Metrics.Window をメトリクス ウィンドウの性能の加重平均で上書きします。関数が観測値のバッチを処理するときにバッファーがあふれる場合、最新の入力観測値 Mdl.MetricsWindowSize がバッファーに入り、最も古い観測値がバッファーから削除されます。たとえば、Mdl.MetricsWindowSize が 20 で、メトリクス バッファーには前に処理されたバッチからの 10 個の値が存在し、15 個の値が入力されるとします。長さ 20 のウィンドウを構成するため、関数は 15 個の入力観測値からの測定値と前のバッチからの最新の 5 個の測定値を使用します。

    • CumulativeWindow のパフォーマンス メトリクスの値を計算する際、スコアが NaN の観測値は省略されます。

    観測値の重み

    事前クラス確率分布が既知の場合 (つまり、事前分布が経験的分布でない場合)、updateMetrics は、観測値の重みを正規化して、それぞれのクラスの事前クラス確率の合計になるようにします。このアクションは、既定の観測値の重みがそれぞれの事前クラス確率であることを前提としています。

    クラスの事前確率分布が経験的分布の場合、ソフトウェアは、updateMetrics が呼び出されるたびに、指定された観測値の重みを正規化して、合計が 1 になるようにします。

    バージョン履歴

    R2022a で導入