Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

incrementalLearner

サポート ベクター マシン (SVM) 回帰モデルのインクリメンタル学習器への変換

R2020b 以降

説明

IncrementalMdl = incrementalLearner(Mdl) は、回帰用の従来式の学習済み線形 SVM モデル Mdl のハイパーパラメーターと係数を使用して、インクリメンタル学習用の線形回帰モデル IncrementalMdl を返します。プロパティ値は Mdl から得られた知識を反映しているため、IncrementalMdl は新しい観測値に対してラベルの予測を行うことができます。また "ウォーム" となるため、予測性能が追跡されます。

IncrementalMdl = incrementalLearner(Mdl,Name,Value) は、1 つ以上の名前と値の引数によって指定された追加オプションを使用します。一部のオプションでは、予測性能の追跡を行う前に IncrementalMdl に学習させる必要があります。たとえば、'MetricsWarmupPeriod',50,'MetricsWindowSize',100 は、50 個の観測値から成る、パフォーマンス メトリクスの追跡前のインクリメンタル学習の予備期間を指定し、ウィンドウ パフォーマンス メトリクスを更新する前に 100 個の観測値を処理することを指定します。

すべて折りたたむ

fitrsvm を使用して SVM 回帰モデルに学習させ、それをインクリメンタル学習器に変換します。

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

2015 年のニューヨーク市住宅データ セットを読み込みます。このデータの詳細については、NYC Open Data を参照してください。

load NYCHousing2015

テーブルから応答変数 SALEPRICE を抽出します。数値安定性を得るために、SALEPRICE1e6 の尺度でスケールします。

Y = NYCHousing2015.SALEPRICE/1e6;
NYCHousing2015.SALEPRICE = [];

カテゴリカル予測子からダミー変数メトリクスを作成します。

catvars = ["BOROUGH" "BUILDINGCLASSCATEGORY" "NEIGHBORHOOD"];
dumvarstbl = varfun(@(x)dummyvar(categorical(x)),NYCHousing2015,...
    'InputVariables',catvars);
dumvarmat = table2array(dumvarstbl);
NYCHousing2015(:,catvars) = [];

テーブル内の他のすべての数値変数を売価の線形予測子として扱います。ダミー変数の行列を予測子データの残りに連結します。

idxnum = varfun(@isnumeric,NYCHousing2015,'OutputFormat','uniform');
X = [dumvarmat NYCHousing2015{:,idxnum}];

SVM 回帰モデルの学習

SVM 回帰モデルを、データ セットから無作為に抽出した 5000 個の観測値に当てはめます。サポート ベクター (Alpha) をモデルから破棄して、ソフトウェアが予測に線形係数 (Beta) 使用するようにします。

N = numel(Y);
n = 5000;
rng(1); % For reproducibility
idx = randsample(N,n);

TTMdl = fitrsvm(X(idx,:),Y(idx));
TTMdl = discardSupportVectors(TTMdl)
TTMdl = 
  RegressionSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
        ResponseTransform: 'none'
                     Beta: [312x1 double]
                     Bias: -3.2469e+11
         KernelParameters: [1x1 struct]
          NumObservations: 5000
           BoxConstraints: [5000x1 double]
          ConvergenceInfo: [1x1 struct]
          IsSupportVector: [5000x1 logical]
                   Solver: 'SMO'


TTMdl は従来式の学習済み SVM 回帰モデルを表す RegressionSVM モデル オブジェクトです。

学習済みモデルの変換

従来式の学習済み SVM 回帰モデルを、インクリメンタル学習用の線形回帰モデルに変換します。

IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl = 
  incrementalRegressionLinear

               IsWarm: 1
              Metrics: [1x2 table]
    ResponseTransform: 'none'
                 Beta: [312x1 double]
                 Bias: -3.2469e+11
              Learner: 'svm'


IncrementalMdl は、SVM を使用するインクリメンタル学習用に準備された incrementalRegressionLinear モデル オブジェクトです。

  • 関数 incrementalLearner は、学習した係数を、TTMdl が学習データから抽出した他の情報と共に渡して、インクリメンタル学習器を初期化します。

  • IncrementalMdl はウォーム (IsWarm1) です。これは、インクリメンタル学習関数がパフォーマンス メトリクスの追跡を開始できることを意味します。

  • fitrsvm が SMO ソルバーを使用して TTMdl に学習させるのに対し、関数 incrementalLearner は、適応型スケール不変ソルバーを使用してモデルに学習させます。

