Main Content

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

incrementalLearner

バイナリ分類用の線形モデルをインクリメンタル学習器に変換

説明

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

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

すべて折りたたむ

fitclinear を使用してバイナリ学習用の線形分類モデルに学習させ、それをインクリメンタル学習器に変換します。

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

人の行動のデータ セットを読み込みます。

load humanactivity

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

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

Y = actid > 2;

線形分類モデルの学習

線形分類モデルをデータ セット全体にあてはめます。

TTMdl = fitclinear(feat,Y)
TTMdl = 
  ClassificationLinear
      ResponseName: 'Y'
        ClassNames: [0 1]
    ScoreTransform: 'none'
              Beta: [60x1 double]
              Bias: -0.2005
            Lambda: 4.1537e-05
           Learner: 'svm'


  Properties, Methods

TTMdl は従来式の学習済み線形分類モデルを表す ClassificationLinear モデル オブジェクトです。

学習済みモデルの変換

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

IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl = 
  incrementalClassificationLinear

            IsWarm: 1
           Metrics: [1x2 table]
        ClassNames: [0 1]
    ScoreTransform: 'none'
              Beta: [60x1 double]
              Bias: -0.2005
           Learner: 'svm'


  Properties, Methods

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

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

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

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

応答予測

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

両方のモデルを使用して、すべての観測値の分類スコアを予測します。

[~,ttscores] = predict(TTMdl,feat);
[~,ilscores] = predict(IncrementalMdl,feat);
compareScores = norm(ttscores(:,1) - ilscores(:,1))
compareScores = 0

モデルによって生成されたスコアの差は 0 です。

SGD または ASGD ソルバーを使用して線形分類モデルに学習させる場合、incrementalLearner は、線形分類モデルを変換するときに、ソルバー、線形モデル タイプ、および関連するハイパーパラメーター値を保持します。

人の行動のデータ セットを読み込みます。

load humanactivity

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

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

Y = actid > 2;

データをランダムに 2 分割します。最初の半分は従来式のモデルの学習用、残りの半分はインクリメンタル学習用です。

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

% First half of data 
Xtt = feat(idxtt,:);
Ytt = Y(idxtt);

% Second half of data
Xil = feat(idxil,:);
Yil = Y(idxil);

10-610-0.5 の範囲で対数間隔で配置された 11 個の正則化強度を作成します。

Lambda = logspace(-6,-0.5,11);

変数のスケールは異なるため、暗黙的な拡張を使用して予測子データを標準化します。

Xtt = (Xtt - mean(Xtt))./std(Xtt);

5 分割交差検証を適用して、L2 正則化パラメーターを調整します。標準 SGD ソルバーを指定します。

TTCVMdl = fitclinear(Xtt,Ytt,'KFold',5,'Learner','logistic',...
    'Solver','sgd','Lambda',Lambda);

TTCVMdl は、交差検証中に作成された 5 つのモデルを表す ClassificationPartitionedLinear モデルです (TTCVMdl.Trained を参照)。交差検証の手順には、指定された正則化値ごとの学習が含まれます。

各モデルおよび正則化に対する交差検証分類誤差を計算します。

cvloss = kfoldLoss(TTCVMdl)
cvloss = 1×11

    0.0054    0.0039    0.0034    0.0033    0.0030    0.0027    0.0027    0.0031    0.0036    0.0056    0.0077

cvloss は、Lamba の各正則化値に対する検定標本の分類損失を含んでいます。

分類誤差が最小となる正則化値を選択します。選択した正則化値を使用して、モデルに再度学習させます。

[~,idxmin] = min(cvloss);
TTMdl = fitclinear(Xtt,Ytt,'Learner','logistic','Solver','sgd',...
    'Lambda',Lambda(idxmin));

TTMdlClassificationLinear モデルです。

従来式の学習済み線形分類モデルを、インクリメンタル学習用のバイナリ分類線形モデルに変換します。標準 SGD ソルバーを指定します。予測子を標準化するためのインクリメンタル学習関数を準備します。このアクションには、予測子の平均と標準偏差を推定するための初期期間が必要です。推定期間を 2000 個の観測値に指定します (予測子モーメントが必要な場合の既定は 1000)。

IncrementalMdl = incrementalLearner(TTMdl,'Standardize',true,'EstimationPeriod',2000);

IncrementalMdlincrementalClassificationLinear モデル オブジェクトです。incrementalLearner は、ソルバーと正則化強度を、TTMdl の学習から得られた他の情報と共に IncrementalMdl に渡します。

関数 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);
end

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

β1 をプロットして、進化の推移を確認します。

plot(beta1)
ylabel('\beta_1') 
xline(IncrementalMdl.EstimationPeriod/numObsPerChunk,'r-.');
xlabel('Iteration')

Figure contains an axes. The axes contains 2 objects of type line, constantline.

推定期間中には fit がモデルをストリーミング データにあてはめないため、β1 は、最初の 200 回の反復 (2000 個の観測値) では定数です。その後、β1 はインクリメンタル近似中に急激に変動します。

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

人の行動のデータ セットを読み込みます。

load humanactivity

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

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

