incrementalLearner
サポート ベクター マシン (SVM) 回帰モデルのインクリメンタル学習器への変換
説明
は、回帰用の従来式の学習済み線形 SVM モデル IncrementalMdl
= incrementalLearner(Mdl
)Mdl
のハイパーパラメーターと係数を使用して、インクリメンタル学習用の線形回帰モデル IncrementalMdl
を返します。プロパティ値は Mdl
から得られた知識を反映しているため、IncrementalMdl
は新しい観測値に対してラベルの予測を行うことができます。また "ウォーム" となるため、予測性能が追跡されます。
は、1 つ以上の名前と値の引数によって指定された追加オプションを使用します。一部のオプションでは、予測性能の追跡を行う前に IncrementalMdl
= incrementalLearner(Mdl
,Name,Value
)IncrementalMdl
に学習させる必要があります。たとえば、'MetricsWarmupPeriod',50,'MetricsWindowSize',100
は、50 個の観測値から成る、パフォーマンス メトリクスの追跡前のインクリメンタル学習の予備期間を指定し、ウィンドウ パフォーマンス メトリクスを更新する前に 100 個の観測値を処理することを指定します。
例
fitrsvm
を使用して SVM 回帰モデルに学習させ、それをインクリメンタル学習器に変換します。
データの読み込みと前処理
2015 年のニューヨーク市住宅データ セットを読み込みます。このデータの詳細については、NYC Open Data を参照してください。
load NYCHousing2015
table から応答変数 SALEPRICE
を抽出します。数値安定性を得るために、SALEPRICE
を 1e6
の尺度でスケールします。
Y = NYCHousing2015.SALEPRICE/1e6; NYCHousing2015.SALEPRICE = [];
カテゴリカル予測子からダミー変数メトリクスを作成します。
catvars = ["BOROUGH" "BUILDINGCLASSCATEGORY" "NEIGHBORHOOD"]; dumvarstbl = varfun(@(x)dummyvar(categorical(x)),NYCHousing2015,... 'InputVariables',catvars); dumvarmat = table2array(dumvarstbl); NYCHousing2015(:,catvars) = [];
table 内の他のすべての数値変数を売価の線形予測子として扱います。ダミー変数の行列を予測子データの残りに連結します。
idxnum = varfun(@isnumeric,NYCHousing2015,'OutputFormat','uniform')
idxnum = 1×6 logical array
1 1 1 1 1 0
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: [312×1 double] Bias: 64.5811 KernelParameters: [1×1 struct] NumObservations: 5000 BoxConstraints: [5000×1 double] ConvergenceInfo: [1×1 struct] IsSupportVector: [5000×1 logical] Solver: 'SMO' Properties, Methods
TTMdl
は従来式の学習済み SVM 回帰モデルを表す RegressionSVM
モデル オブジェクトです。
学習済みモデルの変換
従来式の学習済み SVM 回帰モデルを、インクリメンタル学習用の線形回帰モデルに変換します。
IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl = incrementalRegressionLinear IsWarm: 1 Metrics: [1×2 table] ResponseTransform: 'none' Beta: [312×1 double] Bias: 64.5811 Learner: 'svm' Properties, Methods
IncrementalMdl
は、SVM を使用するインクリメンタル学習用に準備された incrementalRegressionLinear
モデル オブジェクトです。
関数
incrementalLearner
は、学習した係数を、TTMdl
が学習データから抽出した他の情報と共に渡して、インクリメンタル学習器を初期化します。IncrementalMdl
はウォーム (IsWarm
が1
) です。これは、インクリメンタル学習関数がパフォーマンス メトリクスの追跡を開始できることを意味します。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,:);
table から応答変数 SALEPRICE
を抽出します。数値安定性を得るために、SALEPRICE
を 1e6
の尺度でスケールします。
Y = NYCHousing2015.SALEPRICE/1e6; NYCHousing2015.SALEPRICE = [];
カテゴリカル予測子からダミー変数メトリクスを作成します。
catvars = ["BOROUGH" "BUILDINGCLASSCATEGORY" "NEIGHBORHOOD"]; dumvarstbl = varfun(@(x)dummyvar(categorical(x)),NYCHousing2015,... 'InputVariables',catvars); dumvarmat = table2array(dumvarstbl); NYCHousing2015(:,catvars) = [];
table 内の他のすべての数値変数を売価の線形予測子として扱います。ダミー変数の行列を予測子データの残りに連結します。
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);
IncrementalMdl
は incrementalRegressionLinear
モデル オブジェクトです。
関数 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
は、ストリーム内のすべてのデータで学習させた incrementalRegressionLinear
モデル オブジェクトです。
初期学習率と が学習中にどのように進化したかを確認するには、それらを別々のタイルにプロットします。
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')
初期学習率は、推定期間後に 0.7
から自動調整された値に急転します。ソフトウェアでの学習時は、IncrementalMdl
のLearnRateScheduleプロパティで指定された初期値から徐々に減衰する学習率が使用されます。
推定期間中には fit
がモデルをストリーミング データに当てはめないため、 は、最初の 2000 回の反復 (20,000 個の観測値) では定数です。その後、 は、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 個の観測値を一度に処理して、データ ストリームをシミュレートします。
前のインクリメンタル モデルを、入力観測値に当てはめた新しいモデルで上書きします。
推定係数 、累積メトリクス、およびウィンドウ メトリクスを保存し、インクリメンタル学習中にそれらがどのように進化するかを確認します。
% 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
は入力観測値でモデルの性能をチェックし、モデルをその観測値に当てはめます。
パフォーマンス メトリクスと が学習中にどのように進化するかを確認するには、それらを別々のタイルにプロットします。
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')
プロットは、updateMetricsAndFit
が次を行うことを示しています。
をインクリメンタル学習のすべての反復で当てはめます。
パフォーマンス メトリクスをメトリクスのウォームアップ期間後にのみ計算します。
累積メトリクスを各反復中に計算します。
ウィンドウ メトリクスを 500 個の観測値の処理後に計算。
入力引数
回帰用の従来式の学習済み SVM 線形モデル。関数の学習または処理によって返されるモデル オブジェクトとして指定します。
モデル オブジェクト | 学習または処理を行う関数 |
---|---|
RegressionSVM | fitrsvm |
CompactRegressionSVM | fitrsvm または compact |
メモ
インクリメンタル学習関数は、数値の入力予測子データのみをサポートします。Mdl
に categorical データで学習させた場合、インクリメンタル学習関数を使用するには符号化したバージョンの categorical データを準備する必要があります。dummyvar
を使用して、各カテゴリカル変数をダミー変数で構成される数値行列に変換します。その後、学習関数での categorical データの符号化と同じ方法で、すべてのダミー変数行列とその他の数値予測子を連結します。詳細については、ダミー変数を参照してください。
名前と値の引数
オプションの引数のペアを 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
学習率スケジュール。'LearnRateSchedule'
と次の表の値で構成されるコンマ区切りのペアとして指定します。ここで、LearnRate
は初期学習率 ɣ0 を指定します。
値 | 説明 |
---|---|
'constant' | すべての学習サイクルの学習率を ɣ0 とする。 |
'decaying' | 学習サイクル t での学習率を次とする。
|
例: '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_ 。ここで、 は Metrics のメトリクス
| @(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
が正の場合にのみ発生します。次の表は、ハイパーパラメーターとそれらが推定または調整される条件について説明します。
ハイパーパラメーター | モデル プロパティ | 使用法 | 条件 |
---|---|---|---|
予測子の平均および標準偏差 |
| 標準化された予測子データ | ハイパーパラメーターは推定されません。 |
学習率 | LearnRate | ソルバーのステップ サイズの調整 | 次のいずれの条件にも当てはまる場合は、ハイパーパラメーターが推定されます。
|
推定期間中には、fit
がモデルを当てはめることも、updateMetricsAndFit
がモデルを当てはめたりパフォーマンス メトリクスを更新したりすることもありません。推定期間の満了時に、関数はハイパーパラメーターを格納するプロパティを更新します。
予測子変数を標準化するようにインクリメンタル学習関数が構成されている場合、インクリメンタル学習モデル IncrementalMdl
の Mu
および Sigma
プロパティに保存されている平均と標準偏差を使用して標準化が行われます。
fitrsvm
を使用して入力モデルMdl
に学習させるときに予測子データを標準化する場合、次の条件が適用されます。incrementalLearner
は、Mdl.Mu
の平均とMdl.Sigma
の標準偏差をインクリメンタル学習モデルの対応するプロパティに渡します。インクリメンタル学習関数は予測子データを常に標準化します。
インクリメンタル近似関数が予測子の平均と標準偏差を推定するとき、関数は推定期間の観測値を使用して加重平均と加重標準偏差を計算します。具体的には、関数は予測子 j (xj) の標準化のために次を使用します。
xj は予測子 j、xjk は推定期間内の予測子 j の観測値 k です。
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)