応答予測

従来式の学習済みモデルから変換して作成したインクリメンタル学習器は、追加の処理なしで予測を生成できます。

両方のモデルを使用して、すべての観測値の売価を予測します。

ttyfit = predict(TTMdl,X);
ilyfit = predict(IncrementalMdl,X);
compareyfit = norm(ttyfit - ilyfit)
compareyfit = 0

モデルによって生成された近似値の差は 0 です。

既定のソルバーは、適応型スケール不変ソルバーです。このソルバーを指定した場合、学習のためにパラメーターを調整する必要はありません。ただし、代わりに標準 SGD または ASGD ソルバーのいずれかを指定する場合は、推定期間を指定することもできます。その間、インクリメンタル近似関数は学習率を調整します。

2015 年のニューヨーク市住宅データ セットを読み込み、シャッフルします。このデータの詳細については、NYC Open Data を参照してください。

load NYCHousing2015

rng(1) % For reproducibility
n = size(NYCHousing2015,1);
shuffidx = randsample(n,n);
NYCHousing2015 = NYCHousing2015(shuffidx,:);

テーブルから応答変数 SALEPRICE を抽出します。数値安定性を得るために、SALEPRICE1e6 の尺度でスケールします。

Y = NYCHousing2015.SALEPRICE/1e6;
NYCHousing2015.SALEPRICE = [];

カテゴリカル予測子からダミー変数メトリクスを作成します。

catvars = ["BOROUGH" "BUILDINGCLASSCATEGORY" "NEIGHBORHOOD"];
dumvarstbl = varfun(@(x)dummyvar(categorical(x)),NYCHousing2015,...
    'InputVariables',catvars);
dumvarmat = table2array(dumvarstbl);
NYCHousing2015(:,catvars) = [];

テーブル内の他のすべての数値変数を売価の線形予測子として扱います。ダミー変数の行列を予測子データの残りに連結します。

idxnum = varfun(@isnumeric,NYCHousing2015,'OutputFormat','uniform');
X = [dumvarmat NYCHousing2015{:,idxnum}];

データをランダムに 5% と 95% のセットに分割します。最初のセットは従来式のモデルの学習用、残りのセットはインクリメンタル学習用です。

cvp = cvpartition(n,'Holdout',0.95);
idxtt = training(cvp);
idxil = test(cvp);

% 5% set for traditional training 
Xtt = X(idxtt,:);
Ytt = Y(idxtt);

% 95% set for incremental learning
Xil = X(idxil,:);
Yil = Y(idxil);

SVM 回帰モデルをデータの 5% に当てはめます。

TTMdl = fitrsvm(Xtt,Ytt);

従来式の学習済み SVM 回帰モデルを、インクリメンタル学習用の線形回帰モデルに変換します。標準 SGD ソルバーを指定し、推定期間を 2e4 個の観測値に指定します (学習率が必要な場合の既定は 1000)。

IncrementalMdl = incrementalLearner(TTMdl,'Solver','sgd','EstimationPeriod',2e4);

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

関数 fit を使用して、インクリメンタル モデルを残りのデータに当てはめます。各反復で次を行います。

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

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

  • 初期学習率と β1 を保存して、係数と比率が学習中にどのように進化したかを確認。

% Preallocation
nil = numel(Yil);
numObsPerChunk = 10;
nchunk = floor(nil/numObsPerChunk);
learnrate = [IncrementalMdl.LearnRate; zeros(nchunk,1)];
beta1 = [IncrementalMdl.Beta(1); zeros(nchunk,1)];

% Incremental fitting
for j = 1:nchunk
    ibegin = min(nil,numObsPerChunk*(j-1) + 1);
    iend   = min(nil,numObsPerChunk*j);
    idx = ibegin:iend;
    IncrementalMdl = fit(IncrementalMdl,Xil(idx,:),Yil(idx));
    beta1(j + 1) = IncrementalMdl.Beta(1);
    learnrate(j + 1) = IncrementalMdl.LearnRate;
end

IncrementalMdl は、ストリーム内のすべてのデータで学習させた incrementalRegressionLinear モデル オブジェクトです。

初期学習率と β1 が学習中にどのように進化したかを確認するには、それらを別々のタイルにプロットします。

