Main Content

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

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

  1. 線形回帰用の既定のインクリメンタル学習モデルを作成します。

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

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

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

線形回帰用の既定のインクリメンタル学習モデルを作成します。

Mdl = incrementalRegressionLinear()
Mdl = 
  incrementalRegressionLinear

               IsWarm: 0
              Metrics: [1x2 table]
    ResponseTransform: 'none'
                 Beta: [0x1 double]
                 Bias: 0
              Learner: 'svm'


Mdl.EstimationPeriod
ans = 1000

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

Mdl は、他の演算の実行に使用する前に、データに当てはめなければなりません。推定期間は、イプシロン不感応区間 Epsilon の幅の半分が不明であるため 1000 に設定されます。名前と値のペアの引数 'Epsilon' を使用して Epsilon を正の浮動小数点スカラーに設定できます。このアクションにより、推定期間が既定の 0 になります。

データの読み込み

ロボット アームのデータ セットを読み込みます。

load robotarm

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

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

簡潔なワークフローを使用して、関数 updateMetricsAndFit を呼び出してモデルのパフォーマンス メトリクスを更新し、インクリメンタル モデルを学習データに当てはめます。各反復で次を行います。

  • 50 個の観測値を処理して、データ ストリームをシミュレート。

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

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

% Preallocation
n = numel(ytrain);
numObsPerChunk = 50;
nchunk = floor(n/numObsPerChunk);
ei = 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,Xtrain(idx,:),ytrain(idx));
    ei{j,:} = Mdl.Metrics{"EpsilonInsensitiveLoss",:};
    beta1(j + 1) = Mdl.Beta(1);
end

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

モデルの進化の検査

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

t = tiledlayout(2,1);
nexttile
plot(beta1)
ylabel('\beta_1')
xlim([0 nchunk])
xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.')
nexttile
h = plot(ei.Variables);
xlim([0 nchunk])
ylabel('Epsilon Insensitive Loss')
xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.')
xline((Mdl.EstimationPeriod + Mdl.MetricsWarmupPeriod)/numObsPerChunk,'g-.')
legend(h,ei.Properties.VariableNames)
xlabel(t,'Iteration')

Figure contains 2 axes objects. Axes object 1 with ylabel \beta_1 contains 2 objects of type line, constantline. Axes object 2 with ylabel Epsilon Insensitive Loss contains 4 objects of type line, constantline. These objects represent Cumulative, Window.

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

  • 推定期間 (最初の 20 回の反復) の後、β1 をインクリメンタル学習のすべての反復で当てはめる。

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

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

  • ウィンドウ メトリクスを 200 個の観測値 (4 回の反復) の処理後に計算。

参考

オブジェクト

関数

関連するトピック