このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
incrementalConceptDriftDetector
構文
説明
は、既定の手法である移動平均テストによる Hoeffding 境界のドリフト検出法 (HDDMA) を使用するインクリメンタルな概念ドリフト検出器を返します。IncCDDetector = incrementalConceptDriftDetector()
は、IncCDDetector = incrementalConceptDriftDetector(DetectionMethod)DetectionMethod の手法を使用するインクリメンタルな概念ドリフト検出器を返します。
は、1 つ以上の IncCDDetector = incrementalConceptDriftDetector(DetectionMethod,Name=Value)Name=Value の引数を使用して追加のオプションを指定します。
例
ドリフト検出法 (DDM) を使用して概念ドリフト検出器を開始します。
incCDDetector = incrementalConceptDriftDetector("ddm");最初の 1000 個の観測値は故障率が 0.1 で、1000 個の観測値をすぎると故障率が 0.6 に増加する乱数ストリームを作成します。
rng(1234) % For reproducibility numObservations = 3000; switchPeriod = 1000; for i = 1:numObservations if i <= switchPeriod failurerate = 0.1; else failurerate = 0.6; end X(i) = rand()<failurerate; % Value 1 represents failure end
ドリフト ステータスを追跡する変数を事前に割り当てます。
status = zeros(numObservations,1); statusname = strings(numObservations,1);
ドリフト検出器にデータを継続的に供給し、インクリメンタルなドリフト検出を実行します。各反復で次を行います。
ドリフト検出器の統計量を更新し、
detectdriftで新しいデータ点を使用してドリフトを監視する。(メモ:detectdriftはウォームアップ期間後にドリフトをチェック)可視化のためにドリフト ステータスを追跡して記録する。
ドリフトが検出されたら、
resetを使用してインクリメンタルな概念ドリフト検出器をリセットする。
for i = 1:numObservations incCDDetector = detectdrift(incCDDetector,X(i)); statusname(i) = string(incCDDetector.DriftStatus); if incCDDetector.DriftDetected status(i) = 2; incCDDetector = reset(incCDDetector); % If drift detected, reset the detector sprintf("Drift detected at Observation #%d. Detector reset.",i) elseif incCDDetector.WarningDetected status(i) = 1; else status(i) = 0; end end
ans = "Drift detected at Observation #1078. Detector reset."
観測番号 1000 で故障率が変わった後、detectdrift は観測番号 1078 でシフトを検出します。
ドリフト ステータスと観測番号の関係をプロットします。
gscatter(1:numObservations,status,statusname,'gyr','*',4,'on',"Observation number","Drift status")

標準偏差が 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 回あります。
ドリフト検出法 (DDM) を使用して概念ドリフト検出器を開始します。
incCDDetector = incrementalConceptDriftDetector("ddm",Alternative="less",WarmupPeriod=100);
最初の 1000 個の観測値は故障率が 0.4 で、1000 個をすぎると故障率が 0.1 に減少する乱数ストリームを作成します。
rng(1234) % For reproducibility numObservations = 3000; switchPeriod = 1000; for i = 1:numObservations if i <= switchPeriod failurerate = 0.4; else failurerate = 0.125; end X(i) = rand()<failurerate; % Value 1 represents failure end
ドリフト ステータスと最適な平均値および最適な標準偏差値を追跡する変数を事前に割り当てます。
optmean = zeros(numObservations,1); optstddev = zeros(numObservations,1); status = zeros(numObservations,1); statusname = strings(numObservations,1);
ドリフト検出器にデータを継続的に供給し、潜在的な変化を監視します。可視化のためにドリフト ステータスを記録します。
for i = 1:numObservations incCDDetector = detectdrift(incCDDetector,X(i)); statusname(i) = string(incCDDetector.DriftStatus); optmean(i) = incCDDetector.OptimalMean; optstddev(i) = incCDDetector.OptimalStandardDeviation; if incCDDetector.DriftDetected status(i) = 2; incCDDetector = reset(incCDDetector); % If drift detected, reset the detector sprintf("Drift detected at Observation #%d. Detector reset.",i) elseif incCDDetector.WarningDetected status(i) = 1; else status(i) = 0; end end
ans = "Drift detected at Observation #1107. Detector reset."
観測番号 1000 で故障率が変わった後、detectdrift は観測番号 1096 でシフトを検出します。
最適な平均と最適な標準偏差の変化をプロットします。
tiledlayout(2,1); ax1 = nexttile; plot(ax1,1:numObservations,optmean) ax2 = nexttile; plot(ax2,1:numObservations,optstddev)

ドリフト ステータスと観測番号の関係をプロットします。
figure(); gscatter(1:numObservations,status,statusname,'gyr','*',4,'on',"Observation number","Drift status")