t = tiledlayout(2,1);
nexttile
plot(beta1)
hold on
ylabel('\beta_1')
xline(IncrementalMdl.EstimationPeriod/numObsPerChunk,'r-.')
nexttile
plot(learnrate)
ylabel('Initial Learning Rate')
xline(IncrementalMdl.EstimationPeriod/numObsPerChunk,'r-.')
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 Initial Learning Rate contains 2 objects of type line, constantline.

初期学習率は、推定期間後に 0.7 から自動調整された値に急転します。ソフトウェアでの学習時は、IncrementalMdlLearnRateScheduleプロパティで指定された初期値から徐々に減衰する学習率が使用されます。

推定期間中には fit がモデルをストリーミング データに当てはめないため、β1 は、最初の 2000 回の反復 (20,000 個の観測値) では定数です。その後、β1 は、fit が 10 個の観測値の新しいチャンクそれぞれにモデルを当てはめるたびに少しずつ変化します。

学習済みの SVM 回帰モデルを使用して、インクリメンタル学習器を初期化します。メトリクスのウォームアップ期間を指定して、インクリメンタル学習器を準備します。その間、関数updateMetricsAndFitはモデルの当てはめのみを行います。メトリクス ウィンドウ サイズを観測値 500 個に指定します。

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

load robotarm

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

データをランダムに 5% と 95% のセットに分割します。最初のセットは従来式のモデルの学習用、残りのセットはインクリメンタル学習用です。

n = numel(ytrain);

rng(1) % For reproducibility
cvp = cvpartition(n,'Holdout',0.95);
idxtt = training(cvp);
idxil = test(cvp);

% 5% set for traditional training
Xtt = Xtrain(idxtt,:);
Ytt = ytrain(idxtt);

% 95% set for incremental learning
Xil = Xtrain(idxil,:);
Yil = ytrain(idxil);

SVM 回帰モデルを最初のセットに当てはめます。

TTMdl = fitrsvm(Xtt,Ytt);

従来式の学習済み SVM 回帰モデルを、インクリメンタル学習用の線形回帰モデルに変換します。次を指定します。

  • メトリクスのウォームアップ期間は観測値 2000 個。

  • メトリクス ウィンドウ サイズは観測値 500 個。

  • イプシロン不感応損失、MSE、および平均絶対誤差 (MAE) を使用してモデルの性能を測定。ソフトウェアは、イプシロン不感応損失および MSE をサポートしています。新しい各観測値の絶対誤差を測定する無名関数を作成します。名前 MeanAbsoluteError とそれに対応する関数を含む構造体配列を作成します。

maefcn = @(z,zfit)abs(z - zfit);
maemetric = struct("MeanAbsoluteError",maefcn);
IncrementalMdl = incrementalLearner(TTMdl,'MetricsWarmupPeriod',2000,'MetricsWindowSize',500,...
    'Metrics',{'epsiloninsensitive' 'mse' maemetric});

関数 updateMetricsAndFit を使用して、インクリメンタル モデルを残りのデータに当てはめます。各反復で次を行います。

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

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

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

% Preallocation
nil = numel(Yil);
numObsPerChunk = 50;
nchunk = floor(nil/numObsPerChunk);
ei = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
mse = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
mae = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
beta1 = [IncrementalMdl.Beta(10); zeros(nchunk,1)];

% Incremental fitting
for j = 1:nchunk
    ibegin = min(nil,numObsPerChunk*(j-1) + 1);
    iend   = min(nil,numObsPerChunk*j);
    idx = ibegin:iend;    
    IncrementalMdl = updateMetricsAndFit(IncrementalMdl,Xil(idx,:),Yil(idx));
    ei{j,:} = IncrementalMdl.Metrics{"EpsilonInsensitiveLoss",:};
    mse{j,:} = IncrementalMdl.Metrics{"MeanSquaredError",:};
    mae{j,:} = IncrementalMdl.Metrics{"MeanAbsoluteError",:};
    beta1(j + 1) = IncrementalMdl.Beta(10);
end

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

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

