incrementalLearner
バイナリ分類サポート ベクター マシン (SVM) モデルのインクリメンタル学習器への変換
説明
は、IncrementalMdl = incrementalLearner(Mdl)Mdl の従来式の学習済み線形 SVM モデル オブジェクトまたは SVM モデル テンプレート オブジェクトを使用して、インクリメンタル学習用のバイナリ分類線形モデル IncrementalMdl を返します。
従来式の学習済みモデルを指定する場合、そのプロパティの値は Mdl から得られた知識 (モデルのパラメーターとハイパーパラメーター) を反映した内容になります。そのため、IncrementalMdl は新しい観測値に対してラベルの予測を行うことができます。また "ウォーム" となるため、予測性能が追跡されます。
は、1 つ以上の名前と値の引数によって指定された追加オプションを使用します。一部のオプションでは、予測性能の追跡を行う前に IncrementalMdl = incrementalLearner(Mdl,Name,Value)IncrementalMdl に学習させる必要があります。たとえば、'MetricsWarmupPeriod',50,'MetricsWindowSize',100 は、50 個の観測値から成る、パフォーマンス メトリクスの追跡前のインクリメンタル学習の予備期間を指定し、ウィンドウ パフォーマンス メトリクスを更新する前に 100 個の観測値を処理することを指定します。
例
fitcsvm を使用して SVM モデルに学習させ、それをインクリメンタル学習器に変換します。
データの読み込みと前処理
人の行動のデータ セットを読み込みます。
load humanactivityデータ セットの詳細については、コマンド ラインで Description を入力してください。
応答は、次の 5 つのクラスのいずれかになります。Sitting、Standing、Walking、Running、または Dancing。被験者が移動しているかどうか (actid > 2) を基準に、応答を二分します。
Y = actid > 2;
SVM モデルの学習
SVM モデルをデータ セット全体に当てはめます。サポート ベクター (Alpha) をモデルから破棄して、ソフトウェアが予測に線形係数 (Beta) 使用するようにします。
TTMdl = fitcsvm(feat,Y); TTMdl = discardSupportVectors(TTMdl)
TTMdl =
ClassificationSVM
ResponseName: 'Y'
CategoricalPredictors: []
ClassNames: [0 1]
ScoreTransform: 'none'
NumObservations: 24075
Beta: [60×1 double]
Bias: -6.4280
KernelParameters: [1×1 struct]
BoxConstraints: [24075×1 double]
ConvergenceInfo: [1×1 struct]
IsSupportVector: [24075×1 logical]
Solver: 'SMO'
Properties, Methods
TTMdl は、従来式の学習済み SVM モデルを表す ClassificationSVM モデル オブジェクトです。
学習済みモデルの変換
従来式の学習済み SVM モデルを、インクリメンタル学習用のバイナリ分類線形モデルに変換します。
IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl =
incrementalClassificationLinear
IsWarm: 1
Metrics: [1×2 table]
ClassNames: [0 1]
ScoreTransform: 'none'
Beta: [60×1 double]
Bias: -6.4280
Learner: 'svm'
Properties, Methods
IncrementalMdl は、SVM を使用するインクリメンタル学習用に準備された incrementalClassificationLinear モデル オブジェクトです。
関数
incrementalLearnerは、学習した係数を、TTMdlが学習データから抽出した他の情報と共に渡して、インクリメンタル学習器を初期化します。IncrementalMdlはウォーム (IsWarmが1) です。これは、インクリメンタル学習関数がパフォーマンス メトリクスの追跡を開始できることを意味します。fitcsvmがSMOソルバーを使用してTTMdlに学習させるのに対し、関数incrementalLearnerは、適応型スケール不変ソルバーを使用してモデルに学習させるよう指定します。
応答予測
従来式の学習済みモデルから変換して作成したインクリメンタル学習器は、追加の処理なしで予測を生成できます。
両方のモデルを使用して、すべての観測値の分類スコアを予測します。
[~,ttscores] = predict(TTMdl,feat); [~,ilcores] = predict(IncrementalMdl,feat); compareScores = norm(ttscores(:,1) - ilcores(:,1))
compareScores = 0
モデルによって生成されたスコアの差は 0 です。
既定のソルバーは、適応型スケール不変ソルバーです。このソルバーを指定した場合、学習のためにパラメーターを調整する必要はありません。ただし、代わりに標準 SGD または ASGD ソルバーのいずれかを指定する場合は、推定期間を指定することもできます。その間、インクリメンタル近似関数は学習率を調整します。
人の行動のデータ セットを読み込みます。
load humanactivityデータ セットの詳細については、コマンド ラインで Description を入力してください。
応答は、次の 5 つのクラスのいずれかになります。Sitting、Standing、Walking、Running、および Dancing。被験者が移動しているかどうか (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);
データの最初の半分に SVM モデルを当てはめます。'Standardize',true を設定して予測子データを標準化します。
TTMdl = fitcsvm(Xtt,Ytt,'Standardize',true);TTMdl の Mu および Sigma プロパティには、予測子のデータ標本の平均と標準偏差がそれぞれ含まれます。
予測子変数の分布は今後変化しないことが予想されるとします。従来式の学習済み SVM モデルを、インクリメンタル学習用のバイナリ分類線形モデルに変換します。標準 SGD ソルバーを指定し、推定期間を 2000 個の観測値に指定します (学習率が必要な場合の既定は 1000)。
IncrementalMdl = incrementalLearner(TTMdl,'Solver','sgd','EstimationPeriod',2000);
IncrementalMdl は incrementalClassificationLinear モデル オブジェクトです。TTMdl の予測子データは標準化されているため (TTMdl.Mu および TTMdl.Sigma が空ではない)、incrementalLearner は、前に学習したモーメント (IncrementalMdl.Mu および IncrementalMdl.Sigma に格納されている) を使用して、提供された予測子データを標準化するためのインクリメンタル学習関数を準備します。
関数 fit を使用して、インクリメンタル モデルをデータの残りの半分に当てはめます。各反復で次を行います。
10 個の観測値を一度に処理して、データ ストリームをシミュレート。
前のインクリメンタル モデルを、入力観測値に当てはめた新しいモデルで上書きします。
初期学習率と を保存して、係数と比率が学習中にどのように進化したかを確認。
% 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 は、ストリーム内のすべてのデータで学習させた incrementalClassificationLinear モデル オブジェクトです。
初期学習率と が学習中にどのように進化したかを確認するには、それらを別々のタイルにプロットします。
t = tiledlayout(2,1); nexttile plot(beta1) ylabel('\beta_1') xline(IncrementalMdl.EstimationPeriod/numObsPerChunk,'r-.') nexttile plot(learnrate) ylabel('Initial Learning Rate') xline(IncrementalMdl.EstimationPeriod/numObsPerChunk,'r-.') xlabel(t,'Iteration')

