HoeffdingDriftDetectionMethod
説明
HoeffdingDriftDetectionMethod
モデル オブジェクトは、移動平均 (A 検定) または指数加重移動平均 (W 検定) に基づく Hoeffding 境界のノンパラメトリックなドリフト検出法を使用するインクリメンタルな概念ドリフト検出器を表します[1]。オブジェクトの作成後、オブジェクト関数 detectdrift
を使用して、統計の更新や概念データのドリフト (故障率や回帰損失など) のチェックを行うことができます。
HoeffdingDriftDetectionMethod
はインクリメンタルな概念ドリフト検出に適しています。生データにおけるドリフト検出については、バッチ ドリフト検出用の detectdrift
を参照してください。
作成
HoeffdingDriftDetectionMethod
は、incrementalConceptDriftDetector
の呼び出しで引数 DetectionMethod
を "hddma"
または "hddmw"
として指定することで作成できます。
プロパティ
Alternative
— 対立仮説のタイプ
'greater'
(既定値) | 'less'
| 'unequal'
この プロパティ は読み取り専用です。
ドリフト ステータスを判定する対立仮説のタイプ。'greater'
、'less'
、または 'unequal'
として指定されます。
データ型: char
CutHoeffdingBound
— 切り取り点までに観測された入力データの Hoeffding 境界
数値
この プロパティ は読み取り専用です。
切り取り点までに観測された入力データの Hoeffding 境界。数値として指定されます。
detectdrift
は、次のいずれかの条件を満たす場合に、CutMean
と CutHoeffdingBound
を更新し、PostCutMean
と PostCutHoeffdingBound
をリセットします。
Alternative
が"greater"
で、Mean
+HoeffdingBound
がCutMean
+CutHoeffdingBound
以下。Alternative
が"less"
で、Mean
-HoeffdingBound
がCutMean
-CutHoeffdingBound
以上。Alternative
が"unequal"
で、Mean
+HoeffdingBound
がCutMean
-CutHoeffdingBound
以下またはMean
-HoeffdingBound
がCutMean
+CutHoeffdingBound
以上。
データ型: double
CutMean
— 加重平均
数値
この プロパティ は読み取り専用です。
切り取り点までに観測されたデータの加重平均。数値として指定されます。
detectdrift
は、次のいずれかの条件を満たす場合に、CutMean
と CutHoeffdingBound
を更新し、PostCutMean
と PostCutHoeffdingBound
をリセットします。
Alternative
が"greater"
で、Mean
+HoeffdingBound
がCutMean
+CutHoeffdingBound
以下。Alternative
が"less"
で、Mean
-HoeffdingBound
がCutMean
-CutHoeffdingBound
以上。Alternative
が"unequal"
で、Mean
+HoeffdingBound
がCutMean
-CutHoeffdingBound
以下またはMean
-HoeffdingBound
がCutMean
+CutHoeffdingBound
以上。
データ型: double
DriftDetected
— ソフトウェアでドリフトが検出されたかどうかを示すフラグ
1
| 0
この プロパティ は読み取り専用です。
ソフトウェアでドリフトが検出されたかどうかを示すフラグ。1
または 0
のいずれかとして指定されます。値 1
は DriftStatus
が 'Drift'
であることを意味します。
データ型: logical
DriftStatus
— 現在のドリフト ステータス
'Stable'
| 'Warning'
| 'Drift'
この プロパティ は読み取り専用です。
現在のドリフト ステータス。'Stable'
、'Warning'
、または 'Drift'
として指定されます。DriftStatus
と PreviousDriftStaus
を比較することで、ドリフト ステータスの遷移を確認できます。
データ型: char
DriftThreshold
— ドリフトが存在するかどうかを判定するしきい値
0.001 (既定値) | 0 から 1 までの非負のスカラー値
この プロパティ は読み取り専用です。
ドリフトが存在するかどうかを判定するしきい値。0 から 1 までの非負のスカラー値として指定します。これは、Hoeffding 不等式または McDiarmid 不等式で確率変数と期待値の間の許容誤差の計算に使用される有意水準です。この水準を超えると、ソフトウェアは DriftStatus
を 'Drift'
に設定します。
データ型: double
EstimationPeriod
— 入力範囲の推定に使用された観測値の数
非負の整数
この プロパティ は読み取り専用です。
連続変数の入力範囲の推定に使用された観測値の数。非負の整数として指定されます。
データ型: double
ForgettingFactor
— HDDMW 法の忘却係数
0.05 (既定値) | 0 から 1 までのスカラー値
この プロパティ は読み取り専用です。
メモ
このオプションは、指数加重移動平均法 (ewma
) にのみ該当します。
指数加重移動平均 (EWMA) 法 (HDDMW) の忘却係数。0 から 1 までのスカラー値として指定されます。
データ型: double
HoeffdingBound
— すべての入力データの Hoeffding 境界
数値
この プロパティ は読み取り専用です。
ドリフト検出器の学習に使用されたすべての入力データの Hoeffding 境界。数値として指定されます。
データ型: double
InputBounds
— 入力データの範囲
サイズ 2 の数値ベクトル
この プロパティ は読み取り専用です。
入力データの範囲。サイズ 2 の数値ベクトルとして指定されます。
データ型: double
InputType
— 入力データのタイプ
'binary'
(既定値) | 'continuous'
この プロパティ は読み取り専用です。
入力データのタイプ。'binary'
または 'continuous'
のいずれかとして指定されます。
データ型: char
IsWarm
— ウォームアップ期間が終了しているかどうかを示すフラグ
1
| 0
この プロパティ は読み取り専用です。
ウォームアップ期間が終了しているかどうかを示すフラグ。1
(true
) または 0
(false
) として指定されます。
データ型: logical
Mean
— すべての入力データの加重平均
数値
この プロパティ は読み取り専用です。
ドリフト検出器の学習に使用されたすべての入力データの加重平均。数値として指定されます。
データ型: double
NumTrainingObservations
— 学習に使用された観測値の数
非負の整数値
この プロパティ は読み取り専用です。
ドリフト検出器の学習に使用された観測値の数。非負の整数値として指定されます。
データ型: double
PostCutHoeffdingBound
— 切り取り点の後に観測されたデータの Hoeffding 境界
数値
この プロパティ は読み取り専用です。
切り取り点の後に観測されたデータの Hoeffding 境界。数値として指定されます。
detectdrift
は、次のいずれかの条件を満たす場合に、CutMean
と CutHoeffdingBound
を更新し、PostCutMean
と PostCutHoeffdingBound
をリセットします。
Alternative
が"greater"
で、Mean
+HoeffdingBound
がCutMean
+CutHoeffdingBound
以下。Alternative
が"less"
で、Mean
-HoeffdingBound
がCutMean
-CutHoeffdingBound
以上。Alternative
が"unequal"
で、Mean
+HoeffdingBound
がCutMean
-CutHoeffdingBound
以下またはMean
-HoeffdingBound
がCutMean
+CutHoeffdingBound
以上。
データ型: double
PostCutMean
— 切り取り点の後に観測されたデータの加重平均
数値
この プロパティ は読み取り専用です。
切り取り点の後に観測されたデータの加重平均。数値として指定されます。
detectdrift
は、次のいずれかの条件を満たす場合に、CutMean
と CutHoeffdingBound
を更新し、PostCutMean
と PostCutHoeffdingBound
をリセットします。
Alternative
が"greater"
で、Mean
+HoeffdingBound
がCutMean
+CutHoeffdingBound
以下。Alternative
が"less"
で、Mean
-HoeffdingBound
がCutMean
-CutHoeffdingBound
以上。Alternative
が"unequal"
で、Mean
+HoeffdingBound
がCutMean
-CutHoeffdingBound
以下またはMean
-HoeffdingBound
がCutMean
+CutHoeffdingBound
以上。
データ型: double
PreviousDriftStatus
— 最新の学習以前のドリフト ステータス
'Stable'
| 'Warning'
| 'Drift'
この プロパティ は読み取り専用です。
最新のデータのバッチを使用した最新の学習以前のドリフト ステータス。'Stable'
、'Warning'
、または 'Drift'
として指定されます。DriftStatus
と PreviousDriftStaus
を比較することで、ドリフト ステータスの遷移を確認できます。
データ型: char
TestMethod
— ドリフト検出に使用された検定法
'ewma'
| 'average'
この プロパティ は読み取り専用です。
ドリフト検出に使用された検定法。'ewma'
または 'average'
として指定されます。incrementalConceptDriftDetector
の呼び出しにおける "hddmw"
と "hddma"
の検出法にそれぞれ対応します。
データ型: char
WarmupPeriod
— ドリフト検出器のウォームアップのための観測値の数
非負の整数値
この プロパティ は読み取り専用です。
ドリフト検出器のウォームアップのための観測値の数。非負の整数として指定されます。
データ型: double
WarningDetected
— 警告があるかどうかを示すフラグ
1
| 0
この プロパティ は読み取り専用です。
警告があるかどうかを示すフラグ。1
または 0
のいずれかとして指定されます。値 1
は DriftStatus
が 'Warning'
であることを意味します。
データ型: logical
WarningThreshold
— 警告かドリフトかを判別するしきい値
0.005 (既定値) | 0 から 1 までの非負のスカラー値
この プロパティ は読み取り専用です。
警告かドリフトかを判別するしきい値。0 から 1 までの非負のスカラー値として指定します。これは、Hoeffding 不等式または McDiarmid 不等式で確率変数と期待値の間の許容誤差の計算に使用される有意水準です。この水準を超えると、ソフトウェアは DriftStatus
を 'Warning'
に設定します。
データ型: double
オブジェクト関数
detectdrift | ドリフト検出器の状態とドリフト ステータスを新しいデータで更新 |
reset | インクリメンタルな概念ドリフト検出器をリセット |
例
連続データにおけるドリフトの監視
標準偏差が 0.75 で、平均は時間と共に変化する正規分布から観測値が派生する乱数ストリームを作成します。最初の 1000 個の観測値は平均 2 の分布から派生し、次の 1000 個は平均 4 の分布から派生し、その後の 1000 個は平均 7 の分布から派生します。
rng(1234) % For reproducibility numObservations = 3000; switchPeriod1 = 1000; switchPeriod2 = 2000; X = zeros([numObservations 1]); % Generate the data for i = 1:numObservations if i <= switchPeriod1 X(i) = normrnd(2,0.75); elseif i <= switchPeriod2 X(i) = normrnd(4,0.75); else X(i) = normrnd(7,0.75); end end
インクリメンタルなドリフト検出の用途では、データ ストリームへのアクセスとモデルの更新が連続的に発生します。データを先に収集してからモデルに供給することはありません。ただし、この例では、明確にするためにデータのシミュレーションを分けて説明します。
ドリフトのウォームアップ期間を 50 個の観測値に指定し、データ入力範囲の推定期間を 100 個に指定します。
driftWarmupPeriod = 50; estimationPeriod = 100;
インクリメンタルな概念ドリフト検出器を開始します。指数加重移動平均法 (EWMA) による Hoeffding 境界の手法を使用します。入力タイプとウォームアップ期間を指定します。
incCDDetector = incrementalConceptDriftDetector("hddmw",InputType="continuous", ... WarmupPeriod=driftWarmupPeriod,EstimationPeriod=estimationPeriod)
incCDDetector = HoeffdingDriftDetectionMethod PreviousDriftStatus: 'Stable' DriftStatus: 'Stable' IsWarm: 0 NumTrainingObservations: 0 Alternative: 'greater' InputType: 'continuous' TestMethod: 'ewma' Properties, Methods
incDDetector
は、HoeffdingDriftDetectionMethod
オブジェクトです。最初にオブジェクトを作成した時点では、DriftStatus
、IsWarm
、CutMean
、NumTrainingObservations
などのプロパティは初期状態になります。detectdrift
は、それらをデータの供給に応じてインクリメンタルに更新し、ドリフトを監視します。
バッチ サイズ、およびドリフト ステータスと平均 (データが入力されるたびにドリフト検出器で計算) を記録する変数を事前に割り当てます。
status = zeros([numObservations 1]); statusname = strings([numObservations 1]); M = zeros([numObservations 1]);
観測値を一度に 1 個ずつ処理してデータ ストリームをシミュレートし、インクリメンタルなドリフト検出を実行します。各反復で次を行います。
detectdrift
で新しいデータを使用してドリフトを監視する。可視化のためにドリフト ステータスと統計量を追跡して記録する。
ドリフトが検出されたら、関数
reset
を使用してインクリメンタルな概念ドリフト検出器をリセットする。
for i = 1:numObservations incCDDetector = detectdrift(incCDDetector,X(i)); M(i) = incCDDetector.Mean; 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 #1024."
ans = "Warning detected at observation #1025."
ans = "Warning detected at observation #1026."
ans = "Warning detected at observation #1027."
ans = "Warning detected at observation #1028."
ans = "Warning detected at observation #1029."
ans = "Drift detected at observation #1030. Detector reset."
ans = "Warning detected at observation #2012."
ans = "Warning detected at observation #2013."
ans = "Warning detected at observation #2014."
ans = "Drift detected at observation #2015. Detector reset."
ドリフト ステータスと観測番号の関係をプロットします。
gscatter(1:numObservations,status,statusname,'gyr','*',5,'on',"Number of observations","Drift status")
平均値と観測値の数の関係をプロットします。
scatter(1:numObservations,M)
このプロットから、標本平均が増加していることがわかります。平均値が大きくなり、最終的にソフトウェアによってデータのドリフトが検出されます。ドリフトが検出されたら、インクリメンタルなドリフト検出器をリセットします。これにより、平均値もリセットされます。プロットの標本平均がゼロである観測値は推定期間に対応します。推定期間は、最初に 1 回とドリフト検出後のドリフト検出器のリセットの後に 2 回あります。
参照
[1] Frias-Blanco, Isvani, Jose del Campo-Ávila, Ramos-Jimenez Gonzalo, Rafael Morales-Bueno, Augustin Ortiz-Diaz, and Yaile Caballero-Mota. “Online and non-parametric drift detection methods based on Hoeffding's bounds.“ IEEE Transactions on Knowledge and Data Engineering, Vol. 27, No. 3, pp.810-823. 2014.
バージョン履歴
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)