Y = actid > 2;

データ セットは行動ごとにグループ化されているため、データをシャッフルして単純にします。次に、データをランダムに 2 分割します。最初の半分は従来式のモデルの学習用、残りの半分はインクリメンタル学習用です。

n = numel(Y);

rng(1) % For reproducibility
cvp = cvpartition(n,'Holdout',0.5);
idxtt = training(cvp);
idxil = test(cvp);
shuffidx = randperm(n);
X = feat(shuffidx,:);
Y = Y(shuffidx);

% First half of data
Xtt = X(idxtt,:);
Ytt = Y(idxtt);

% Second half of data
Xil = X(idxil,:);
Yil = Y(idxil);

データの最初の半分に線形分類モデルをあてはめます。

TTMdl = fitclinear(Xtt,Ytt);

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

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

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

  • 分類誤差およびヒンジ損失を使用してモデルの性能を測定

IncrementalMdl = incrementalLearner(TTMdl,'MetricsWarmupPeriod',2000,'MetricsWindowSize',500,...
    'Metrics',["classiferror" "hinge"]);

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

  • 20 個の観測値のチャンクを処理するデータ ストリームをシミュレート。

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

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

% Preallocation
nil = numel(Yil);
numObsPerChunk = 20;
nchunk = ceil(nil/numObsPerChunk);
ce = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
hinge = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
beta1 = 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));
    ce{j,:} = IncrementalMdl.Metrics{"ClassificationError",:};
    hinge{j,:} = IncrementalMdl.Metrics{"HingeLoss",:};
    beta1(j + 1) = IncrementalMdl.Beta(1);
end

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

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

figure;
subplot(3,1,1)
plot(beta1)
ylabel('\beta_1')
xlim([0 nchunk]);
xline(IncrementalMdl.MetricsWarmupPeriod/numObsPerChunk,'r-.');
subplot(3,1,2)
h = plot(ce.Variables);
xlim([0 nchunk]);
ylabel('Classification Error')
xline(IncrementalMdl.MetricsWarmupPeriod/numObsPerChunk,'r-.');
legend(h,ce.Properties.VariableNames,'Location','northwest')
subplot(3,1,3)
h = plot(hinge.Variables);
xlim([0 nchunk]);
ylabel('Hinge Loss')
xline(IncrementalMdl.MetricsWarmupPeriod/numObsPerChunk,'r-.');
legend(h,hinge.Properties.VariableNames,'Location','northwest')
xlabel('Iteration')

Figure contains 3 axes. Axes 1 contains 2 objects of type line, constantline. Axes 2 contains 3 objects of type line, constantline. These objects represent Cumulative, Window. Axes 3 contains 3 objects of type line, constantline. These objects represent Cumulative, Window.

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

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

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

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

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

入力引数

すべて折りたたむ

バイナリ分類用の従来式の学習済み線形モデル。fitclinear によって返される ClassificationLinear モデル オブジェクトとして指定します。

メモ

  • Mdl.Lambda が数値ベクトルの場合、selectModels を使用して、正則化パス内の 1 つの正則化強度に対応するモデルを選択しなければなりません。

  • インクリメンタル学習関数は、数値の入力予測子データのみをサポートします。入力モデル Mdl がカテゴリカル データにあてはめられる場合、dummyvar を使用して、各カテゴリカル変数をダミー変数で構成される数値行列に変換し、すべてのダミー変数行列とその他の数値予測子を連結します。詳細については、ダミー変数を参照してください。

名前と値のペアの引数

オプションの Name,Value 引数のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

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

すべて折りたたむ

目的関数の最小化手法。'Solver' と次の表の値で構成されるコンマ区切りのペアとして指定します。

説明メモ:
'scale-invariant'

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

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

  • 関数 fit でモデルをあてはめる前に入力バッチをシャッフルするには、Shuffletrue に設定します。

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

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

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

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

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

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

例: 'Solver','sgd'

データ型: char | string

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

メモ

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

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

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

例: 'EstimationPeriod',100

データ型: single | double

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

説明
trueソフトウェアが予測子データを標準化します。詳細は、データの標準化を参照してください。
falseソフトウェアが予測子データを標準化しません。

例: 'Standardize',true

データ型: logical

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

すべて折りたたむ

ミニバッチのサイズ。'BatchSize' と正の整数から構成されるコンマ区切りのペアとして指定します。学習中の各反復で、incrementalLearnermin(BatchSize,numObs) 個の観測値を使用して劣勾配を計算します。ここで、numObs は、fit または updateMetricsAndFit に渡される学習データ内の観測値の数です。

  • Mdl.ModelParameters.Solver'sgd' または 'asgd' の場合、'BatchSize' を設定することはできません。代わりに、incrementalLearner によって 'BatchSize'Mdl.ModelParameters.BatchSize に設定されます。

  • それ以外の場合は、BatchSize10 です。

例: 'BatchSize',1

データ型: single | double

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

Mdl.Regularization'ridge (L2)' である場合、次のようになります。

  • Mdl.ModelParameters.Solver'sgd' または 'asgd' の場合、'Lambda' を設定することはできません。代わりに、incrementalLearner によって 'Lambda'Mdl.Lambda に設定されます。

  • それ以外の場合は、Lambda1e-5 です。