detectdrift は、複数の観測値を警告ステータスと結論付けてからドリフトと判定しています。
入力引数
インクリメンタルなドリフト検出法。次のいずれかとして指定します。
| 検出法 | 定義 |
|---|---|
"ddm" | ドリフト検出法 (DDM) |
"hddma" | 移動平均テストによる Hoeffding 境界のドリフト検出法 (HDDMA) |
"hddmw" | 指数加重移動平均 (EWMA) テストによる Hoeffding 境界のドリフト検出法 (HDDMW) |
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: Alternative="less",InputType="continuous",InputBounds=[-1,1],ForgettingFactor=0.075 は、対立仮説を less (つまり左側)、入力データのタイプを連続データ、入力データの下限と上限を [-1,1]、HDDMW 法の忘却係数の値を 0.075 に指定します。
一般オプション
ドリフト ステータスを判定する対立仮説のタイプ。"unequal"、"greater"、または "less" として指定します。2 つの検定統計量が および であるとすると、次のようになります。
"greater"は、正方向のドリフトの検定であり、 となります。この場合、帰無仮説は です。
"less"は、負方向のドリフトの検定であり、 となります。この場合、帰無仮説は です。
"unequal"は、双方向のドリフトの検定であり、 となります。この場合、帰無仮説は です。
"unequal"は、HDDMA法とHDDMW法にのみ該当します。
それぞれのタイプの検定において、detectdrift は統計量を更新し、WarningThreshold または DriftThreshold の有意水準で対立仮説を優先して帰無仮説を棄却できるかどうかをチェックします。WarningThreshold の有意水準で帰無仮説を棄却すると、DriftStatus を 'Warning' に更新します。DriftThreshold で帰無仮説を棄却すると、DriftStatus を 'Drift' に更新します。
例: Alternative="less"
ドリフト検出器への入力のタイプ。"binary" または "continuous" のいずれかとして指定します。
例: InputType="continuous"
ドリフト検出器のウォームアップに使用される観測値の数。非負の整数として指定します。ウォームアップ期間が終了するまで、detectdrift は入力データを使用してドリフト検出器に学習させ、内部の統計量を更新しますが、ドリフト ステータスはチェックしません。ウォームアップ期間に到達し、ドリフト検出器がウォームになると、ドリフト ステータスの変化のチェックが開始されます。
例: WarmupPeriod=50
データ型: double | single
DDM のオプション
ドリフトになるまでの標準偏差の数の制限。非負のスカラー値として指定します。これは、全体の検定統計値が最適な検定統計値から離れていると見なし、ドリフト検出器がドリフト ステータスをドリフトとして設定するまでの許容される標準偏差の数です。既定値の 3 は 99.7% の信頼水準に相当します[1]。
DriftThreshold の値は WarningThreshold の値より厳密に大きくなければなりません。
例: DriftThreshold=2.5
データ型: double | single
警告になるまでの標準偏差の数の制限。非負のスカラー値として指定します。これは、全体の検定統計値が最適な検定統計値から離れていると見なし、ドリフト検出器がドリフト ステータスを警告として設定するまでの許容される標準偏差の数です。既定値の 2 は 95% の信頼水準に相当します[1]。
WarningThreshold の値は DriftThreshold の値より厳密に小さくなければなりません。
例: WarningThreshold=1.75
データ型: double | single
HDDMA と HDDMW のオプション
ドリフトが存在するかどうかを判定するしきい値。0 から 1 までの非負のスカラー値として指定します。これは、Hoeffding 不等式と McDiarmid 不等式で確率変数と期待値の間の許容誤差の計算に使用される有意水準です。この水準を超えると、ドリフト検出器はドリフト ステータスをドリフトとして設定します[2]。
DriftThreshold の値は WarningThreshold の値より厳密に小さくなければなりません。
例: DriftThreshold=0.003
データ型: double | single
連続データの入力範囲の推定に使用する観測値の数。非負の整数として指定します。つまり、InputType が "continuous" の場合、InputBounds の値を指定していないと、EstimationPeriod の観測値の数を使用して入力範囲が推定されます。推定期間の後にウォームアップ期間が始まります。
InputBounds の値を指定している場合や InputType が "binary" の場合、EstimationPeriod は無視されます。
入力範囲の推定が必要な場合の既定値は 100 です。それ以外の場合の既定値は 0 です。
例: EstimationPeriod=150
データ型: double | single
連続入力データの下限と上限。サイズ 2 の数値ベクトルとして指定します。
InputType が "continuous" の場合、InputBounds の値が指定されていないと、detectdrift は推定期間にデータから範囲を推定します。データ入力範囲の推定に使用する観測値の数は EstimationPeriod を使用して指定します。
InputType が "binary" の場合、ドリフト検出器は InputBounds の値を [0,1] に設定し、名前と値の引数 InputBounds は無視されます。
HDDM では、ドリフト検出に Hoeffding 不等式と McDiarmid 不等式を使用します。これらの不等式では、制限付き入力が前提になります[2]。
例: InputBounds=[-1 1]
データ型: double | single
メモ
このオプションは、指数加重移動平均 (EWMA) 法 (DetectionMethod の設定値が "hddmw" の場合に対応) にのみ該当します。
HDDMW 法における忘却係数。0 から 1 までのスカラー値として指定します。忘却係数は、EWMA 統計量 における λ です[2]。忘却係数により、現在の平均の予測に過去の観測値がどの程度影響するかが決まります。ForgettingFactor の値が高いほど、現在の観測値の重みが増し、過去の観測値の影響が少なくなります。
例: ForgettingFactor=0.075
データ型: double | single
警告かドリフトかを判別するしきい値。0 から 1 までの非負のスカラー値として指定します。これは、Hoeffding 不等式と McDiarmid 不等式で確率変数と期待値の間の許容誤差の計算に使用される有意水準です。この水準を超えると、ドリフト検出器はドリフト ステータスを警告として設定します[2]。
WarningThreshold の値は DriftThreshold の値より厳密に大きくなければなりません。
例: WarningThreshold=0.007
データ型: double | single
出力引数
インクリメンタルな概念ドリフト検出器。DriftDetectionMethod または HoeffdingDriftDetectionMethod のいずれかのオブジェクトとして返されます。これらのオブジェクトとそのプロパティの詳細については、該当するリファレンス ページを参照してください。
参照
[1] Gama, Joao, Pedro Medas, Gladys Castillo, and Pedro P. Rodrigues. “Learning with drift detection.“ In Brazilian symposium on artificial intelligence, pp. 286-295. Berlin, Heidelberg: Springer. 2004, September.
[2] 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 Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)