tiledlayout(2,2)
nexttile
plot(beta1)
ylabel('\beta_{10}')
xlim([0 nchunk])
xline(IncrementalMdl.MetricsWarmupPeriod/numObsPerChunk,'r-.')
xlabel('Iteration')
nexttile
h = plot(ei.Variables);
xlim([0 nchunk])
ylabel('Epsilon Insensitive Loss')
xline(IncrementalMdl.MetricsWarmupPeriod/numObsPerChunk,'r-.')
legend(h,ei.Properties.VariableNames)
xlabel('Iteration')
nexttile
h = plot(mse.Variables);
xlim([0 nchunk])
ylabel('MSE')
xline(IncrementalMdl.MetricsWarmupPeriod/numObsPerChunk,'r-.')
legend(h,mse.Properties.VariableNames)
xlabel('Iteration')
nexttile
h = plot(mae.Variables);
xlim([0 nchunk])
ylabel('MAE')
xline(IncrementalMdl.MetricsWarmupPeriod/numObsPerChunk,'r-.')
legend(h,mae.Properties.VariableNames)
xlabel('Iteration')

Figure contains 4 axes objects. Axes object 1 with xlabel Iteration, ylabel \beta_{10} contains 2 objects of type line, constantline. Axes object 2 with xlabel Iteration, ylabel Epsilon Insensitive Loss contains 3 objects of type line, constantline. These objects represent Cumulative, Window. Axes object 3 with xlabel Iteration, ylabel MSE contains 3 objects of type line, constantline. These objects represent Cumulative, Window. Axes object 4 with xlabel Iteration, ylabel MAE contains 3 objects of type line, constantline. These objects represent Cumulative, Window.

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

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

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

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

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

入力引数

すべて折りたたむ

回帰用の従来式の学習済み SVM 線形モデル。関数の学習または処理によって返されるモデル オブジェクトとして指定します。

モデル オブジェクト学習または処理を行う関数
RegressionSVMfitrsvm
CompactRegressionSVMfitrsvm または compact

メモ

インクリメンタル学習関数は、数値の入力予測子データのみをサポートします。Mdl に categorical データで学習させた場合、インクリメンタル学習関数を使用するには符号化したバージョンの categorical データを準備する必要があります。dummyvar を使用して、各カテゴリカル変数をダミー変数で構成される数値行列に変換します。その後、学習関数での categorical データの符号化と同じ方法で、すべてのダミー変数行列とその他の数値予測子を連結します。詳細については、ダミー変数を参照してください。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: 'Solver','scale-invariant','MetricsWindowSize',100 は、目的関数の最適化用に適応型スケール不変ソルバーを指定し、ウィンドウ パフォーマンス メトリクスを更新する前に 100 個の観測値を処理することを指定します。

一般オプション

すべて折りたたむ

目的関数の最小化手法。次の表の値として指定します。

説明メモ:
'scale-invariant'

インクリメンタル学習用の適応型スケール不変ソルバー[1]

  • このアルゴリズムはパラメーターを持たず、予測子のスケールの違いに適応できます。SGD または ASGD を使用する前に、このアルゴリズムを試してください。

  • 関数 fit でモデルを当てはめる前にデータの入力チャンクをシャッフルするには、Shuffletrue に設定します。

'sgd'確率的勾配降下法 (SGD) [3][2]

  • SGD で効果的に学習させるには、データを標準化し、SGD および ASGD ソルバーのオプションにリストされているオプションを使用してハイパーパラメーターの適切な値を指定します。

  • 関数 fit でモデルを当てはめる前にデータの入力チャンクが常にシャッフルされます。

'asgd'平均化確率的勾配降下法 (ASGD) [4]

  • ASGD で効果的に学習させるには、データを標準化し、SGD および ASGD ソルバーのオプションにリストされているオプションを使用してハイパーパラメーターの適切な値を指定します。

  • 関数 fit でモデルを当てはめる前にデータの入力チャンクが常にシャッフルされます。

インクリメンタル学習用の線形モデル (IncrementalMdl) では、従来式の学習済み線形 SVM モデル Mdl の学習に使用されるソルバーや SVM モデル テンプレート オブジェクト Mdl で指定されたソルバーはサポートされません。既定では、関数 incrementalLearnerIncrementalMdl を設定して適応型スケール不変ソルバー ('scale-invariant') を使用します。

例: 'Solver','sgd'

データ型: char | string

ハイパーパラメーターの推定のために、パフォーマンス メトリクスの学習または追跡の前にインクリメンタル モデルが処理する観測値の数。'EstimationPeriod' と非負の整数で構成されるコンマ区切りのペアとして指定します。