メモ

incrementalLearner は、LASSO 正則化をサポートしていません。Mdl.Regularization'lasso (L1)' の場合、incrementalLearner はリッジ正則化を代わりに使用し、名前と値のペアの引数 'Solver' を既定で 'scale-invariant' に設定します。

例: 'Lambda',0.01

データ型: single | double

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

  • Mdl.ModelParameters.Solver'sgd' または 'asgd' の場合、'LearnRate' を設定することはできません。代わりに、incrementalLearner によって 'LearnRate'Mdl.ModelParameters.LearnRate に設定されます。

  • それ以外の場合は、LearnRate'auto' です。

'auto' の場合、次のようになります。

  • EstimationPeriod0 の場合、初期学習率は 0.7 となります。

  • EstimationPeriod0 の場合、初期学習率は 1/sqrt(1+max(sum(X.^2,obsDim))) となります。ここで、観測値が予測子データの列を構成する場合に obsDim1 となり、それ以外の場合に 2 となります。fit および updateMetricsAndFit がモデルおよび学習データを一方の関数に渡すときに値が設定されます。

名前と値のペアの引数 'LearnRateSchedule' によって、後続の学習サイクルの学習率が決まります。

例: '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' の場合、c は 0.75 です [4]

Mdl.ModelParameters.Solver'sgd' または 'asgd' の場合、'LearnRateSchedule' を設定することはできません。

例: 'LearnRateSchedule','constant'

データ型: char | string

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

すべて折りたたむ

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

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

例: 'Shuffle',false

データ型: logical

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

すべて折りたたむ

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

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

名前説明
"binodeviance"二項分布からの逸脱度
"classiferror"分類誤差
"exponential"指数
"hinge"ヒンジ
"logit"ロジスティック
"quadratic"2 次

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

例: 'Metrics',["classiferror" "hinge"]

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

metric = customMetric(C,S)

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

  • 関数名 (customMetric) を指定します。

  • C は n 行 2 列の logical 行列であり、対応する観測値が属するクラスを各行が示します。列の順序は Mdl.ClassNames のクラスの順序に対応します。C を作成するには、指定されたデータの各観測値について観測値 p がクラス q に属する場合に C(p,q) = 1 を設定します。行 p の他の要素を 0 に設定します。

  • S は、予測分類スコアの n 行 2 列の数値行列です。Spredict の出力 score に似ています。ここで、行はデータの観測値に対応し、列の順序は Mdl.ClassNames のクラスの順序に対応しています。S(p,q) は、クラス q に分類されている観測値 p の分類スコアです。

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

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

例: 'Metrics',{@customMetric1 @customeMetric2 'logit' struct('Metric3',@customMetric3)}

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

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

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

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

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

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

データ型: single | double

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

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

データ型: single | double

出力引数

すべて折りたたむ

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

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

プロパティ説明
Beta線形モデル係数。数値ベクトル
Biasモデル切片。数値スカラー
ClassNamesバイナリ分類のクラス ラベル。2 要素のリスト
ModelParameters.FitBias線形モデルの切片使用フラグ
Learner線形分類モデルのタイプ
Prior前のクラス ラベルの分布。数値ベクトル

詳細

すべて折りたたむ

インクリメンタル学習

"インクリメンタル学習" ("オンライン学習") は、予測子変数の分布、予測関数や目的関数の要素 (調整パラメーターの値を含む)、観測値のラベル付けなどがほとんど未知、またはまったく未知の可能性のある、データ ストリームからの入力データの処理に着目した、機械学習の一分野です。インクリメンタル学習が従来の機械学習と異なっているのは、モデルへのあてはめ、ハイパーパラメーター調整のための交差検証の実行、および予測子の分布の推測を行うために、十分にラベル付けされたデータを使用できるということです。

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

  • ラベルの予測。

  • 予測性能の測定。

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

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

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

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

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

分類用のインクリメンタル近似関数 fit および updateMetricsAndFit は、アルゴリズムのより積極的な ScInOL2 バージョンを使用します。

アルゴリズム

すべて折りたたむ

推定期間

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

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

Mu および Sigma

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

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

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

次のいずれの条件にもあてはまる場合

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

  • 名前と値のペアの引数 'LearnRate' を設定していない。

関数は、最後の推定期間の観測値のみをインクリメンタル モデルにあてはめ、モデルの性能の追跡にはそのいかなる観測値も使用しません。推定期間の満了時に、関数はハイパーパラメーターを格納するプロパティを更新します。

データの標準化

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

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

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

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

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

    xj=xjμjσj.

    ここで

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

    • μj=1kwkkwkxjk.

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

    • wj=wjjClass kwjpk,ここで

      • pk はクラス k の事前確率です (インクリメンタル モデルの Prior プロパティ)。

      • 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 個の測定値を使用します。

参照

[1] Kempka, Michał, Wojciech Kotłowski, and Manfred K. Warmuth. "Adaptive Scale-Invariant Online Algorithms for Learning Linear Models." CoRR (February 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 で導入