Main Content

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

incrementalLearner

カーネル回帰モデルのインクリメンタル学習器への変換

R2022a 以降

    説明

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

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

    すべて折りたたむ

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

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

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

    load NYCHousing2015

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

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

    • 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")

    Figure contains 4 axes objects. Axes object 1 with ylabel Number of Training Observations contains 2 objects of type line, constantline. Axes object 2 with ylabel Epsilon Insensitive Loss contains 3 objects of type line, constantline. These objects represent Cumulative, Window. Axes object 3 with ylabel MSE contains 3 objects of type line, constantline. Axes object 4 with ylabel MAE contains 3 objects of type line, constantline.

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

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

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

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

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

    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 を抽出します。数値安定性を得るために、SALEPRICE1e6 の尺度でスケールします。

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

    入力引数

    すべて折りたたむ

    従来式の学習済みガウス カーネル回帰モデル。fitrkernel によって返される RegressionKernel モデル オブジェクトとして指定します。

    メモ

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

    名前と値の引数

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

    例: Solver="sgd",MetricsWindowSize=100 は、目的関数の最適化用に確率的勾配降下ソルバーを指定し、ウィンドウ パフォーマンス メトリクスを更新する前に 100 個の観測値を処理することを指定します。

    一般オプション

    すべて折りたたむ

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

    説明メモ:
    "scale-invariant"

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

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

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

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

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

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

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

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

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

    例: Solver="sgd"

    データ型: char | string

    ハイパーパラメーターの推定のために、パフォーマンス メトリクスの学習または追跡の前にインクリメンタル モデルが処理する観測値の数。非負の整数として指定します。

    メモ

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

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

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

    例: EstimationPeriod=100

    データ型: single | double

    R2023b 以降

    予測子データを標準化するためのフラグ。次の表の値として指定します。

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

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

    例: Standardize=true

    データ型: logical | char | string

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

    すべて折りたたむ

    ミニバッチのサイズ。正の整数として指定します。学習中の各学習サイクルで、incrementalLearnerBatchSize 個の観測値を使用して劣勾配を計算します。

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

    例: BatchSize=5

    データ型: single | double

    リッジ (L2) 正則化項の強度。非負のスカラーとして指定します。

    例: Lambda=0.01

    データ型: single | double

    初期学習率。"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

    学習率スケジュール。次の表の値として指定します。ここで、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

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

    すべて折りたたむ

    各反復での観測値のシャッフル フラグ。logical 1 (true) または 0 (false) として指定します。

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

    例: Shuffle=false

    データ型: logical

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

    すべて折りたたむ

    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_j。ここで、jMetrics のメトリクス j@(Y,YFit)customMetric(Y,YFit)... の行名は CustomMetric_1

    既定の設定では、次のようになります。

    • Mdl.Learner'svm' の場合、Metrics"epsiloninsensitive" です。

    • Mdl.Learner'leastsquares' の場合、Metrics"mse" です。

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

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

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

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

    例: MetricsWarmupPeriod=50

    データ型: single | double

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

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

    例: MetricsWindowSize=250

    データ型: single | double

    出力引数

    すべて折りたたむ

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

    関数 incrementalLearner は、Mdl のモデル情報を使用して IncrementalMdl をインクリメンタル学習用に初期化します。次の表は、incrementalLearnerIncrementalMdl の対応するプロパティに渡す 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 を非線形カーネル関数 G(x1,x2)=φ(x1),φ(x2) に置き換えることにより非線形回帰モデルを取得します。ここで、xi は i 番目の観測値 (行ベクトル)、φ(xi) は xi を高次元空間にマッピングする変換 ("カーネル トリック" と呼ばれます) です。しかし、(n が大きい) 大規模なデータ セットでは、観測値の各ペアについて G(x1,x2) (グラム行列) を評価すると計算コストが高くなります。

    ランダムな特徴量拡張の方式では、ドット積がガウス カーネルを近似するようなランダム変換を求めます。つまり、次のようになります。

    G(x1,x2)=φ(x1),φ(x2)T(x1)T(x2)',

    ここで、T(x)p における x を高次元空間 (m) にマッピングします。Random Kitchen Sink[1]方式では、次のランダムな変換を使用します。

    T(x)=m1/2exp(iZx')',

    ここで、Zm×pN(0,σ2) から抽出した標本、σ はカーネル スケールです。この方式では O(mp) の計算および格納が必要です。Fastfood[2]方式では、ガウス スケーリング行列と組み合わせたアダマール行列を使用して、Z の代わりに別のランダムな基底 V を導入します。このランダムな基底により、計算コストが O(mlogp) に、ストレージが O(m) に削減されます。

    incrementalRegressionKernel は、ランダムな特徴量拡張に Fastfood 方式を使用し、線形回帰を使用してガウス カーネル回帰モデルに学習させます。m および σ の値は、fitrkernel を使用して従来式の学習済みモデルを作成するとき、または incrementalRegressionKernel を直接呼び出してモデル オブジェクトを作成するときに、名前と値の引数 NumExpansionDimensions および KernelScale を使用してそれぞれ指定できます。

    アルゴリズム

    すべて折りたたむ

    推定期間

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

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

    Mu および Sigma

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

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

    学習率SolverOptionsLearnRate フィールドソルバーのステップ サイズの調整

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

    • 名前と値の引数 Solver"sgd" または "asgd" として指定している。

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

    イプシロン不感応区間の幅の半分Epsilon サポート ベクターの数の制御

    incrementalLearner を使用して incrementalRegressionKernel モデル オブジェクトを作成している場合、Epsilon または KernelScale は推定されません。

    関数 incrementalRegressionKernel を呼び出して incrementalRegressionKernel モデル オブジェクトを作成している場合、これらのハイパーパラメーターは状況によっては推定されます。詳細については、incrementalRegressionKernel のページの推定期間を参照してください。

    カーネル スケール パラメーターKernelScaleランダムな特徴量拡張用のカーネル スケール パラメーターの値の設定

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

    データの標準化

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

    • fitrkernel を使用して入力モデル 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 プロパティが 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))。

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

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

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

        3. バッファーがいっぱいになると、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.

    [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 で導入

    すべて展開する