メモ

  • Mdl をインクリメンタル学習用に準備する場合 (学習に必要なすべてのハイパーパラメーターを指定する必要があります)、incrementalLearnerEstimationPeriod0 に強制します。

  • Mdl をインクリメンタル学習用に準備しない場合、incrementalLearnerEstimationPeriod1000 に設定します。

詳細は、推定期間を参照してください。

例: 'EstimationPeriod',100

データ型: single | double

予測子データを標準化するためのフラグ。'Standardize' と以下の表の値で構成されるコンマ区切りのペアとして指定します。

説明
'auto'incrementalLearner が予測子変数を標準化する必要があるかどうかを決定します。データの標準化を参照してください。
trueソフトウェアが予測子データを標準化します。
falseソフトウェアが予測子データを標準化しません。

ある条件下で、incrementalLearner によって指定がオーバーライドされる場合があります。詳細は、データの標準化を参照してください。

例: 'Standardize',true

データ型: logical | char | string

SGD および ASGD ソルバーのオプション

すべて折りたたむ

ミニバッチのサイズ。'BatchSize' と正の整数から構成されるコンマ区切りのペアとして指定します。学習中の各学習サイクルで、incrementalLearnerBatchSize 個の観測値を使用して劣勾配を計算します。

最後のミニバッチ (fit または updateMetricsAndFit の各関数呼び出しにおける最後の学習サイクル) に使用する観測値の数は、BatchSize より小さくてもかまいません。たとえば、fit または updateMetricsAndFit に 25 個の観測値を指定した場合、関数は最初の 2 つの学習サイクルに 10 個の観測値を使用し、最後の学習サイクルに 5 個の観測値を使用します。

例: 'BatchSize',1

データ型: single | double

リッジ (L2) 正則化項の強度。'Lambda' と非負のスカラーで構成されるコンマ区切りのペアとして指定します。

例: 'Lambda',0.01

データ型: single | double

初期学習率。'LearnRate''auto' または正のスカラーで構成されるコンマ区切りのペアとして指定します。LearnRate は、目的の劣勾配をスケールすることによって最適化のステップ サイズを制御します。

学習率は、目的の劣勾配をスケールすることによって最適化のステップ サイズを制御します。LearnRate は学習率の初期値を指定し、LearnRateSchedule によって後続の学習サイクルの学習率が決まります。

'auto' を指定した場合、次のようになります。

  • 初期学習率は 0.7 となります。

  • EstimationPeriod > 0 の場合、fit および updateMetricsAndFit は、EstimationPeriod の最後にこの比率を 1/sqrt(1+max(sum(X.^2,obsDim))) に変更します。obsDim の値は、観測値が推定期間に収集された予測子データ X の列である場合は 1、それ以外の場合は 2 です。

例: 'LearnRate',0.001

データ型: single | double | char | string

学習率スケジュール。'LearnRateSchedule' と次の表の値で構成されるコンマ区切りのペアとして指定します。ここで、LearnRate は初期学習率 ɣ0 を指定します。

説明
'constant'すべての学習サイクルの学習率を ɣ0 とする。
'decaying'

学習サイクル t での学習率を次とする。

γt=γ0(1+λγ0t)c.

  • λ は Lambda の値です。

  • Solver'sgd' の場合、c = 1 です。

  • Solver'asgd' の場合、次のようになります。

    • Learner'leastsquares' の場合は c = 2/3

    • Learner'svm' の場合は c = 3/4[4]

例: 'LearnRateSchedule','constant'

データ型: char | string

適応型スケール不変ソルバーのオプション

すべて折りたたむ

各反復でのバッチ内観測値のシャッフル フラグ。'Shuffle' と次の表の値で構成されるコンマ区切りのペアとして指定します。

説明
trueソフトウェアが、関数 fit でモデルを当てはめる前に、データの入力チャンクをシャッフルします。このアクションにより、抽出スキームによって誘発されるバイアスが低減されます。
falseソフトウェアが、受信した順序でデータを処理します。

例: 'Shuffle',false

データ型: logical

パフォーマンス メトリクス オプション

すべて折りたたむ

