Main Content

detectdrift

ドリフト検出器の状態とドリフト ステータスを新しいデータで更新

R2022a 以降

    説明

    IncCDDetector = detectdrift(IncCDDetector,X) は、内部の統計量とドリフト ステータスを X の新しいデータで更新し、変更された検出器 IncCDDetector を返します。

    detectdrift は、IsWarm プロパティが true (または 1) の場合にのみドリフト ステータスを更新します。

    IncCDDetector = detectdrift(IncCDDetector,X,Weights=W) は、W の観測値の重みも使用して IncCDDetector を更新します。

    引数 Weights はドリフト検出法 (DDM) にのみ使用できます。incrementalConceptDriftDetector の呼び出しで引数 DetectionMethod"DDM" を指定します。

    すべて折りたたむ

    最初の 1000 個の観測値は平均が 2 で標準偏差が 0.75 の正規分布から派生し、次の 1000 個は平均が 4 で標準偏差が 1 の正規分布から派生する乱数ストリームを作成します。インクリメンタルなドリフト検出の用途では、データ ストリームへのアクセスとモデルの更新が連続的に発生します。データを先に収集してからモデルに供給することはありません。ただし、この例では、明確にするためにデータのシミュレーションを分けて説明します。

    rng(1234) % For reproducibility
    numObservations = 3000;
    switchPeriod1 = 1000;
    X = zeros([numObservations 1]);
    
    for i = 1:numObservations
       if i <= switchPeriod1
          X(i) = normrnd(2,0.75);
       else
          X(i) = normrnd(4,1);
       end
    end

    インクリメンタルな概念ドリフト検出器を開始します。指数移動平均法 (EWMA) による Hoeffding 境界の手法を使用します。入力タイプを連続、ウォームアップを 50 個の観測値、推定期間を 50 個の観測値に指定します。

    incCDDetector = incrementalConceptDriftDetector("hddmw",InputType="continuous", ...
              WarmupPeriod=50,EstimationPeriod=50)
    incCDDetector = 
      HoeffdingDriftDetectionMethod
    
            PreviousDriftStatus: 'Stable'
                    DriftStatus: 'Stable'
                         IsWarm: 0
        NumTrainingObservations: 0
                    Alternative: 'greater'
                      InputType: 'continuous'
                     TestMethod: 'ewma'
    
    
    

    incDDetector は、HoeffdingDriftDetectionMethod オブジェクトです。最初にオブジェクトを作成した時点では、DriftStatusIsWarmCutMeanNumTrainingObservations などのプロパティは初期状態になります。detectdrift は、それらをデータの供給に応じてインクリメンタルに更新し、ドリフトを監視します。

    バッチ サイズ、およびドリフト ステータスと統計を記録する変数を事前に割り当てます。

    status = zeros([numObservations 1]);
    statusname = strings([numObservations 1]);

    観測値を一度に 1 個ずつ処理してデータ ストリームをシミュレートし、インクリメンタルなドリフト検出を実行します。各反復で次を行います。

    • detectdrift で新しいデータを使用してドリフトを監視する。

    • 可視化のためにドリフト ステータスを追跡して記録する。

    • ドリフトが検出されたら、関数 reset を使用してインクリメンタルな概念ドリフト検出器をリセットする。

    for i = 1:numObservations
        
        incCDDetector = detectdrift(incCDDetector,X(i));
        
        if incCDDetector.DriftDetected
            status(i) = 2;
            statusname(i) = string(incCDDetector.DriftStatus);
            incCDDetector = reset(incCDDetector); % If drift detected, reset the detector
            sprintf("Drift detected at observation #%d. Detector reset.",i)
        elseif incCDDetector.WarningDetected
            status(i) = 1;
            statusname(i) = string(incCDDetector.DriftStatus);
            sprintf("Warning detected at observation #%d.",i)
        else 
            status(i) = 0;
            statusname(i) = string(incCDDetector.DriftStatus);
        end      
    end
    ans = 
    "Warning detected at observation #1019."
    
    ans = 
    "Warning detected at observation #1020."
    
    ans = 
    "Warning detected at observation #1021."
    
    ans = 
    "Warning detected at observation #1022."
    
    ans = 
    "Drift detected at observation #1023. Detector reset."
    

    ドリフト ステータスとデータ観測番号の関係をプロットします。

    gscatter(1:numObservations,status,statusname,'gyr','*',5,'on',"Number of observations","Drift status")

    Figure contains an axes object. The axes object with xlabel Number of observations, ylabel Drift status contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent Stable, Warning, Drift.

    入力引数

    すべて折りたたむ

    インクリメンタルな概念ドリフト検出器。DriftDetectionMethod または HoeffdingDriftDetectionMethod のいずれかのオブジェクトとして返されます。これらのオブジェクトとそのプロパティの詳細については、該当するリファレンス ページを参照してください。

    入力データ。n 行 1 列の実数のベクトルとして指定します。ここで、n は観測値の数です。

    • incrementalConceptDriftDetector の呼び出しで InputType の値が "continuous" の場合、X は実数値のベクトルでなければなりません。

    • incrementalConceptDriftDetector の呼び出しで InputType の値が "binary" の場合、X は logical ベクトルまたは 0 と 1 のベクトルにすることができます。

    データ型: single | double | logical

    観測値の重み。n 行 1 列の実数のベクトルとして指定します。ここで、n は観測値の数です。W の要素数は X と同じでなければなりません。

    引数 Weights は、指数加重移動平均を使用する Hoeffding 境界のドリフト検出法 (HDDMW) には使用できません。観測値の重みを使用するには、incrementalConceptDriftDetector の呼び出しで DetectionMethod として "ddm" または "hddma" を指定します。

    データ型: single | double

    バージョン履歴

    R2022a で導入