Main Content

reset

インクリメンタル ドリフト認識学習器のリセット

R2022b 以降

    説明

    Mdl = reset(Mdl) は、Mdl.BaseLearner および Mdl.DriftDetector の学習したパラメーターをリセットした後のインクリメンタル ドリフト認識モデル Mdl を返します。インクリメンタル学習中に Mdl.BaseLearner のハイパーパラメーターが推定される場合、関数 reset はこれらのハイパーパラメーターもリセットします。resetMdl.BaseLearner.Numpredictors プロパティを常に保持します。

    インクリメンタル分類モデルの場合、resetMdl.BaseLearner.ClassNames プロパティを常に保持し、事前クラス確率が "empirical" の場合に Mdl.BaseLearner.Prior をリセットします。

    インクリメンタル ドリフト認識学習の実行時は、関数 fit の内部で reset が呼び出されます。reset はカスタム ワークフローでの使用に適しています。

    すべて折りたたむ

    補助関数の HelperRegrGeneratorHelperConceptDriftGenerator をそれぞれ使用して、ランダムな概念データと概念ドリフト発生器を作成します。

    concept1 = HelperRegrGenerator(NumFeatures=100,NonZeroFeatures=[1,20,40,50,55], ...
        FeatureCoefficients=[4,5,10,-2,-6],NoiseStd=1.1,TableOutput=false);
    concept2 = HelperRegrGenerator(NumFeatures=100,NonZeroFeatures=[10,20,45,56,80], ...
        FeatureCoefficients=[4,5,10,-2,-6],NoiseStd=1.1,TableOutput=false);
    driftGenerator = HelperConceptDriftGenerator(concept1,concept2,15000,1000);

    HelperRegrGenerator は、関数の呼び出しで指定された回帰用の特徴量と特徴量係数を使用してストリーミング データを生成します。この関数は、各ステップで正規分布から予測子を抽出します。その後、関数は特徴量係数と予測子の値を使用して、平均がゼロで指定のノイズ標準偏差をもつ正規分布からランダム ノイズを追加することで応答を計算します。そのデータがインクリメンタル学習器で使用するために行列として返されます。

    HelperConceptDriftGenerator は、概念ドリフトを確立します。このオブジェクトでは、シグモイド関数 1./(1+exp(-4*(numobservations-position)./width)) を使用して、データ生成時に 1 つ目のストリームが選択される確率を判定します [3]。この例では、位置の引数が 15000 で、幅の引数が 1000 です。観測値の数が位置の値から幅の半分を引いた値を超えると、データ生成時に 1 つ目のストリームから抽出される確率が低下します。このシグモイド関数により、一方のストリームからもう一方への滑らかな遷移が実現します。幅の値が大きいほど、両方のストリームがほぼ等しい確率で選択される遷移期間が大きいことを示します。

    回帰用のインクリメンタル ドリフト認識モデルを次のように開始します。

    1. 回帰用のインクリメンタル線形モデルを作成します。線形回帰モデルのタイプとソルバーのタイプを指定します。

    2. 移動平均による Hoeffding 境界のドリフト検出法 (HDDMA) を使用するインクリメンタルな概念ドリフト検出器を開始します。

    3. インクリメンタル線形モデルと概念ドリフト検出器を使用して、インクリメンタル ドリフト認識モデルをインスタンス化します。学習期間を 6000 個の観測値として指定します。

    baseMdl = incrementalRegressionLinear(Learner="leastsquares",Solver="sgd",EstimationPeriod=1000,Standardize=false);
    dd = incrementalConceptDriftDetector("hddma",Alternative="greater",InputType="continuous",WarmupPeriod=1000);
    idal = incrementalDriftAwareLearner(baseMdl,DriftDetector=dd,TrainingPeriod=6000);

    データ ストリームの作成用に各チャンクの変数の数と反復回数を事前に割り当てます。

    numObsPerChunk = 10;
    numIterations = 1000;

    回帰誤差を格納する変数を事前に割り当てます。

    ce = array2table(zeros(numIterations,2),VariableNames=["Cumulative" "Window"]);

    それぞれ 10 個の観測値の入力チャンクを使用してデータ ストリームをシミュレートし、インクリメンタル ドリフト認識学習を実行します。各反復で次を行います。

    1. 予測子データとラベルをシミュレートし、補助関数 hgenerate を使用してドリフト発生器を更新します。

    2. updateMetricsAndFit を呼び出して、パフォーマンス メトリクスを更新し、インクリメンタル ドリフト認識モデルを入力データに当てはめます。

    3. 可視化のために回帰誤差を追跡します。

    rng(12); % For reproducibility
    
    for j = 1:numIterations
     
     % Generate data
     [driftGenerator,X,Y] = hgenerate(driftGenerator,numObsPerChunk); 
    
     % Update performance metrics and fit the model
     idal = updateMetricsAndFit(idal,X,Y); 
    
     % Record regression error
      ce{j,:} = idal.Metrics{"MeanSquaredError",:};
     
    end

    累積とウィンドウごとの回帰誤差をプロットします。ウォームアップと推定の合計の期間をマークします。

    h = plot(ce.Variables);
    xlim([0 numIterations])
    ylabel("Mean Squared Error")
    xlabel("Iteration")
    xline((idal.MetricsWarmupPeriod+idal.BaseLearner.EstimationPeriod)/numObsPerChunk,"g-.","Estimation Period+Warmup Period",LineWidth=1.5)
    legend(h,ce.Properties.VariableNames)
    legend(h,Location="best")

    Figure contains an axes object. The axes object with xlabel Iteration, ylabel Mean Squared Error contains 3 objects of type line, constantline. These objects represent Cumulative, Window.

    インクリメンタル ドリフト認識学習器と現在のメトリクス値を表示します。

    idal
    idal = 
      incrementalDriftAwareLearner
    
               IsWarm: 1
              Metrics: [1x2 table]
          BaseLearner: [1x1 incrementalRegressionLinear]
        DriftDetector: [1x1 HoeffdingDriftDetectionMethod]
           IsTraining: 0
    
    
    
    idal.Metrics
    ans=1×2 table
                            Cumulative    Window
                            __________    ______
    
        MeanSquaredError      2.0976      1.826 
    
    

    ベース学習器とドリフト検出器を表示します。

    idal.BaseLearner
    ans = 
      incrementalRegressionLinear
    
                   IsWarm: 1
                  Metrics: [1x2 table]
        ResponseTransform: 'none'
                     Beta: [100x1 double]
                     Bias: -0.0793
                  Learner: 'leastsquares'
    
    
    
    idal.BaseLearner.Beta
    ans = 100×1
    
        4.0221
        0.0492
        0.0046
        0.0529
       -0.0818
       -0.1161
        0.0307
       -0.0669
       -0.0103
        0.0159
          ⋮
    
    

    ドリフト検出器を表示します。

    idal.DriftDetector
    ans = 
      HoeffdingDriftDetectionMethod
    
            PreviousDriftStatus: 'Stable'
                    DriftStatus: 'Stable'
                         IsWarm: 1
        NumTrainingObservations: 7900
                    Alternative: 'greater'
                      InputType: 'continuous'
                     TestMethod: 'average'
    
    
    

    インクリメンタル ドリフト認識学習器をリセットします。モデルとメトリクスのプロパティを表示します。

    idal = reset(idal)
    idal = 
      incrementalDriftAwareLearner
    
               IsWarm: 0
              Metrics: [1x2 table]
          BaseLearner: [1x1 incrementalRegressionLinear]
        DriftDetector: [1x1 HoeffdingDriftDetectionMethod]
           IsTraining: 1
    
    
    
    idal.Metrics
    ans=1×2 table
                            Cumulative    Window
                            __________    ______
    
        MeanSquaredError       NaN         NaN  
    
    

    メトリクスが NaN 値にリセットされています。ソフトウェアによるメトリクスの計算は、idal.BaseLearner.EstimationPeriod+idal.BaseLearner.MetricsWarmUpPeriod の観測値が渡されるまで待機してから再開されます。

    モデルをリセットすると、ベース学習器と基になるドリフト検出器もリセットされます。

    ベース学習器を表示します。

    idal.BaseLearner
    ans = 
      incrementalRegressionLinear
    
                   IsWarm: 0
                  Metrics: [1x2 table]
        ResponseTransform: 'none'
                     Beta: [100x1 double]
                     Bias: 0
                  Learner: 'leastsquares'
    
    
    

    Bias パラメーターも 0 にリセットされています。

    ベース学習器の Beta プロパティを表示します。

    idal.BaseLearner.Beta
    ans = 100×1
    
         0
         0
         0
         0
         0
         0
         0
         0
         0
         0
          ⋮
    
    

    係数の値がすべて 0 に設定されています。

    ドリフト検出器を表示します。

    idal.DriftDetector
    ans = 
      HoeffdingDriftDetectionMethod
    
            PreviousDriftStatus: 'Stable'
                    DriftStatus: 'Stable'
                         IsWarm: 0
        NumTrainingObservations: 0
                    Alternative: 'greater'
                      InputType: 'continuous'
                     TestMethod: 'average'
    
    
    

    IsWarm プロパティと学習観測値の数がどちらも 0 に設定されています。

    ドット表記を使用して、ドリフト認識学習器、ベース学習器、およびドリフト検出器の他のプロパティがリセット後にどのように変わるかを調べることができます。

    入力引数

    すべて折りたたむ

    ストリーミング データに当てはめるインクリメンタル ドリフト認識学習モデル。incrementalDriftAwareLearner モデル オブジェクトとして指定します。Mdl は関数 incrementalDriftAwareLearner を使用して作成できます。詳細については、オブジェクトのリファレンス ページを参照してください。

    出力引数

    すべて折りたたむ

    更新されたインクリメンタル ドリフト認識学習モデル。入力モデル Mdl と同じデータ型のインクリメンタル学習モデル オブジェクト incrementalDriftAwareLearner として返されます。

    参照

    [1] Barros, Roberto S.M. , et al. "RDDM: Reactive drift detection method." Expert Systems with Applications. vol. 90, Dec. 2017, pp. 344-55. https://doi.org/10.1016/j.eswa.2017.08.023.

    [2] Bifet, Albert, et al. "New Ensemble Methods for Evolving Data Streams." Proceedings of the 15th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. ACM Press, 2009, p. 139. https://doi.org/10.1145/1557019.1557041.

    [3] Gama, João, et al. "Learning with drift detection". Advances in Artificial Intelligence – SBIA 2004, edited by Ana L. C. Bazzan and Sofiane Labidi, vol. 3171, Springer Berlin Heidelberg, 2004, pp. 286–95. https://doi.org/10.1007/978-3-540-28645-5_29.

    バージョン履歴

    R2022b で導入