updateMetrics および updateMetricsAndFit を使ってインクリメンタル学習中に追跡するモデルのパフォーマンス メトリクス。'Metrics' および組み込みの損失関数名で構成されるコンマ区切りのペア、名前の string ベクトル、関数ハンドル (@metricName)、関数ハンドルの構造体配列、または名前、関数ハンドル、構造体配列の cell ベクトルとして指定します。

次の表は、組み込みの損失関数名の一覧です。string ベクトルを使用して、複数指定できます。

名前説明
"epsiloninsensitive"イプシロン不感応損失
"mse"重み付けされた平均二乗誤差

組み込み損失関数の詳細については、loss を参照してください。

例: 'Metrics',["epsiloninsensitive" "mse"]

パフォーマンス メトリクスを返すカスタム関数を指定するには、関数ハンドル表記を使用します。関数は次の形式でなければなりません。

metric = customMetric(Y,YFit)

  • 出力引数 metric は n 行 1 列の数値ベクトルです。ここで、各要素は、学習サイクル中にインクリメンタル学習関数によって処理されたデータの対応する観測値の損失です。

  • 関数名 (customMetric) を選択します。

  • Y は、観測応答の長さ n の数値ベクトルです。ここで、n は標本サイズです。

  • YFit は、対応する予測応答の長さ n の数値ベクトルです。

複数のカスタム メトリクスを指定し、それぞれにカスタム名を割り当てるには、構造体配列を使用します。組み込みメトリクスとカスタム メトリクスの組み合わせを指定するには、cell ベクトルを使用します。

例: 'Metrics',struct('Metric1',@customMetric1,'Metric2',@customMetric2)

例: 'Metrics',{@customMetric1 @customMetric2 'mse' struct('Metric3',@customMetric3)}

updateMetrics および updateMetricsAndFit は、table で指定したメトリクスをプロパティ IncrementalMdl.Metrics に保存します。Metrics のデータ型によって、table の行名が決まります。

'Metrics' 値のデータ型Metrics プロパティの行名の説明
string または文字ベクトル対応する組み込みメトリクスの名前"epsiloninsensitive" の行名は "EpsilonInsensitiveLoss"
構造体配列フィールド名struct('Metric1',@customMetric1) の行名は "Metric1"
プログラム ファイルに格納されている関数への関数ハンドル関数名@customMetric の行名は "customMetric"
無名関数CustomMetric_j。ここで、jMetrics のメトリクス j@(Y,YFit)customMetric(Y,YFit)... の行名は CustomMetric_1

パフォーマンス メトリクス オプションの詳細については、パフォーマンス メトリクスを参照してください。

データ型: char | string | struct | cell | function_handle

インクリメンタル モデルが Metrics プロパティのパフォーマンス メトリクスを追跡する前に当てはめなければならない観測値の数。非負の整数として指定します。インクリメンタル モデルは、インクリメンタル近似関数が (EstimationPeriod + MetricsWarmupPeriod) 個の観測値をインクリメンタル モデルに当てはめた後にウォームになります。

パフォーマンス メトリクス オプションの詳細については、パフォーマンス メトリクスを参照してください。

例: 'MetricsWarmupPeriod',50

データ型: single | double

ウィンドウ パフォーマンス メトリクスの計算に使用する観測値の数。正の整数として指定します。

パフォーマンス メトリクス オプションの詳細については、パフォーマンス メトリクスを参照してください。

例: 'MetricsWindowSize',100

データ型: single | double

出力引数

すべて折りたたむ

インクリメンタル学習用の線形回帰モデル。incrementalRegressionLinear モデル オブジェクトとして返されます。IncrementalMdl は新しいデータに基づいて予測を生成するようにも構成されます (predict を参照)。

インクリメンタル学習用に IncrementalMdl を初期化するために、incrementalLearner は、次の表の Mdl プロパティの値を IncrementalMdl の対応するプロパティに渡します。

プロパティ説明
Betaスケーリングされた線形モデル係数。Mdl.Beta/Mdl.KernelParameters.Scale。数値ベクトル
Biasモデル切片。数値スカラー
Epsilonイプシロン不感応区間の幅の半分。非負のスカラー
Mu予測子変数の平均。数値ベクトル
NumPredictors予測子の数。正の整数
ResponseTransform応答変換関数。関数名または関数ハンドル
Sigma予測子変数の標準偏差。数値ベクトル

詳細

すべて折りたたむ

インクリメンタル学習

