このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
incrementalLearner
説明
は、従来式の学習済みガウス カーネル回帰モデル IncrementalMdl
= incrementalLearner(Mdl
)Mdl
のパラメーターとハイパーパラメーターを使用して、インクリメンタル学習用のガウス カーネル回帰モデル IncrementalMdl
を返します。プロパティ値は Mdl
から得られた知識を反映しているため、IncrementalMdl
は新しい観測値に対して応答の予測を行うことができます。また "ウォーム" となるため、予測性能が追跡されます。
は、1 つ以上の名前と値の引数によって指定された追加オプションを使用します。一部のオプションでは、予測性能の追跡を行う前に IncrementalMdl
= incrementalLearner(Mdl
,Name=Value
)IncrementalMdl
に学習させる必要があります。たとえば、MetricsWarmupPeriod=50,MetricsWindowSize=100
は、50 個の観測値から成る、パフォーマンス メトリクスの追跡前のインクリメンタル学習の予備期間を指定し、ウィンドウ パフォーマンス メトリクスを更新する前に 100 個の観測値を処理することを指定します。
例
従来式の学習済みモデルのインクリメンタル学習器への変換
fitrkernel
を使用してカーネル回帰モデルに学習させ、それをインクリメンタル学習器に変換します。
データの読み込みと前処理
2015 年のニューヨーク市住宅データ セットを読み込みます。このデータの詳細については、NYC Open Data を参照してください。
load NYCHousing2015
テーブルから応答変数 SALEPRICE
を抽出します。数値安定性を得るために、SALEPRICE
を 1e6
の尺度でスケールします。
Y = NYCHousing2015.SALEPRICE/1e6; NYCHousing2015.SALEPRICE = [];
この例の計算コストを削減するために、254 個のカテゴリをもつカテゴリカル変数が含まれている NEIGHBORHOOD
列を削除します。
NYCHousing2015.NEIGHBORHOOD = [];
他のカテゴリカル予測子からダミー変数メトリクスを作成します。
catvars = ["BOROUGH","BUILDINGCLASSCATEGORY"]; dumvarstbl = varfun(@(x)dummyvar(categorical(x)),NYCHousing2015, ... InputVariables=catvars); dumvarmat = table2array(dumvarstbl); NYCHousing2015(:,catvars) = [];
テーブル内の他のすべての数値変数を売価の予測子として扱います。ダミー変数の行列を予測子データの残りに連結します。
idxnum = varfun(@isnumeric,NYCHousing2015,OutputFormat="uniform");
X = [dumvarmat NYCHousing2015{:,idxnum}];
カーネル回帰モデルの学習
カーネル回帰モデルをデータ セット全体に当てはめます。
Mdl = fitrkernel(X,Y)
Mdl = RegressionKernel ResponseName: 'Y' Learner: 'svm' NumExpansionDimensions: 2048 KernelScale: 1 Lambda: 1.0935e-05 BoxConstraint: 1 Epsilon: 0.0549
Mdl
は従来式の学習済みカーネル回帰モデルを表す RegressionKernel
モデル オブジェクトです。
学習済みモデルの変換
従来式の学習済みカーネル回帰モデルをインクリメンタル学習用のモデルに変換します。
IncrementalMdl = incrementalLearner(Mdl)
IncrementalMdl = incrementalRegressionKernel IsWarm: 1 Metrics: [1x2 table] ResponseTransform: 'none' NumExpansionDimensions: 2048 KernelScale: 1
IncrementalMdl
は、インクリメンタル学習用に準備された incrementalRegressionKernel
モデル オブジェクトです。
関数
incrementalLearner
は、モデル パラメーターを、Mdl
が学習データから抽出した他の情報と共に渡して、インクリメンタル学習器を初期化します。IncrementalMdl
はウォーム (IsWarm
が1
) です。これは、インクリメンタル学習関数がパフォーマンス メトリクスの追跡を開始できることを意味します。fitrkernel
がメモリ制限 Broyden-Fletcher-Goldfarb-Shanno (LBFGS) ソルバーを使用してMdl
に学習させるのに対し、incrementalRegressionKernel
は適応型スケール不変ソルバーを使用してモデルに学習させます。
応答予測
従来式の学習済みモデルから変換して作成したインクリメンタル学習器は、追加の処理なしで予測を生成できます。
両方のモデルを使用して、すべての観測値の売価を予測します。
ttyfit = predict(Mdl,X); ilyfit = predict(IncrementalMdl,X); compareyfit = norm(ttyfit - ilyfit)
compareyfit = 0
モデルによって生成された当てはめた値の差は 0 です。
パフォーマンス メトリクス オプションの構成
学習済みのカーネル回帰モデルを使用して、インクリメンタル学習器を初期化します。メトリクスのウォームアップ期間とメトリクス ウィンドウ サイズを指定して、インクリメンタル学習器を準備します。
ロボット アームのデータ セットを読み込みます。
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);
カーネル回帰モデルを最初のセットに当てはめます。
TTMdl = fitrkernel(Xtt,Ytt);
従来式の学習済みカーネル回帰モデルをインクリメンタル学習用のモデルに変換します。次を指定します。
メトリクスのウォームアップ期間は観測値 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"]); numtrainobs = [IncrementalMdl.NumTrainingObservations; 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",:}; numtrainobs(j+1) = IncrementalMdl.NumTrainingObservations; end
IncrementalMdl
は、ストリーム内のすべてのデータで学習させた incrementalRegressionKernel
モデル オブジェクトです。インクリメンタル学習中およびモデルがウォームアップされた後、updateMetricsAndFit
は入力観測値でモデルの性能をチェックし、モデルをその観測値に当てはめます。
学習観測値の数とパフォーマンス メトリクスのトレース プロットを別々のタイルにプロットします。
t = tiledlayout(4,1); nexttile plot(numtrainobs) xlim([0 nchunk]) xline(IncrementalMdl.MetricsWarmupPeriod/numObsPerChunk,"--") ylabel(["Number of Training","Observations"]) nexttile plot(ei.Variables) xlim([0 nchunk]) ylabel(["Epsilon Insensitive","Loss"]) xline(IncrementalMdl.MetricsWarmupPeriod/numObsPerChunk,"--") legend(ei.Properties.VariableNames,Location="best") nexttile plot(mse.Variables) xlim([0 nchunk]) ylabel("MSE") xline(IncrementalMdl.MetricsWarmupPeriod/numObsPerChunk,"--") nexttile plot(mae.Variables) xlim([0 nchunk]) ylabel("MAE") xline(IncrementalMdl.MetricsWarmupPeriod/numObsPerChunk,"--") xlabel(t,"Iteration")
プロットは、updateMetricsAndFit
が次を行うことを示しています。
モデルをインクリメンタル学習のすべての反復で当てはめ。
パフォーマンス メトリクスをメトリクスのウォームアップ期間後にのみ計算。
累積メトリクスを各反復中に計算。
ウィンドウ メトリクスを 500 個の観測値の処理後に計算。
SGD ソルバーの指定
incrementalRegressionKernel
の既定のソルバーは適応型スケール不変ソルバーです。このソルバーの場合、モデルを当てはめる前にハイパーパラメーターの調整は必要ありません。ただし、代わりに標準確率的勾配降下 (SGD) ソルバーまたは平均化 SGD (ASGD) ソルバーのいずれかを指定する場合は、推定期間を指定することもできます。その間、インクリメンタル近似関数は学習率を調整します。
2015 年のニューヨーク市住宅データ セットを読み込み、シャッフルします。このデータの詳細については、NYC Open Data を参照してください。
load NYCHousing2015 rng(1) % For reproducibility n = size(NYCHousing2015,1); shuffidx = randsample(n,n); NYCHousing2015 = NYCHousing2015(shuffidx,:);
テーブルから応答変数 SALEPRICE
を抽出します。数値安定性を得るために、SALEPRICE
を 1e6
の尺度でスケールします。
Y = NYCHousing2015.SALEPRICE/1e6; NYCHousing2015.SALEPRICE = [];
この例の計算コストを削減するために、254 個のカテゴリをもつカテゴリカル変数が含まれている NEIGHBORHOOD
列を削除します。
NYCHousing2015.NEIGHBORHOOD = [];
カテゴリカル予測子からダミー変数メトリクスを作成します。
catvars = ["BOROUGH","BUILDINGCLASSCATEGORY"]; 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);
カーネル回帰モデルをデータの 5% に当てはめます。
Mdl = fitrkernel(Xtt,Ytt);
従来式の学習済みカーネル回帰モデルをインクリメンタル学習用のモデルに変換します。標準 SGD ソルバーを指定し、推定期間を 2e4
個の観測値に指定します (学習率が必要な場合の既定は 1000
)。
IncrementalMdl = incrementalLearner(Mdl,Solver="sgd",EstimationPeriod=2e4);
IncrementalMdl
はインクリメンタル学習用に構成された incrementalRegressionKernel
モデル オブジェクトです。
関数 fit
を使用して、インクリメンタル モデルを残りのデータに当てはめます。各反復で次を行います。
10 個の観測値を一度に処理して、データ ストリームをシミュレート。
前のインクリメンタル モデルを、入力観測値に当てはめた新しいモデルで上書き。
初期学習率と学習観測値の数を保存して、学習中にそれらがどのように進化するかを確認。
% Preallocation nil = numel(Yil); numObsPerChunk = 10; nchunk = floor(nil/numObsPerChunk); learnrate = [zeros(nchunk,1)]; numtrainobs = [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)); learnrate(j) = IncrementalMdl.SolverOptions.LearnRate; numtrainobs(j) = IncrementalMdl.NumTrainingObservations; end
IncrementalMdl
は、ストリーム内のすべてのデータで学習させた incrementalRegressionKernel
モデル オブジェクトです。
学習観測値の数と初期学習率のトレース プロットを別々のタイルにプロットします。
t = tiledlayout(2,1); nexttile plot(numtrainobs) xlim([0 nchunk]) xline(IncrementalMdl.EstimationPeriod/numObsPerChunk,"-."); ylabel("Number of Training Observations") nexttile plot(learnrate) xlim([0 nchunk]) ylabel("Initial Learning Rate") xline(IncrementalMdl.EstimationPeriod/numObsPerChunk,"-."); xlabel(t,"Iteration")
プロットから、推定期間中は fit
がモデルをストリーミング データに当てはめないことがわかります。初期学習率は、推定期間後に 0.7
から自動調整された値に急転します。ソフトウェアでの学習時は、IncrementalMdl
のLearnRateScheduleプロパティで指定された初期値から徐々に減衰する学習率が使用されます。
入力引数
Mdl
— 従来式の学習済みガウス カーネル回帰モデル
RegressionKernel
モデル オブジェクト
従来式の学習済みガウス カーネル回帰モデル。fitrkernel
によって返される RegressionKernel
モデル オブジェクトとして指定します。
メモ
インクリメンタル学習関数は、数値の入力予測子データのみをサポートします。Mdl
に categorical データで学習させた場合、インクリメンタル学習関数を使用するには符号化したバージョンの categorical データを準備する必要があります。dummyvar
を使用して、各カテゴリカル変数をダミー変数で構成される数値行列に変換します。その後、学習関数での categorical データの符号化と同じ方法で、すべてのダミー変数行列とその他の数値予測子を連結します。詳細については、ダミー変数を参照してください。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
例: Solver="sgd",MetricsWindowSize=100
は、目的関数の最適化用に確率的勾配降下ソルバーを指定し、ウィンドウ パフォーマンス メトリクスを更新する前に 100 個の観測値を処理することを指定します。
Solver
— 目的関数の最小化手法
"scale-invariant"
(既定値) | "sgd"
| "asgd"
目的関数の最小化手法。次の表の値として指定します。
値 | 説明 | メモ: |
---|---|---|
"scale-invariant" |
| |
"sgd" | 確率的勾配降下法 (SGD) [2][3] |
|
"asgd" | 平均化確率的勾配降下法 (ASGD) [4] |
|
例: Solver="sgd"
データ型: char
| string
EstimationPeriod
— ハイパーパラメーターの推定のために処理する観測値の数
非負の整数
ハイパーパラメーターの推定のために、パフォーマンス メトリクスの学習または追跡の前にインクリメンタル モデルが処理する観測値の数。非負の整数として指定します。
メモ
Mdl
をインクリメンタル学習用に準備する場合 (学習に必要なすべてのハイパーパラメーターを指定する必要があります)、incrementalLearner
はEstimationPeriod
を0
に強制します。Mdl
をインクリメンタル学習用に準備しない場合、incrementalLearner
はEstimationPeriod
を1000
に設定します。
詳細については、推定期間を参照してください。
例: EstimationPeriod=100
データ型: single
| double
BatchSize
— ミニバッチのサイズ
10
(既定値) | 正の整数
ミニバッチのサイズ。正の整数として指定します。学習中の各学習サイクルで、incrementalLearner
は BatchSize
個の観測値を使用して劣勾配を計算します。
最後のミニバッチ (fit
または updateMetricsAndFit
の各関数呼び出しにおける最後の学習サイクル) に含まれる観測値の数は、BatchSize
より小さくてもかまいません。たとえば、fit
または updateMetricsAndFit
に 25 個の観測値を指定した場合、関数は最初の 2 つの学習サイクルに 10 個の観測値を使用し、最後の学習サイクルに 5 の観測値を使用します。
例: BatchSize=5
データ型: single
| double
Lambda
— リッジ (L2) 正則化項の強度
1e-5
(既定値) | 非負のスカラー
リッジ (L2) 正則化項の強度。非負のスカラーとして指定します。
例: Lambda=0.01
データ型: single
| double
LearnRate
— 初期学習率
"auto"
(既定値) | 正のスカラー
初期学習率。"auto"
または正のスカラーとして指定します。
学習率は、目的の劣勾配をスケールすることによって最適化のステップ サイズを制御します。LearnRate
は学習率の初期値を指定し、LearnRateSchedule
によって後続の学習サイクルの学習率が決まります。
"auto"
を指定した場合、次のようになります。
初期学習率は
0.7
となります。EstimationPeriod
>0
の場合、fit
およびupdateMetricsAndFit
は、EstimationPeriod
の最後にこの比率を1/sqrt(1+max(sum(X.^2,2)))
に変更します。
例: LearnRate=0.001
データ型: single
| double
| char
| string
LearnRateSchedule
— 学習率スケジュール
"decaying"
(既定値) | "constant"
学習率スケジュール。次の表の値として指定します。ここで、LearnRate
は初期学習率 ɣ0 を指定します。
値 | 説明 |
---|---|
"constant" | すべての学習サイクルの学習率を ɣ0 とする。 |
"decaying" | 学習サイクル t での学習率を次とする。
|
例: LearnRateSchedule="constant"
データ型: char
| string
Shuffle
— 観測値のシャッフル フラグ
true
または 1
(既定値) | false
または 0
各反復での観測値のシャッフル フラグ。logical 1
(true
) または 0
(false
) として指定します。
値 | 説明 |
---|---|
logical 1 (true ) | ソフトウェアが、関数 fit でモデルを当てはめる前に、データの入力チャンク内の観測値をシャッフルします。このアクションにより、抽出スキームによって誘発されるバイアスが低減されます。 |
logical 0 (false ) | ソフトウェアが、受信した順序でデータを処理します。 |
例: Shuffle=false
データ型: logical
Metrics
— インクリメンタル学習中に追跡するモデルのパフォーマンス メトリクス
"epsiloninsensitive"
| "mse"
| string ベクトル | 関数ハンドル | cell ベクトル | 構造体配列
updateMetrics
または updateMetricsAndFit
を使ってインクリメンタル学習中に追跡するモデルのパフォーマンス メトリクス。組み込みの損失関数の名前、名前の string ベクトル、関数ハンドル (@metricName
)、関数ハンドルの構造体配列、または名前、関数ハンドル、構造体配列の cell ベクトルとして指定します。
次の表は、組み込みの損失関数名と、それらをサポートする学習器 (Mdl.Learner
で指定) の一覧です。string ベクトルを使用して、複数の損失関数を指定できます。
名前 | 説明 | メトリクスをサポートする学習器 |
---|---|---|
"epsiloninsensitive" | イプシロン不感応損失 | 'svm' |
"mse" | 重み付けされた平均二乗誤差 | 'svm' および 'leastsquares' |
組み込み損失関数の詳細については、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 |
既定の設定では、次のようになります。
Mdl.Learner
が'svm'
の場合、Metrics
は"epsiloninsensitive"
です。Mdl.Learner
が'leastsquares'
の場合、Metrics
は"mse"
です。
パフォーマンス メトリクス オプションの詳細については、パフォーマンス メトリクスを参照してください。
データ型: char
| string
| struct
| cell
| function_handle
MetricsWarmupPeriod
— パフォーマンス メトリクスを追跡する前に当てはめる観測値の数
0
(既定値) | 非負の整数
インクリメンタル モデルが Metrics
プロパティのパフォーマンス メトリクスを追跡する前に当てはめなければならない観測値の数。非負の整数として指定します。インクリメンタル モデルは、インクリメンタル近似関数が (EstimationPeriod
+ MetricsWarmupPeriod
) 個の観測値をインクリメンタル モデルに当てはめた後にウォームになります。
パフォーマンス メトリクス オプションの詳細については、パフォーマンス メトリクスを参照してください。
例: MetricsWarmupPeriod=50
データ型: single
| double
MetricsWindowSize
— ウィンドウ パフォーマンス メトリクスの計算に使用する観測値の数
200
(既定値) | 正の整数
ウィンドウ パフォーマンス メトリクスの計算に使用する観測値の数。正の整数として指定します。
パフォーマンス メトリクス オプションの詳細については、パフォーマンス メトリクスを参照してください。
例: MetricsWindowSize=250
データ型: single
| double
出力引数
IncrementalMdl
— インクリメンタル学習用のガウス カーネル回帰モデル
incrementalRegressionKernel
モデル オブジェクト
インクリメンタル学習用のガウス カーネル回帰モデル。incrementalRegressionKernel
モデル オブジェクトとして返されます。IncrementalMdl
は新しいデータに基づいて予測を生成するようにも構成されます (predict
を参照)。
関数 incrementalLearner
は、Mdl
のモデル情報を使用して IncrementalMdl
をインクリメンタル学習用に初期化します。次の表は、incrementalLearner
が IncrementalMdl
の対応するプロパティに渡す Mdl
のプロパティを示したものです。関数では、学習済みのモデルの係数や乱数ストリームなど、IncrementalMdl
を初期化するために必要な他のモデル情報も渡します。
プロパティ | 説明 |
---|---|
Epsilon | イプシロン不感応区間の幅の半分。非負のスカラー。incrementalLearner は、Mdl.Learner が 'svm' の場合にのみこの値を渡します。 |
KernelScale | カーネル スケール パラメーター。正のスカラー |
Learner | 線形回帰モデルのタイプ。文字ベクトル |
Mu | 予測子変数の平均。数値ベクトル |
NumExpansionDimensions | 拡張空間の次元数。正の整数 |
NumPredictors | 予測子の数。正の整数 |
ResponseTransform | 応答変換関数。関数名または関数ハンドル |
Sigma | 予測子変数の標準偏差。数値ベクトル |
詳細
インクリメンタル学習
"インクリメンタル学習" ("オンライン学習") は、予測子変数の分布、予測関数や目的関数の素性 (調整パラメーターの値を含む)、観測値にラベル付けがされているか等についてほぼ知識が無い時に、データ ストリームから入ってくるデータを処理することに関係している機械学習の一分野です。従来の機械学習は、モデルへの当てはめに十分にラベル付けされたデータを使用でき、交差検証を実施してハイパーパラメーターを調整し、予測子の分布を推論するもので、インクリメンタル学習と異なります。
入力観測値に対し、インクリメンタル学習モデルは、次のいずれかの方法 (通常はこの順序) でデータを処理します。
ラベルの予測。
予測性能の測定。
モデルの構造的な破綻やドリフトについてのチェック。
入力観測値へのモデルの当てはめ。
詳細については、インクリメンタル学習の概要を参照してください。
インクリメンタル学習用の適応型スケール不変ソルバー
"インクリメンタル学習用の適応型スケール不変ソルバー" ([1]で紹介) は、線形予測モデルに学習させるための勾配降下法ベースの目的ソルバーです。ソルバーはハイパーパラメーターを持たず、予測子変数のスケールの違いの影響を受けず、予測子変数の分布の事前知識が不要です。これらの特徴は、インクリメンタル学習に適しています。
標準 SGD および ASGD ソルバーは、予測子変数間のスケールの違いの影響を受けやすいため、モデルの性能低下につながることがあります。SGD および ASGD を使用して精度を向上させるには、予測子データを標準化し、正則化と学習率のパラメーターを調整できます。従来の機械学習では、交差検証と予測子を標準化してハイパーパラメーター調整を行うのに十分なデータが利用できます。しかし、インクリメンタル学習の場合、十分なデータが利用できず (たとえば、観測値が一度に 1 つしか利用できない場合があります)、予測子の分布が未知である場合があります。このような特徴があるため、インクリメンタル学習中のパラメーター調整と予測子の標準化は困難または不可能です。
インクリメンタル近似関数 fit
および updateMetricsAndFit
は、アルゴリズムのより積極的な ScInOL2 バージョンを使用します。
ランダムな特徴量拡張
Random Kitchen Sink[1]や Fastfood[2]などのランダムな特徴量拡張は、ビッグ データに対するカーネル回帰アルゴリズムのガウス カーネルを計算効率が高い方法で近似する手法です。ランダムな特徴量拡張は、大規模な学習セットが含まれているビッグ データ事例に対する方が現実的ですが、メモリに収まる小規模なデータ セットにも適用できます。
カーネル回帰アルゴリズムでは、予測子データを高次元空間にマッピングした後で、各応答データ点 (yi) からの逸脱がイプシロン マージン (ε) の値を超えない最適な関数を求めます。
一部の回帰問題は、線形モデルを使用して適切に表すことはできません。このような場合は、ドット積 x1x2′ を非線形カーネル関数 に置き換えることにより非線形回帰モデルを取得します。ここで、xi は i 番目の観測値 (行ベクトル)、φ(xi) は xi を高次元空間にマッピングする変換 ("カーネル トリック" と呼ばれます) です。しかし、(n が大きい) 大規模なデータ セットでは、観測値の各ペアについて G(x1,x2) (グラム行列) を評価すると計算コストが高くなります。
ランダムな特徴量拡張の方式では、ドット積がガウス カーネルを近似するようなランダム変換を求めます。つまり、次のようになります。
ここで、T(x) は における x を高次元空間 () にマッピングします。Random Kitchen Sink[1]方式では、次のランダムな変換を使用します。
ここで、 は から抽出した標本、σ はカーネル スケールです。この方式では O(mp) の計算および格納が必要です。Fastfood[2]方式では、ガウス スケーリング行列と組み合わせたアダマール行列を使用して、Z の代わりに別のランダムな基底 V を導入します。このランダムな基底により、計算コストが O(mlog
p) に、ストレージが O(m) に削減されます。
incrementalRegressionKernel
は、ランダムな特徴量拡張に Fastfood 方式を使用し、線形回帰を使用してガウス カーネル回帰モデルに学習させます。m および σ の値は、fitrkernel
を使用して従来式の学習済みモデルを作成するとき、または incrementalRegressionKernel
を直接呼び出してモデル オブジェクトを作成するときに、名前と値の引数 NumExpansionDimensions
および KernelScale
を使用してそれぞれ指定できます。
アルゴリズム
推定期間
推定期間中、インクリメンタル近似関数 fit
および updateMetricsAndFit
は、最初の EstimationPeriod
個の入力観測値を使用して、インクリメンタル学習に必要なハイパーパラメーターを推定 (調整) します。推定は EstimationPeriod
が正の場合にのみ発生します。次の表は、ハイパーパラメーターとそれらが推定または調整される条件について説明します。
ハイパーパラメーター | モデル プロパティ | 使用法 | 条件 |
---|---|---|---|
予測子の平均および標準偏差 |
| 標準化された予測子データ | ハイパーパラメーターは推定されません。 |
学習率 | SolverOptions の LearnRate フィールド | ソルバーのステップ サイズの調整 | 次のいずれの条件にも当てはまる場合は、ハイパーパラメーターが推定されます。
|
イプシロン不感応区間の幅の半分 | Epsilon | サポート ベクターの数の制御 |
関数 |
カーネル スケール パラメーター | KernelScale | ランダムな特徴量拡張用のカーネル スケール パラメーターの値の設定 |
推定期間中には、fit
がモデルを当てはめることも、updateMetricsAndFit
がモデルを当てはめたりパフォーマンス メトリクスを更新したりすることもありません。推定期間の満了時に、関数はハイパーパラメーターを格納するプロパティを更新します。
データの標準化
予測子変数を標準化するようにインクリメンタル学習関数が構成されている場合、インクリメンタル学習モデル IncrementalMdl
の Mu
プロパティと Sigma
プロパティにそれぞれ保存されている平均と標準偏差を使用して標準化が行われます。
fitrkernel
を使用して入力モデルMdl
に学習させるときに予測子データを標準化する場合、次の条件が適用されます。incrementalLearner
は、Mdl.Mu
の平均とMdl.Sigma
の標準偏差をインクリメンタル学習モデルの対応するプロパティに渡します。インクリメンタル学習関数は予測子データを常に標準化します。
インクリメンタル近似関数が予測子の平均と標準偏差を推定するとき、関数は推定期間の観測値を使用して加重平均と加重標準偏差を計算します。具体的には、関数は予測子 j (xj) の標準化のために次を使用します。
xj は予測子 j、xjk は推定期間内の予測子 j の観測値 k です。
wj は観測値の重み j です。
パフォーマンス メトリクス
関数
updateMetrics
およびupdateMetricsAndFit
は、インクリメンタル モデルが "ウォーム" (IsWarm
プロパティがtrue
) のときにのみ、新しいデータからモデルのパフォーマンス メトリクス (Metrics
) を追跡するインクリメンタル学習関数です。インクリメンタル モデルは、fit
またはupdateMetricsAndFit
がインクリメンタル モデルをMetricsWarmupPeriod
個の観測値 ("メトリクスのウォームアップ期間") に当てはめた後、ウォームになります。EstimationPeriod
> 0 の場合、関数fit
およびupdateMetricsAndFit
はモデルをデータに当てはめる前にハイパーパラメーターを推定します。そのため、関数は、モデルがメトリクスのウォームアップ期間を開始する前にEstimationPeriod
個の観測値を追加で処理しなければなりません。インクリメンタル モデルの
Metrics
プロパティは、各パフォーマンス メトリクスの 2 つの形式を table の変数 (列)Cumulative
およびWindow
とし、個々のメトリクスを行に格納します。インクリメンタル モデルがウォームになると、updateMetrics
およびupdateMetricsAndFit
は次の頻度でメトリクスを更新します。Cumulative
— 関数は、モデルの性能追跡の開始以降の累積メトリクスを計算します。関数は、関数が呼び出されるたびにメトリクスを更新し、提供されたデータ セット全体に基づいて計算を行います。Window
— 関数は、MetricsWindowSize
によって決定されたウィンドウ内のすべての観測値に基づいてメトリクスを計算します。これによってソフトウェアがWindow
メトリクスを更新する頻度も決まります。たとえば、MetricsWindowSize
が 20 の場合、関数は提供されたデータの最後の 20 個の観測値に基づいてメトリクスを計算します (X((end – 20 + 1):end,:)
およびY((end – 20 + 1):end)
)。ウィンドウ内のパフォーマンス メトリクスを追跡するインクリメンタル関数は、次のプロセスを使用します。
指定された各メトリクスについて長さ
MetricsWindowSize
のバッファーを保存し、観測値の重みのバッファーを保存します。入力観測値のバッチに基づくモデル性能をメトリクス バッファーの要素に入力し、対応する観測値の重みを重みバッファーに格納します。
バッファーがいっぱいになると、
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.
[5] Rahimi, A., and B. Recht. “Random Features for Large-Scale Kernel Machines.” Advances in Neural Information Processing Systems. Vol. 20, 2008, pp. 1177–1184.
[6] Le, Q., T. Sarlós, and A. Smola. “Fastfood — Approximating Kernel Expansions in Loglinear Time.” Proceedings of the 30th International Conference on Machine Learning. Vol. 28, No. 3, 2013, pp. 244–252.
[7] Huang, P. S., H. Avron, T. N. Sainath, V. Sindhwani, and B. Ramabhadran. “Kernel methods match Deep Neural Networks on TIMIT.” 2014 IEEE International Conference on Acoustics, Speech and Signal Processing. 2014, pp. 205–209.
バージョン履歴
R2022a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)