初期学習率は、推定期間後に 0.7 から自動調整された値に急転します。ソフトウェアでの学習時は、IncrementalMdl のLearnRateScheduleプロパティで指定された初期値から徐々に減衰する学習率が使用されます。
推定期間中には fit がモデルをストリーミング データに当てはめないため、 は、最初の 200 回の反復 (2000 個の観測値) では定数です。その後、 はインクリメンタル近似中に変動します。
学習済みの SVM モデルを使用して、インクリメンタル学習器を初期化します。メトリクスのウォームアップ期間を指定して、インクリメンタル学習器を準備します。その間、関数updateMetricsAndFitはモデルの当てはめのみを行います。メトリクス ウィンドウ サイズを観測値 500 個に指定します。
人の行動のデータ セットを読み込みます。
load humanactivityデータ セットの詳細については、コマンド ラインで Description を入力してください。
応答は、次の 5 つのクラスのいずれかになります。Sitting、Standing、Walking、Running、および Dancing。被験者が移動しているかどうか (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);
データの最初の半分に SVM モデルを当てはめます。
TTMdl = fitcsvm(Xtt,Ytt);
従来式の学習済み SVM モデルを、インクリメンタル学習用のバイナリ分類線形モデルに変換します。次を指定します。
メトリクスのウォームアップ期間は観測値 2000 個
メトリクス ウィンドウ サイズは観測値 500 個
分類誤差およびヒンジ損失を使用してモデルの性能を測定
IncrementalMdl = incrementalLearner(TTMdl,'MetricsWarmupPeriod',2000,'MetricsWindowSize',500,... 'Metrics',["classiferror" "hinge"]);
関数 updateMetricsAndFit を使用して、インクリメンタル モデルをデータの残りの半分に当てはめます。各反復で次を行います。
20 個の観測値を一度に処理して、データ ストリームをシミュレートします。
前のインクリメンタル モデルを、入力観測値に当てはめた新しいモデルで上書きします。
、累積メトリクス、およびウィンドウ メトリクスを保存し、インクリメンタル学習中にそれらがどのように進化するかを確認。
% 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 = [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 = 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 は入力観測値でモデルの性能をチェックし、モデルをその観測値に当てはめます。
パフォーマンス メトリクスと が学習中にどのように進化するかを確認するには、それらを別々のタイルにプロットします。
t = tiledlayout(3,1); nexttile plot(beta1) ylabel('\beta_1') xlim([0 nchunk]); xline(IncrementalMdl.MetricsWarmupPeriod/numObsPerChunk,'r-.'); nexttile h = plot(ce.Variables); xlim([0 nchunk]); ylabel('Classification Error') xline(IncrementalMdl.MetricsWarmupPeriod/numObsPerChunk,'r-.'); legend(h,ce.Properties.VariableNames,'Location','northwest') nexttile h = plot(hinge.Variables); xlim([0 nchunk]); ylabel('Hinge Loss') xline(IncrementalMdl.MetricsWarmupPeriod/numObsPerChunk,'r-.'); legend(h,hinge.Properties.VariableNames,'Location','northwest') xlabel(t,'Iteration')

プロットは、updateMetricsAndFit が次を行うことを示しています。
をインクリメンタル学習のすべての反復で当てはめます。
パフォーマンス メトリクスをメトリクスのウォームアップ期間後にのみ計算します。
累積メトリクスを各反復中に計算します。
ウィンドウ メトリクスを 500 個の観測値 (25 回の反復) の処理後に計算します。
入力引数
従来式の学習済み線形 SVM モデルまたは SVM モデル テンプレート。学習関数または処理関数によって返されるモデル オブジェクトとして指定します。
| モデル オブジェクトまたはテンプレート オブジェクト | 学習または処理を行う関数 |
|---|---|
ClassificationSVM モデル オブジェクト | fitcsvm |
CompactClassificationSVM モデル オブジェクト | fitcsvm または compact |
| SVM モデル テンプレート オブジェクト | templateSVM |
メモ
インクリメンタル学習関数は、数値の入力予測子データのみをサポートします。
Mdlに categorical データで学習させた場合、インクリメンタル学習関数を使用するには符号化したバージョンの categorical データを準備する必要があります。dummyvarを使用して、各カテゴリカル変数をダミー変数で構成される数値行列に変換します。その後、学習関数での categorical データの符号化と同じ方法で、すべてのダミー変数行列とその他の数値予測子を連結します。詳細については、ダミー変数を参照してください。Mdlが SVM モデル テンプレート オブジェクトの場合、incrementalLearnerは予測子変数を標準化するかどうかをモデル テンプレート オブジェクトのStandardizeプロパティに基づいて決定します。詳細については、データの標準化を参照してください。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。
例: 'Solver','scale-invariant','MetricsWindowSize',100 は、目的関数の最適化用に適応型スケール不変ソルバーを指定し、ウィンドウ パフォーマンス メトリクスを更新する前に 100 個の観測値を処理することを指定します。
一般オプション
目的関数の最小化手法。次の表の値として指定します。
| 値 | 説明 | メモ: |
|---|---|---|
'scale-invariant' |
| |
'sgd' | 確率的勾配降下法 (SGD) [3][2] |
|
'asgd' | 平均化確率的勾配降下法 (ASGD) [4] |
|
インクリメンタル学習用の線形モデル (IncrementalMdl) では、従来式の学習済み線形 SVM モデル Mdl の学習に使用されるソルバーや SVM モデル テンプレート オブジェクト Mdl で指定されたソルバーはサポートされません。既定では、関数 incrementalLearner は IncrementalMdl を設定して適応型スケール不変ソルバー ('scale-invariant') を使用します。
例: 'Solver','sgd'
データ型: char | string
ハイパーパラメーターの推定のために、パフォーマンス メトリクスの学習または追跡の前にインクリメンタル モデルが処理する観測値の数。'EstimationPeriod' と非負の整数で構成されるコンマ区切りのペアとして指定します。
メモ
Mdlをインクリメンタル学習用に準備する場合 (学習に必要なすべてのハイパーパラメーターを指定する必要があります)、incrementalLearnerはEstimationPeriodを0に強制します。Mdlをインクリメンタル学習用に準備しない場合、incrementalLearnerはEstimationPeriodを1000に設定します。
詳細は、推定期間を参照してください。
例: 'EstimationPeriod',100
データ型: single | double
SGD および ASGD ソルバーのオプション
ミニバッチのサイズ。'BatchSize' と正の整数から構成されるコンマ区切りのペアとして指定します。学習中の各学習サイクルで、incrementalLearner は BatchSize 個の観測値を使用して劣勾配を計算します。
最後のミニバッチ (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
適応型スケール不変ソルバーのオプション
各反復でのバッチ内観測値のシャッフル フラグ。'Shuffle' と次の表の値で構成されるコンマ区切りのペアとして指定します。
| 値 | 説明 |
|---|---|
true | ソフトウェアが、関数 fit でモデルを当てはめる前に、データの入力チャンクをシャッフルします。このアクションにより、抽出スキームによって誘発されるバイアスが低減されます。 |
false | ソフトウェアが、受信した順序でデータを処理します。 |
例: 'Shuffle',false
データ型: logical
パフォーマンス メトリクス オプション
関数 updateMetrics または updateMetricsAndFit を使ってインクリメンタル学習中に追跡するモデルのパフォーマンス メトリクス。組み込みの損失関数の名前、名前の string ベクトル、関数ハンドル (@metricName)、関数ハンドルの構造体配列、または名前、関数ハンドル、構造体配列の cell ベクトルとして指定します。
次の表は、組み込みの損失関数名の一覧です。string ベクトルを使用して、複数指定できます。
| 名前 | 説明 |
|---|---|
"binodeviance" | 二項分布からの逸脱度 |
"classiferror" | 分類誤差 |
"exponential" | 指数損失 |
"hinge" | ヒンジ損失 |
"logit" | ロジスティック損失 |
"quadratic" | 二次損失 |
組み込み損失関数の詳細については、loss を参照してください。
例: 'Metrics',["classiferror" "hinge"]
パフォーマンス メトリクスを返すカスタム関数を指定するには、関数ハンドル表記を使用します。関数は次の形式でなければなりません。
metric = customMetric(C,S)
出力引数
metricは n 行 1 列の数値ベクトルです。ここで、各要素は、学習サイクル中にインクリメンタル学習関数によって処理されたデータの対応する観測値の損失です。関数名 (
customMetric) を指定します。Cは n 行 2 列の logical 行列であり、対応する観測値が属するクラスを各行が示します。列の順序はインクリメンタル学習用のモデルにおけるクラスの順序に対応します。Cを作成するには、指定されたデータの各観測値について観測値がクラスpに属する場合にqC(=p,q)1を設定します。行の他の要素をp0に設定します。Sは、予測分類スコアの n 行 2 列の数値行列です。Sはpredictの出力scoreに似ています。ここで、行はデータの観測値に対応し、列の順序はインクリメンタル学習用のモデルにおけるクラスの順序に対応しています。S(は、クラスp,q)に分類されている観測値qの分類スコアです。p
複数のカスタム メトリクスを指定し、それぞれにカスタム名を割り当てるには、構造体配列を使用します。組み込みメトリクスとカスタム メトリクスの組み合わせを指定するには、cell ベクトルを使用します。
例: 'Metrics',struct('Metric1',@customMetric1,'Metric2',@customMetric2)
例: 'Metrics',{@customMetric1 @customMetric2 'logit' struct('Metric3',@customMetric3)}
updateMetrics および updateMetricsAndFit は、table で指定したメトリクスをプロパティ IncrementalMdl.Metrics に保存します。Metrics のデータ型によって、table の行名が決まります。
'Metrics' 値のデータ型 | Metrics プロパティの行名の説明 | 例 |
|---|---|---|
| string または文字ベクトル | 対応する組み込みメトリクスの名前 | "classiferror" の行名は "ClassificationError" |
| 構造体配列 | フィールド名 | struct('Metric1',@customMetric1) の行名は "Metric1" |
| プログラム ファイルに格納されている関数への関数ハンドル | 関数名 | @customMetric の行名は "customMetric" |
| 無名関数 | CustomMetric_。ここで、 は Metrics のメトリクス | @(C,S)customMetric(C,S)... の行名は CustomMetric_1 |
パフォーマンス メトリクス オプションの詳細については、パフォーマンス メトリクスを参照してください。
データ型: char | string | struct | cell | function_handle
インクリメンタル モデルが Metrics プロパティのパフォーマンス メトリクスを追跡する前に当てはめなければならない観測値の数。非負の整数として指定します。インクリメンタル モデルは、インクリメンタル近似関数が (EstimationPeriod + MetricsWarmupPeriod) 個の観測値をインクリメンタル モデルに当てはめた後にウォームになります。
パフォーマンス メトリクス オプションの詳細については、パフォーマンス メトリクスを参照してください。
例: 'MetricsWarmupPeriod',50
データ型: single | double
ウィンドウ パフォーマンス メトリクスの計算に使用する観測値の数。正の整数として指定します。
パフォーマンス メトリクス オプションの詳細については、パフォーマンス メトリクスを参照してください。
例: 'MetricsWindowSize',100
データ型: single | double
出力引数
インクリメンタル学習用のバイナリ分類線形モデル。incrementalClassificationLinear モデル オブジェクトとして返されます。IncrementalMdl は新しいデータに基づいて予測を生成するようにも構成されます (predict を参照)。
Mdlで従来式の学習済みモデル オブジェクトを指定した場合、incrementalLearnerはMdlのプロパティの値をIncrementalMdlの対応するプロパティに渡してIncrementalMdlを初期化します。プロパティ 説明 Betaスケーリングされた線形モデル係数。 Mdl.Beta/Mdl.KernelParameters.Scale。数値ベクトルBiasモデル切片。数値スカラー ClassNamesバイナリ分類のクラス ラベル。2 要素のリスト Mu予測子変数の平均。数値ベクトル NumPredictors予測子の数。正の整数 Prior前のクラス ラベルの分布。数値ベクトル Sigma予測子変数の標準偏差。数値ベクトル ScoreTransformスコア変換関数。関数名または関数ハンドル Mdlの従来式学習済みモデルのCostプロパティは、incrementalClassificationLinearでサポートされないため、incrementalLearnerで使用されないことに注意してください。
詳細
"インクリメンタル学習" ("オンライン学習") は、予測子変数の分布、予測関数や目的関数の素性 (調整パラメーターの値を含む)、観測値にラベル付けがされているか等についてほぼ知識が無い時に、データ ストリームから入ってくるデータを処理することに関係している機械学習の一分野です。従来の機械学習は、モデルへの当てはめに十分にラベル付けされたデータを使用でき、交差検証を実施してハイパーパラメーターを調整し、予測子の分布を推論するもので、インクリメンタル学習と異なります。
入力観測値に対し、インクリメンタル学習モデルは、次のいずれかの方法 (通常はこの順序) でデータを処理します。
ラベルを予測します。
予測性能を測定します。
モデルの構造的な破綻やドリフトについてチェックします。
入力観測値へモデルを当てはめます。
詳細については、インクリメンタル学習の概要を参照してください。
"インクリメンタル学習用の適応型スケール不変ソルバー" ([1]で紹介) は、線形予測モデルに学習させるための勾配降下法ベースの目的ソルバーです。ソルバーはハイパーパラメーターを持たず、予測子変数のスケールの違いの影響を受けず、予測子変数の分布の事前知識が不要です。これらの特徴は、インクリメンタル学習に適しています。
標準 SGD および ASGD ソルバーは、予測子変数間のスケールの違いの影響を受けやすいため、モデルの性能低下につながることがあります。SGD および ASGD を使用して精度を向上させるには、予測子データを標準化し、正則化と学習率のパラメーターを調整できます。従来の機械学習では、交差検証と予測子を標準化してハイパーパラメーター調整を行うのに十分なデータが利用できます。しかし、インクリメンタル学習の場合、十分なデータが利用できず (たとえば、観測値が一度に 1 つしか利用できない場合があります)、予測子の分布が未知である場合があります。このような特徴があるため、インクリメンタル学習中のパラメーター調整と予測子の標準化は困難または不可能です。
分類用のインクリメンタル近似関数 fit および updateMetricsAndFit は、アルゴリズムのより積極的な ScInOL2 バージョンを使用します。
アルゴリズム
推定期間中、インクリメンタル近似関数 fit および updateMetricsAndFit は、最初の EstimationPeriod 個の入力観測値を使用して、インクリメンタル学習に必要なハイパーパラメーターを推定 (調整) します。推定は EstimationPeriod が正の場合にのみ発生します。次の表は、ハイパーパラメーターとそれらが推定または調整される条件について説明します。
| ハイパーパラメーター | モデル プロパティ | 使用法 | 条件 |
|---|---|---|---|
| 予測子の平均および標準偏差 |
| 標準化された予測子データ | 次のいずれの条件にも当てはまる場合は、ハイパーパラメーターが推定されます。
|
| 学習率 | LearnRate | ソルバーのステップ サイズの調整 | 次のいずれの条件にも当てはまる場合は、ハイパーパラメーターが推定されます。
|
推定期間中には、fit がモデルを当てはめることも、updateMetricsAndFit がモデルを当てはめたりパフォーマンス メトリクスを更新したりすることもありません。推定期間の満了時に、関数はハイパーパラメーターを格納するプロパティを更新します。
予測子変数を標準化するようにインクリメンタル学習関数が構成されている場合、インクリメンタル学習モデル IncrementalMdl の Mu および Sigma プロパティに保存されている平均と標準偏差を使用して標準化が行われます。
fitcsvmを使用して入力モデルMdlに学習させるときに予測子データを標準化する場合、次の条件が適用されます。incrementalLearnerは、Mdl.Muの平均とMdl.Sigmaの標準偏差をインクリメンタル学習モデルの対応するプロパティに渡します。インクリメンタル学習関数は予測子データを常に標準化します。
templateSVMの名前と値の引数Standardizeを使用してStandardize=trueを設定した場合、Mdl.MuおよびMdl.Sigmaのプロパティが空のときは次の条件が適用されます。推定期間が正の場合 (
IncrementalMdlのEstimationPeriodプロパティを参照)、インクリメンタル近似関数は推定期間の観測値を使用して平均と標準偏差を推定します。推定期間が 0 の場合、
incrementalLearnerは推定期間を1000に強制します。その結果、インクリメンタル近似関数が推定するのは、強制された推定期間中の新しい予測子変数の平均と標準偏差になります。
インクリメンタル近似関数が予測子の平均と標準偏差を推定するとき、関数は推定期間の観測値を使用して加重平均と加重標準偏差を計算します。具体的には、関数は予測子 j (xj) の標準化のために次を使用します。
xj は予測子 j、xjk は推定期間内の予測子 j の観測値 k です。
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))。ウィンドウ内のパフォーマンス メトリクスを追跡するインクリメンタル関数は、次のプロセスを使用します。
指定された各メトリクスについて長さ
MetricsWindowSizeのバッファーを保存し、観測値の重みのバッファーを保存します。入力観測値のバッチに基づくモデル性能をメトリクス バッファーの要素に入力し、対応する観測値の重みを重みバッファーに格納します。
バッファーがいっぱいになると、
IncrementalMdl.Metrics.Windowをメトリクス ウィンドウの性能の加重平均で上書きします。関数が観測値のバッチを処理するときにバッファーがあふれる場合、最新の入力観測値MetricsWindowSizeがバッファーに入り、最も古い観測値がバッファーから削除されます。たとえば、MetricsWindowSizeが 20 で、メトリクス バッファーには前に処理されたバッチからの 10 個の値が存在し、15 個の値が入力されるとします。長さ 20 のウィンドウを構成するため、関数は 15 個の入力観測値からの測定値と前のバッチからの最新の 5 個の測定値を使用します。
CumulativeとWindowのパフォーマンス メトリクスの値を計算する際、スコアが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 で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)