"インクリメンタル学習" ("オンライン学習") は、予測子変数の分布、予測関数や目的関数の素性 (調整パラメーターの値を含む)、観測値にラベル付けがされているか等についてほぼ知識が無い時に、データ ストリームから入ってくるデータを処理することに関係している機械学習の一分野です。従来の機械学習は、モデルへの当てはめに十分にラベル付けされたデータを使用でき、交差検証を実施してハイパーパラメーターを調整し、予測子の分布を推論するもので、インクリメンタル学習と異なります。

入力観測値に対し、インクリメンタル学習モデルは、次のいずれかの方法 (通常はこの順序) でデータを処理します。

  • ラベルの予測。

  • 予測性能の測定。

  • モデルの構造的な破綻やドリフトについてのチェック。

  • 入力観測値へのモデルの当てはめ。

詳細については、インクリメンタル学習の概要を参照してください。

インクリメンタル学習用の適応型スケール不変ソルバー

"インクリメンタル学習用の適応型スケール不変ソルバー" ([1]で紹介) は、線形予測モデルに学習させるための勾配降下法ベースの目的ソルバーです。ソルバーはハイパーパラメーターを持たず、予測子変数のスケールの違いの影響を受けず、予測子変数の分布の事前知識が不要です。これらの特徴は、インクリメンタル学習に適しています。

標準 SGD および ASGD ソルバーは、予測子変数間のスケールの違いの影響を受けやすいため、モデルの性能低下につながることがあります。SGD および ASGD を使用して精度を向上させるには、予測子データを標準化し、正則化と学習率のパラメーターを調整できます。従来の機械学習では、交差検証と予測子を標準化してハイパーパラメーター調整を行うのに十分なデータが利用できます。しかし、インクリメンタル学習の場合、十分なデータが利用できず (たとえば、観測値が一度に 1 つしか利用できない場合があります)、予測子の分布が未知である場合があります。このような特徴があるため、インクリメンタル学習中のパラメーター調整と予測子の標準化は困難または不可能です。

回帰用のインクリメンタル近似関数 fit および updateMetricsAndFit は、アルゴリズムのより保守的な ScInOL1 バージョンを使用します。

アルゴリズム

すべて折りたたむ

推定期間

推定期間中、インクリメンタル近似関数 fit および updateMetricsAndFit は、最初の EstimationPeriod 個の入力観測値を使用して、インクリメンタル学習に必要なハイパーパラメーターを推定 (調整) します。推定は EstimationPeriod が正の場合にのみ発生します。次の表は、ハイパーパラメーターとそれらが推定または調整される条件について説明します。

ハイパーパラメーターモデル プロパティ使用法条件
予測子の平均および標準偏差

Mu および Sigma

標準化された予測子データ

次のいずれの条件にも当てはまる場合は、ハイパーパラメーターが推定されます。

  • 'Standardize',true を設定したとき (データの標準化を参照)

  • IncrementalMdl.Mu および IncrementalMdl.Sigma が空の配列 []

学習率LearnRateソルバーのステップ サイズの調整

次のいずれの条件にも当てはまる場合は、ハイパーパラメーターが推定されます。

  • Mdl のソルバーを SGD または ASGD に変更 (Solver を参照)。

  • 名前と値の引数 'LearnRate' を正のスカラーとして指定していない。

推定期間中には、fit がモデルを当てはめることも、updateMetricsAndFit がモデルを当てはめたりパフォーマンス メトリクスを更新したりすることもありません。推定期間の満了時に、関数はハイパーパラメーターを格納するプロパティを更新します。

データの標準化

