Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

簡潔なワークフローを使用したインクリメンタル学習の実装

この例では、簡潔なワークフローを使用して、逐次予測評価を伴うバイナリ分類用のインクリメンタル学習を実装する方法を示します。この例は、具体的に次のことを行います。

  1. バイナリ分類用の既定のインクリメンタル学習モデルを作成します。

  2. 観測値の小さなチャンクをインクリメンタル学習アルゴリズムにフィードする for ループを使用して、データ ストリームをシミュレートします。

  3. 各チャンクに対し、updateMetricsAndFit を使用して、入力データに対するモデルの性能を測定し、モデルをデータにあてはめます。

既定のモデル オブジェクトの作成

Mdl = incrementalClassificationLinear()
Mdl = 
  incrementalClassificationLinear

            IsWarm: 0
           Metrics: [1×2 table]
        ClassNames: [1×0 double]
    ScoreTransform: 'none'
              Beta: [0×1 double]
              Bias: 0
           Learner: 'svm'


  Properties, Methods

MdlincrementalClassificationLinear モデル オブジェクトです。そのプロパティはすべて読み取り専用です。

Mdl は、他の演算の実行に使用する前に、データにあてはめなければなりません。

データの読み込みと前処理

人の行動のデータ セットを読み込みます。データをランダムにシャッフルします。

load humanactivity
n = numel(actid);
rng(1); % For reproducibility
idx = randsample(n,n);
X = feat(idx,:);
Y = actid(idx);

データ セットの詳細については、コマンド ラインで Description を入力してください。

応答は、次の 5 つのクラスのいずれかになります。座る、立つ、歩く、走る、または踊る。被験者が移動しているかどうか (actid > 2) を基準に、応答を二分します。

Y = Y > 2;

インクリメンタル学習の実装

関数 updateMetricsAndfit を使用して、インクリメンタル モデルを学習データにあてはめます。50 個の観測値のチャンクを一度に処理して、データ ストリームをシミュレートします。各反復で次を行います。

  • 50 個の観測値を処理。

  • 前のインクリメンタル モデルを、入力観測値にあてはめた新しいモデルで上書き。

  • 累積メトリクス β1、およびウィンドウ メトリクスを保存し、インクリメンタル学習中にそれらがどのように進化するかを確認。

% Preallocation
numObsPerChunk = 50;
nchunk = floor(n/numObsPerChunk);
ce = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
beta1 = zeros(nchunk,1);    

% Incremental fitting
for j = 1:nchunk
    ibegin = min(n,numObsPerChunk*(j-1) + 1);
    iend   = min(n,numObsPerChunk*j);
    idx = ibegin:iend;    
    Mdl = updateMetricsAndFit(Mdl,X(idx,:),Y(idx));
    ce{j,:} = Mdl.Metrics{"ClassificationError",:};
    beta1(j + 1) = Mdl.Beta(1);
end

IncrementalMdl は、ストリーム内のすべてのデータで学習させた incrementalClassificationLinear モデル オブジェクトです。インクリメンタル学習中およびモデルがウォームアップされた後、updateMetricsAndFit は入力観測値でのモデルの性能をチェックし、モデルをその観測値にあてはめます。

モデルの進化の検査

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

figure;
subplot(2,1,1)
plot(beta1)
ylabel('\beta_1')
xlim([0 nchunk]);
xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.');
subplot(2,1,2)
h = plot(ce.Variables);
xlim([0 nchunk]);
ylabel('Classification Error')
xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.');
xline((Mdl.EstimationPeriod + Mdl.MetricsWarmupPeriod)/numObsPerChunk,'g-.');
legend(h,ce.Properties.VariableNames)
xlabel('Iteration')

プロットは、updateMetricsAndFit が次を行うことを示しています。

  • β1 をインクリメンタル学習のすべての反復であてはめる

  • パフォーマンス メトリクスをメトリクスのウォームアップ期間後にのみ計算。

  • 累積メトリクスを各反復中に計算。

  • ウィンドウ メトリクスを 500 個の観測値の処理後に計算。

参考

オブジェクト

関数

関連するトピック