予測子変数を標準化するようにインクリメンタル学習関数が構成されている場合、インクリメンタル学習モデル IncrementalMdlMu および Sigma プロパティに保存されている平均と標準偏差を使用して標準化が行われます。

  • fitrsvm を使用して入力モデル Mdl に学習させるときに予測子データを標準化した場合、以下の条件が適用されます。

    • incrementalLearner は、Mdl.Mu の平均と Mdl.Sigma の標準偏差をインクリメンタル学習モデルの対応するプロパティに渡します。

    • インクリメンタル学習関数は、名前と値のペアの引数 'Standardize' の値にかかわらず、予測子データを常に標準化します。

  • 'Standardize',true を設定すると、IncrementalMdl.Mu および IncrementalMdl.Sigma が空になり、次の条件が適用されます。

    • 推定期間が正の場合 (IncrementalMdlEstimationPeriod プロパティを参照)、インクリメンタル近似関数は、推定期間の観測値を使用して平均と標準偏差を推定します。

    • 推定期間が 0 の場合、incrementalLearner は推定期間を 1000 に強制します。その結果、インクリメンタル近似関数が推定するのは、強制された推定期間中の新しい予測子変数の平均と標準偏差になります。

  • 'Standardize','auto' を設定すると (既定の設定)、次の条件が適用されます。

    • IncrementalMdl.Mu および IncrementalMdl.Sigma が空の場合、インクリメンタル学習関数は予測子変数を標準化しません。

    • それ以外の場合、インクリメンタル学習関数は、IncrementalMdl.Mu および IncrementalMdl.Sigma の平均と標準偏差をそれぞれ使用して予測子変数を標準化します。インクリメンタル近似関数は、推定期間の長さにかかわらず、新しい平均と標準偏差を推定しません。

  • インクリメンタル近似関数が予測子の平均と標準偏差を推定するとき、関数は推定期間の観測値を使用して加重平均と加重標準偏差を計算します。具体的には、関数は予測子 j (xj) の標準化のために次を使用します。

    xj=xjμjσj.

    • xj は予測子 j、xjk は推定期間内の予測子 j の観測値 k です。

    • μj=1kwkkwkxjk.

    • (σj)2=1kwkkwk(xjkμj)2.

    • wj は観測値の重み j です。

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

  • 関数 updateMetrics および updateMetricsAndFit は、インクリメンタル モデルが "ウォーム" (IsWarm プロパティ) のときに、新しいデータからモデルのパフォーマンス メトリクス ('Metrics') を追跡するインクリメンタル学習関数です。インクリメンタル モデルは、fit または updateMetricsAndFit がインクリメンタル モデルを 'MetricsWarmupPeriod' 個の観測値 ("メトリクスのウォームアップ期間") に当てはめた後、ウォームになります。

    'EstimationPeriod' > 0 の場合、関数はモデルをデータに当てはめる前にハイパーパラメーターを推定します。そのため、関数は、モデルがメトリクスのウォームアップ期間を開始する前に EstimationPeriod 個の観測値を追加で処理しなければなりません。

  • インクリメンタル モデルの Metrics プロパティは、各パフォーマンス メトリクスの 2 つの形式を table の変数 (列) Cumulative および Window とし、個々のメトリクスを行に格納します。インクリメンタル モデルがウォームになると、updateMetrics および updateMetricsAndFit は次の頻度でメトリクスを更新します。

    • Cumulative — 関数は、モデルの性能追跡の開始以降の累積メトリクスを計算します。関数は、関数が呼び出されるたびにメトリクスを更新し、提供されたデータ セット全体に基づいて計算を行います。

    • Window — 関数は、名前と値のペアの引数 'MetricsWindowSize' によって決定されたウィンドウ内のすべての観測値に基づいてメトリクスを計算します。'MetricsWindowSize' によってソフトウェアが Window メトリクスを更新する頻度も決まります。たとえば、MetricsWindowSize が 20 の場合、関数は提供されたデータの最後の 20 個の観測値に基づいてメトリクスを計算します (X((end – 20 + 1):end,:) および Y((end – 20 + 1):end))。

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

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

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

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

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

参照

[1] Kempka, Michał, Wojciech Kotłowski, and Manfred K. Warmuth. "Adaptive Scale-Invariant Online Algorithms for Learning Linear Models." Preprint, submitted February 10, 2019. https://arxiv.org/abs/1902.07528.

[2] Langford, J., L. Li, and T. Zhang. “Sparse Online Learning Via Truncated Gradient.” J. Mach. Learn. Res., Vol. 10, 2009, pp. 777–801.

[3] Shalev-Shwartz, S., Y. Singer, and N. Srebro. “Pegasos: Primal Estimated Sub-Gradient Solver for SVM.” Proceedings of the 24th International Conference on Machine Learning, ICML ’07, 2007, pp. 807–814.

[4] Xu, Wei. “Towards Optimal One Pass Large Scale Learning with Averaged Stochastic Gradient Descent.” CoRR, abs/1107.2490, 2011.

バージョン履歴

R2020b で導入