From e1730f87cad79f5d8ec819a1b0b83c7989e00a40 Mon Sep 17 00:00:00 2001 From: detlefarend Date: Thu, 13 Feb 2025 17:44:31 +0100 Subject: [PATCH] Refact: Separation of anomaly detection from drift detection #1133 --- .../03_machine_learning/mlpro_oa/main.rst | 9 +- .../mlpro_oa/sub/01_oa_stream_processing.rst | 32 +++ .../mlpro_oa/sub/01_overview.rst | 5 - .../mlpro_oa/sub/02_getstarted.rst | 6 - .../mlpro_oa/sub/03_oa_stream_processing.rst | 21 -- ..._systems.rst.off => 03_oa_systems.rst.off} | 6 +- .../01_overview.rst | 0 .../01_overview/01_oa_stream_task.rst | 2 +- .../01_overview/02_oa_stream_workflow.rst | 2 +- .../02_oa_boundary_detector.rst | 2 +- .../03_oa_normalization.rst | 0 .../03_oa_normalization/01_oa_minmax.rst | 0 .../03_oa_normalization/02_oa_zscaling.rst | 0 .../10_cluster_analysis.rst | 2 +- .../10_cluster_analysis/.gitkeep | 0 .../20_anomaly_detection.rst | 8 +- .../20_anomaly_detection/01_cbad.rst | 13 +- .../21_anomaly_prediction.rst.off} | 6 +- .../21_anomaly_prediction}/.gitkeep | 0 .../sub/streams/30_drift_detection.rst | 21 ++ .../streams/30_drift_detection/01_cbdd.rst | 21 ++ .../31_drift_prediction}/.gitkeep | 0 .../mlpro_oa/sub/systems/.gitkeep | 0 .../appendix1/sub/mlpro_oa/01_streams.rst | 6 +- .../sub/mlpro_oa/streams/howto_oa_pp_009.rst | 26 -- .../sub/mlpro_oa/streams/howto_oa_pp_121.rst | 26 ++ ...owto_oa_pp_009.gif => howto_oa_pp_121.gif} | Bin .../sub/core/mlpro_oa/01_streams.rst | 4 +- .../sub/pool/mlpro_oa/10_streams.rst | 4 +- .../{20_systems.rst => 20_systems.rst.off} | 0 .../pool/mlpro_oa/streams/01_stream_tasks.rst | 4 +- ...g_tasks.rst => 10_preprocessing_tasks.rst} | 6 +- ...analyzers.rst => 20_cluster_analyzers.rst} | 4 +- ...detectors.rst => 30_anomaly_detectors.rst} | 2 +- ...tors.rst => 31_anomaly_predictors.rst.off} | 2 +- .../streams/tasks/40_drift_detectors.rst | 36 +++ .../drift_detectors/10_common_drifts.rst | 10 + .../drift_detectors/20_common_algorithms.rst | 10 + .../drift_detectors/30_cluster_based.rst | 14 + ...-Drift-Detectors_class_diagram.drawio.dtmp | 229 +++++++++++++++ ...OA-CB-Drift-Detectors_class_diagram.drawio | 147 ++++++++++ ...A-Drift-Detectors_class_diagram.drawio.bkp | 147 ++++++++++ ...-Detectors_class_diagram-Page-1.drawio.png | Bin 0 -> 326107 bytes ...ro-OA-Drift-Detectors_class_diagram.drawio | 147 ++++++++++ .../anomalies/clusterbased/__init__.py | 1 - .../anomalydetectors/cb_detectors/__init__.py | 1 - .../oa/streams/tasks/driftdetectors/basics.py | 56 ++-- .../driftdetectors/clusterbased/__init__.py | 3 +- .../driftdetectors/clusterbased/basics.py | 18 +- .../{drift_detector.py => movement.py} | 138 +++++---- .../tasks/driftdetectors/drifts/basics.py | 58 +++- .../drifts/clusterbased/__init__.py | 3 +- .../drifts/clusterbased/basics.py | 23 +- .../drifts/clusterbased/movement.py | 30 ++ ...tDetector_InstantaneousDetection_2d.py.off | 199 ------------- ..._normminmax_2d_3d_nD_multithreading.py.off | 261 ------------------ .../oa/streams/anomalydetection/.gitkeep | 0 .../oa/streams/anomalyprediction/.gitkeep | 0 ...Detector_InstantaneousDetection_2d.py.off} | 45 +-- ...ntaneousDetection_normalization_2d.py.off} | 0 ...terDriftDetector_StateDetection_2d.py.off} | 0 ...or_StateDetection_normalization_2d.py.off} | 0 ...ntaneousDetection_normalization_3d.py.off} | 0 ...ntaneousDetection_normalization_3d.py.off} | 0 ...terDriftDetector_StateDetection_3d.py.off} | 0 ...or_StateDetection_normalization_3d.py.off} | 0 ...Detector_InstantaneousDetection_5d.py.off} | 0 ...ntaneousDetection_normalization_5d.py.off} | 0 ...terDriftDetector_StateDetection_5d.py.off} | 0 ...or_StateDetection_normalization_5d.py.off} | 0 ...oa_streams_pp_121_complex_preprocessing.py | 0 ...owto_oa_streams_pp_001_bd_normminmax_2d.py | 0 ...owto_oa_streams_pp_002_bd_normminmax_3d.py | 0 ...owto_oa_streams_pp_003_bd_normminmax_nd.py | 0 .../howto_oa_streams_pp_006_normztrans_2d.py | 0 .../howto_oa_streams_pp_007_normztrans_3d.py | 0 .../howto_oa_streams_pp_008_normztrans_nd.py | 0 ..._101_rearranger_window_bd_normminmax_2d.py | 0 ..._102_rearranger_window_bd_normminmax_3d.py | 0 ..._103_rearranger_window_bd_normminmax_nd.py | 0 ...earranger_window_bd_normminmax_2d_3d_nD.py | 0 ...p_111_rearranger_deriver_normalizer.py.off | 0 82 files changed, 1114 insertions(+), 702 deletions(-) create mode 100644 doc/rtd/content/03_machine_learning/mlpro_oa/sub/01_oa_stream_processing.rst delete mode 100644 doc/rtd/content/03_machine_learning/mlpro_oa/sub/01_overview.rst delete mode 100644 doc/rtd/content/03_machine_learning/mlpro_oa/sub/02_getstarted.rst delete mode 100644 doc/rtd/content/03_machine_learning/mlpro_oa/sub/03_oa_stream_processing.rst rename doc/rtd/content/03_machine_learning/mlpro_oa/sub/{04_oa_systems.rst.off => 03_oa_systems.rst.off} (54%) rename doc/rtd/content/03_machine_learning/mlpro_oa/sub/{layer0_oa_stream_processing => streams}/01_overview.rst (100%) rename doc/rtd/content/03_machine_learning/mlpro_oa/sub/{layer0_oa_stream_processing => streams}/01_overview/01_oa_stream_task.rst (68%) rename doc/rtd/content/03_machine_learning/mlpro_oa/sub/{layer0_oa_stream_processing => streams}/01_overview/02_oa_stream_workflow.rst (68%) rename doc/rtd/content/03_machine_learning/mlpro_oa/sub/{layer0_oa_stream_processing => streams}/02_oa_boundary_detector.rst (87%) rename doc/rtd/content/03_machine_learning/mlpro_oa/sub/{layer0_oa_stream_processing => streams}/03_oa_normalization.rst (100%) rename doc/rtd/content/03_machine_learning/mlpro_oa/sub/{layer0_oa_stream_processing => streams}/03_oa_normalization/01_oa_minmax.rst (100%) rename doc/rtd/content/03_machine_learning/mlpro_oa/sub/{layer0_oa_stream_processing => streams}/03_oa_normalization/02_oa_zscaling.rst (100%) rename doc/rtd/content/03_machine_learning/mlpro_oa/sub/{layer0_oa_stream_processing => streams}/10_cluster_analysis.rst (93%) rename doc/rtd/content/03_machine_learning/mlpro_oa/sub/{layer0_oa_stream_processing => streams}/10_cluster_analysis/.gitkeep (100%) rename doc/rtd/content/03_machine_learning/mlpro_oa/sub/{layer0_oa_stream_processing => streams}/20_anomaly_detection.rst (97%) rename doc/rtd/content/03_machine_learning/mlpro_oa/sub/{layer0_oa_stream_processing => streams}/20_anomaly_detection/01_cbad.rst (90%) rename doc/rtd/content/03_machine_learning/mlpro_oa/sub/{layer0_oa_stream_processing/30_anomaly_prediction.rst => streams/21_anomaly_prediction.rst.off} (76%) rename doc/rtd/content/03_machine_learning/mlpro_oa/sub/{layer0_oa_stream_processing/30_anomaly_prediction => streams/21_anomaly_prediction}/.gitkeep (100%) create mode 100644 doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/30_drift_detection.rst create mode 100644 doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/30_drift_detection/01_cbdd.rst rename doc/rtd/content/03_machine_learning/mlpro_oa/sub/{layer1_oa_systems => streams/31_drift_prediction}/.gitkeep (100%) create mode 100644 doc/rtd/content/03_machine_learning/mlpro_oa/sub/systems/.gitkeep delete mode 100644 doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/howto_oa_pp_009.rst create mode 100644 doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/howto_oa_pp_121.rst rename doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/images/{howto_oa_pp_009.gif => howto_oa_pp_121.gif} (100%) rename doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/{20_systems.rst => 20_systems.rst.off} (100%) rename doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/{01_preprocessing_tasks.rst => 10_preprocessing_tasks.rst} (90%) rename doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/{02_cluster_analyzers.rst => 20_cluster_analyzers.rst} (93%) rename doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/{03_anomaly_detectors.rst => 30_anomaly_detectors.rst} (97%) rename doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/{04_anomaly_predictors.rst => 31_anomaly_predictors.rst.off} (78%) create mode 100644 doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/40_drift_detectors.rst create mode 100644 doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/10_common_drifts.rst create mode 100644 doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/20_common_algorithms.rst create mode 100644 doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/30_cluster_based.rst create mode 100644 doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/cluster_based/images/.$MLPro-OA-CB-Drift-Detectors_class_diagram.drawio.dtmp create mode 100644 doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/cluster_based/images/MLPro-OA-CB-Drift-Detectors_class_diagram.drawio create mode 100644 doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/images/.$MLPro-OA-Drift-Detectors_class_diagram.drawio.bkp create mode 100644 doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/images/MLPro-OA-Drift-Detectors_class_diagram-Page-1.drawio.png create mode 100644 doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/images/MLPro-OA-Drift-Detectors_class_diagram.drawio rename src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/{drift_detector.py => movement.py} (72%) create mode 100644 src/mlpro/oa/streams/tasks/driftdetectors/drifts/clusterbased/movement.py delete mode 100644 test/howtos/oa/howto_oa_streams_cbap_001_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py.off delete mode 100644 test/howtos/oa/howto_oa_streams_pp_105_rearranger_window_bd_normminmax_2d_3d_nD_multithreading.py.off create mode 100644 test/howtos/oa/streams/anomalydetection/.gitkeep create mode 100644 test/howtos/oa/streams/anomalyprediction/.gitkeep rename test/howtos/oa/{howto_oa_streams_cbad_001_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py => streams/driftdetection/clusterbased/howto_oa_streams_cbdd_001_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py.off} (78%) rename test/howtos/oa/{howto_oa_streams_cbad_002_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_2d.py => streams/driftdetection/clusterbased/howto_oa_streams_cbdd_002_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_2d.py.off} (100%) rename test/howtos/oa/{howto_oa_streams_cbad_003_KMeans_ClusterDriftDetector_StateDetection_2d.py => streams/driftdetection/clusterbased/howto_oa_streams_cbdd_003_KMeans_ClusterDriftDetector_StateDetection_2d.py.off} (100%) rename test/howtos/oa/{howto_oa_streams_cbad_004_KMeans_ClusterDriftDetector_StateDetection_normalization_2d.py => streams/driftdetection/clusterbased/howto_oa_streams_cbdd_004_KMeans_ClusterDriftDetector_StateDetection_normalization_2d.py.off} (100%) rename test/howtos/oa/{howto_oa_streams_cbad_005_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_3d.py => streams/driftdetection/clusterbased/howto_oa_streams_cbdd_005_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_3d.py.off} (100%) rename test/howtos/oa/{howto_oa_streams_cbad_006_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_3d.py => streams/driftdetection/clusterbased/howto_oa_streams_cbdd_006_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_3d.py.off} (100%) rename test/howtos/oa/{howto_oa_streams_cbad_007_KMeans_ClusterDriftDetector_StateDetection_3d.py => streams/driftdetection/clusterbased/howto_oa_streams_cbdd_007_KMeans_ClusterDriftDetector_StateDetection_3d.py.off} (100%) rename test/howtos/oa/{howto_oa_streams_cbad_008_KMeans_ClusterDriftDetector_StateDetection_normalization_3d.py => streams/driftdetection/clusterbased/howto_oa_streams_cbdd_008_KMeans_ClusterDriftDetector_StateDetection_normalization_3d.py.off} (100%) rename test/howtos/oa/{howto_oa_streams_cbad_009_KMeans_ClusterDriftDetector_InstantaneousDetection_5d.py => streams/driftdetection/clusterbased/howto_oa_streams_cbdd_009_KMeans_ClusterDriftDetector_InstantaneousDetection_5d.py.off} (100%) rename test/howtos/oa/{howto_oa_streams_cbad_010_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_5d.py => streams/driftdetection/clusterbased/howto_oa_streams_cbdd_010_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_5d.py.off} (100%) rename test/howtos/oa/{howto_oa_streams_cbad_011_KMeans_ClusterDriftDetector_StateDetection_5d.py => streams/driftdetection/clusterbased/howto_oa_streams_cbdd_011_KMeans_ClusterDriftDetector_StateDetection_5d.py.off} (100%) rename test/howtos/oa/{howto_oa_streams_cbad_012_KMeans_ClusterDriftDetector_StateDetection_normalization_5d.py => streams/driftdetection/clusterbased/howto_oa_streams_cbdd_012_KMeans_ClusterDriftDetector_StateDetection_normalization_5d.py.off} (100%) rename test/howtos/oa/{ => streams/hybrid}/howto_oa_streams_pp_121_complex_preprocessing.py (100%) rename test/howtos/oa/{ => streams/normalization}/howto_oa_streams_pp_001_bd_normminmax_2d.py (100%) rename test/howtos/oa/{ => streams/normalization}/howto_oa_streams_pp_002_bd_normminmax_3d.py (100%) rename test/howtos/oa/{ => streams/normalization}/howto_oa_streams_pp_003_bd_normminmax_nd.py (100%) rename test/howtos/oa/{ => streams/normalization}/howto_oa_streams_pp_006_normztrans_2d.py (100%) rename test/howtos/oa/{ => streams/normalization}/howto_oa_streams_pp_007_normztrans_3d.py (100%) rename test/howtos/oa/{ => streams/normalization}/howto_oa_streams_pp_008_normztrans_nd.py (100%) rename test/howtos/oa/{ => streams/normalization}/howto_oa_streams_pp_101_rearranger_window_bd_normminmax_2d.py (100%) rename test/howtos/oa/{ => streams/normalization}/howto_oa_streams_pp_102_rearranger_window_bd_normminmax_3d.py (100%) rename test/howtos/oa/{ => streams/normalization}/howto_oa_streams_pp_103_rearranger_window_bd_normminmax_nd.py (100%) rename test/howtos/oa/{ => streams/normalization}/howto_oa_streams_pp_104_rearranger_window_bd_normminmax_2d_3d_nD.py (100%) rename test/howtos/oa/{ => streams/normalization}/howto_oa_streams_pp_111_rearranger_deriver_normalizer.py.off (100%) diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/main.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/main.rst index 61f716813..18cc6d7f7 100644 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/main.rst +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/main.rst @@ -2,9 +2,12 @@ MLPro-OA - Online Adaptivity ============================ -This framework addresses topics of online machine learning and is already implemented and ready to be used by early adopters. The -documentation is still in preparation but the API description is already done. Just browse through the menu structure and follow -the links provided... +This framework addresses the challenge of continuously adapting to changing conditions by processing new information in real time. Unlike traditional offline approaches, +which rely on predefined models trained on historical data, online-adaptive methods dynamically refine their behavior as new data becomes available. This enables +continuous learning, rapid adaptation to non-stationary environments, and increased robustness in uncertain or evolving scenarios. Such methods are essential in domains +requiring real-time decision-making and continuous model updates, including autonomous systems, predictive analytics, and self-optimizing processes. + +The following subfields are available in MLPro-OA: .. toctree:: :maxdepth: 2 diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/01_oa_stream_processing.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/01_oa_stream_processing.rst new file mode 100644 index 000000000..58dc3f787 --- /dev/null +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/01_oa_stream_processing.rst @@ -0,0 +1,32 @@ +.. _target_oa_streams: +Online-adaptive data stream processing (OADSP) +============================================== + +This sub-framework of MLPro-OA is directly related to the research topic of online machine learning (OML). It deals with +online-adaptive stream tasks embedded in a stream workflow as part of an extended process model. This process model extends +the non-adaptive DSP process model of sub-framework MLPro-BF-Streams by advanced adaptation mechanisms like + + - Event-oriented adaptation + - Cascaded adaptation + - Reverse adaptation + +which are explained in more detail below. + +The description is still under contruction but parts of the sub-menu and first howtos and API specifications are already available. +Browse the menu and see Section 'Cross reference' for further details. + + +**Learn more** + +.. toctree:: + :maxdepth: 3 + :glob: + + streams/* + + +**Cross reference** + - :ref:`Howtos MPro-OA ` + - :ref:`API reference: MLPro-OA-Streams ` + - :ref:`API reference: MLPro-OA-Streams - Pool of objects ` + - :ref:`Basics of data stream processing in MLPro ` \ No newline at end of file diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/01_overview.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/01_overview.rst deleted file mode 100644 index 5d5a4e930..000000000 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/01_overview.rst +++ /dev/null @@ -1,5 +0,0 @@ -.. _target_oa_overview: -Overview -======== - -Further descriptions coming soon... \ No newline at end of file diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/02_getstarted.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/02_getstarted.rst deleted file mode 100644 index d164b5365..000000000 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/02_getstarted.rst +++ /dev/null @@ -1,6 +0,0 @@ -.. _target_oa_getstarted: -Getting Started -=============== - -Further descriptions coming soon... - diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/03_oa_stream_processing.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/03_oa_stream_processing.rst deleted file mode 100644 index 28d62550d..000000000 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/03_oa_stream_processing.rst +++ /dev/null @@ -1,21 +0,0 @@ -.. _target_oa_streams: -Online Adaptive Stream Processing -================================= - -Description under contruction. Please consider the cross reference for first technical information. - - -**Learn more** - -.. toctree:: - :maxdepth: 3 - :glob: - - layer0_oa_stream_processing/* - - -**Cross Reference** - - :ref:`Howtos MPro-OA ` - - :ref:`API Reference: MLPro-OA ` - - :ref:`API Reference: MLPro-OA Pool of Objects ` - - :ref:`Basics of stream processing in MLPro ` \ No newline at end of file diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/04_oa_systems.rst.off b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/03_oa_systems.rst.off similarity index 54% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/04_oa_systems.rst.off rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/03_oa_systems.rst.off index 6deb29d73..3838ed72c 100644 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/04_oa_systems.rst.off +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/03_oa_systems.rst.off @@ -1,6 +1,6 @@ .. _target_oa_systems: -Online Adaptive Systems -======================= +Online-adaptive state-based systems +=================================== Further descriptions coming soon... @@ -8,4 +8,4 @@ Further descriptions coming soon... :maxdepth: 2 :glob: - layer1_oa_systems/* \ No newline at end of file + systems/* \ No newline at end of file diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/01_overview.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/01_overview.rst similarity index 100% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/01_overview.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/01_overview.rst diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/01_overview/01_oa_stream_task.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/01_overview/01_oa_stream_task.rst similarity index 68% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/01_overview/01_oa_stream_task.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/01_overview/01_oa_stream_task.rst index 915658a36..b11b06036 100644 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/01_overview/01_oa_stream_task.rst +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/01_overview/01_oa_stream_task.rst @@ -1,5 +1,5 @@ .. _target_oa_stream_tasks: -Online Adaptive Stream Tasks +Online-adaptive stream tasks ============================ ... diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/01_overview/02_oa_stream_workflow.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/01_overview/02_oa_stream_workflow.rst similarity index 68% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/01_overview/02_oa_stream_workflow.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/01_overview/02_oa_stream_workflow.rst index 15e56a1bf..19deb36af 100644 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/01_overview/02_oa_stream_workflow.rst +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/01_overview/02_oa_stream_workflow.rst @@ -1,5 +1,5 @@ .. _target_oa_stream_workflows: -Online Adaptive Stream Workflows +Online-adaptive stream workflows ================================ diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/02_oa_boundary_detector.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/02_oa_boundary_detector.rst similarity index 87% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/02_oa_boundary_detector.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/02_oa_boundary_detector.rst index 301f3237c..a656d6d79 100644 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/02_oa_boundary_detector.rst +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/02_oa_boundary_detector.rst @@ -1,5 +1,5 @@ .. _target_oa_boundary_detector: -Boundary Detection +Boundary detection ================== Further descriptions coming soon... diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/03_oa_normalization.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/03_oa_normalization.rst similarity index 100% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/03_oa_normalization.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/03_oa_normalization.rst diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/03_oa_normalization/01_oa_minmax.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/03_oa_normalization/01_oa_minmax.rst similarity index 100% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/03_oa_normalization/01_oa_minmax.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/03_oa_normalization/01_oa_minmax.rst diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/03_oa_normalization/02_oa_zscaling.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/03_oa_normalization/02_oa_zscaling.rst similarity index 100% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/03_oa_normalization/02_oa_zscaling.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/03_oa_normalization/02_oa_zscaling.rst diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/10_cluster_analysis.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/10_cluster_analysis.rst similarity index 93% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/10_cluster_analysis.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/10_cluster_analysis.rst index ec1059338..16fa57439 100644 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/10_cluster_analysis.rst +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/10_cluster_analysis.rst @@ -1,5 +1,5 @@ .. _target_oa_cluster_analyzer: -Cluster Analysis +Cluster analysis ================ Further descriptions coming soon... diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/10_cluster_analysis/.gitkeep b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/10_cluster_analysis/.gitkeep similarity index 100% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/10_cluster_analysis/.gitkeep rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/10_cluster_analysis/.gitkeep diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/20_anomaly_detection.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/20_anomaly_detection.rst similarity index 97% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/20_anomaly_detection.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/20_anomaly_detection.rst index 8acdea62a..a36222a11 100644 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/20_anomaly_detection.rst +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/20_anomaly_detection.rst @@ -1,19 +1,19 @@ .. _target_oa_anomaly_detection: -Anomaly Detection +Anomaly detection ================= Anomaly detection involves identifying instances that are structurally or dimensionally similar to non-anomalous data but deviate significantly from the normal data distribution or pattern. In real-world problems, anomaly detection helps uncover unusual activities in banking and finance, abnormalities in medical test results, uncommon behavior or sensor readings of machines, defective products in manufacturing lines, or malicious activities in network traffic monitoring. Detecting and analyzing these instances or behaviors is crucial for taking immediate action, preventing future occurrences of undesirable events, and ensuring data quality. Moreover, anomaly detection plays a pivotal role in making unbiased and accurate decisions across various domains. Anomaly detection techniques can be broadly classified into two categories based on the under- lying principles and methodologies. The two categories are Statistical anomaly detectors and Machine Learning anomaly detectors. -**Types of Anomalies** +**Types of anomalies** There are three main types of anomalies- Point anomalies, Contextual anomalies and Collective anomalies. (a) Point Anomalies : Type I anomalies or point anomalies are individual data instances that are significantly different from the rest of the dataset. Also known as global anomalies, these do not fit the normal distribution or pattern of the dataset. (b) Contextual Anomalies : Type II anomalies or contextual anomalies are data instances that are anomalies only in a particular context or subset of the dataset. Also known as conditional anomalies, these are not necessarily anomalies in the context of the whole dataset but anomalous within a specific context or condition. (c) Group Anomalies : Type III anomalies or group anomalies or collective anomalies are anomalous data instances when taken as a group or subset of the dataset. They may or may not be anomalies when considered individually. Also known as group anomalies, these occur when there is a deviation or unexpected relationship or behaviour among a group of data instances from the normal distribution of data. -**Classification of Anomaly Detectors** +**Classification of anomaly detectors** Anomaly detection techniques can be broadly classified into two categories based on the under- lying principles and methodologies. The two categories are Statistical anomaly detectors and Machine Learning anomaly detectors. (a) Statistical Anomaly Detectors : Statistical anomaly detectors use statistical methods to find data point deviations from the normal distribution. Common algorithms for this category of anomaly detectors are Z-score, Kernel Density Estimate, and Gaussian Mixture Models (GMM). @@ -29,7 +29,7 @@ Anomaly detection techniques can be broadly classified into two categories based 20_anomaly_detection/* -**Cross Reference** +**Cross reference** - Selected open access papers - Howtos diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/20_anomaly_detection/01_cbad.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/20_anomaly_detection/01_cbad.rst similarity index 90% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/20_anomaly_detection/01_cbad.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/20_anomaly_detection/01_cbad.rst index df676878b..e8db463eb 100644 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/20_anomaly_detection/01_cbad.rst +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/20_anomaly_detection/01_cbad.rst @@ -1,5 +1,5 @@ .. _target_oa_cbad: -Cluster-based Anomaly Detection +Cluster-based anomaly detection =============================== Cluster-based anomaly detection uses clustering algorithms to form clustered data and identify anomolous behaviours of these clusters, which are flagged as anomalies. @@ -18,7 +18,8 @@ Can uncover contextual anomalies (data points that are anomalous in one cluster Can identify global anomalies (points far from all clusters) and local anomalies (outliers within a cluster). Scalability with various clustering algorithms, such as k-means for simpler scenarios or DBSCAN for non-spherical and dense data distributions. -**New Types of Anomalies** + +**New types of anomalies** Cluster-based methods introduce nuanced anomaly categorizations: @@ -28,9 +29,10 @@ Scalability with various clustering algorithms, such as k-means for simpler scen (c) Cluster Structural Anomalies: Unusual clusters themselves, such as unexpected densities, shapes, or sizes, signaling broader irregularities. -**Special Dependencies on Cluster Algorithms** - Cluster-based anomaly detection heavily depends on the choice of clustering algorithm, as it directly impacts the detection process: +**Special dependencies on cluster algorithms** + +Cluster-based anomaly detection heavily depends on the choice of clustering algorithm, as it directly impacts the detection process: k-means: Effective for spherical clusters but may miss anomalies in datasets with non-convex shapes or varying densities. DBSCAN: Ideal for discovering density-based anomalies but sensitive to hyperparameter tuning (e.g., minPts, ε). @@ -39,7 +41,8 @@ Gaussian Mixture Models (GMM): Handles soft clustering and detects probabilistic Spectral Clustering: Good for identifying anomalies in non-linear manifolds but computationally intensive for large datasets. Effective anomaly detection requires understanding the clustering algorithm’s limitations and ensuring it aligns with the data characteristics and problem context. -**Cross Reference** + +**Cross reference** - Howtos - API diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/30_anomaly_prediction.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/21_anomaly_prediction.rst.off similarity index 76% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/30_anomaly_prediction.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/21_anomaly_prediction.rst.off index 273e957f2..422188a1d 100644 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/30_anomaly_prediction.rst +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/21_anomaly_prediction.rst.off @@ -1,5 +1,5 @@ .. _target_oa_anomaly_prediction: -Anomaly Prediction +Anomaly prediction ================== Further descriptions coming soon... @@ -11,10 +11,10 @@ Further descriptions coming soon... :maxdepth: 2 :glob: - 20_anomaly_prediction/* + 21_anomaly_prediction/* -**Cross Reference** +**Cross reference** - Selected open access papers - Howtos diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/30_anomaly_prediction/.gitkeep b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/21_anomaly_prediction/.gitkeep similarity index 100% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/30_anomaly_prediction/.gitkeep rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/21_anomaly_prediction/.gitkeep diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/30_drift_detection.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/30_drift_detection.rst new file mode 100644 index 000000000..23d9a7c4c --- /dev/null +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/30_drift_detection.rst @@ -0,0 +1,21 @@ +.. _target_oa_drift_detection: +Drift detection +=============== + +Further descriptions coming soon... + + +**Learn more** + +.. toctree:: + :maxdepth: 2 + :glob: + + 30_drift_detection/* + + +**Cross reference** + +- Selected open access papers +- Howtos +- API diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/30_drift_detection/01_cbdd.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/30_drift_detection/01_cbdd.rst new file mode 100644 index 000000000..81e8efda7 --- /dev/null +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/30_drift_detection/01_cbdd.rst @@ -0,0 +1,21 @@ +.. _target_oa_cbdd: +Cluster-based drift detection +============================= + +Further descriptions coming soon... + + +**New types of drift** + +... + + +**Special dependencies on cluster algorithms** + +... + + +**Cross reference** + +- Howtos +- API diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer1_oa_systems/.gitkeep b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/31_drift_prediction/.gitkeep similarity index 100% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer1_oa_systems/.gitkeep rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/31_drift_prediction/.gitkeep diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/systems/.gitkeep b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/systems/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/01_streams.rst b/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/01_streams.rst index ec0513982..376f34a3a 100644 --- a/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/01_streams.rst +++ b/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/01_streams.rst @@ -1,8 +1,8 @@ -Online Adaptive Stream Processing -================================= +Online-adaptive data stream processing +====================================== .. toctree:: :maxdepth: 1 :glob: - oa_dsp/* + streams/* diff --git a/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/howto_oa_pp_009.rst b/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/howto_oa_pp_009.rst deleted file mode 100644 index fd5588ec5..000000000 --- a/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/howto_oa_pp_009.rst +++ /dev/null @@ -1,26 +0,0 @@ -.. _Howto_OA_PP_009: -Howto OA-PP-009: Complex Preprocessing with Parallel Tasks -========================================================== - - -**Executable code** - -.. literalinclude:: ../../../../../../../../test/howtos/oa/howto_oa_pp_009_complex_preprocessing.py - :language: python - - - -**Results** - -After starting the Howto, the Workflow and Tasks windows appear. These can now be arranged on -the screen before the actual processing is started with a keystroke... - -.. image:: - images/howto_oa_pp_009.gif - :width: 700px - - - -**Cross Reference** - -- :ref:`API Reference - Online Adaptive Stream Processing ` diff --git a/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/howto_oa_pp_121.rst b/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/howto_oa_pp_121.rst new file mode 100644 index 000000000..07617824d --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/howto_oa_pp_121.rst @@ -0,0 +1,26 @@ +.. _Howto_OA_PP_121: +Howto OA-PP-121: Complex preprocessing with parallel tasks +========================================================== + + +**Executable code** + +.. literalinclude:: ../../../../../../../../test/howtos/oa/streams/hybrid/howto_oa_streams_pp_121_complex_preprocessing.py + :language: python + + + +**Results** + +After starting the Howto, the Workflow and Tasks windows appear. These can now be arranged on +the screen before the actual processing is started with a keystroke... + +.. image:: + images/howto_oa_pp_121.gif + :width: 700px + + + +**Cross reference** + +- :ref:`API Reference - Online-adaptive data stream processing ` diff --git a/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/images/howto_oa_pp_009.gif b/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/images/howto_oa_pp_121.gif similarity index 100% rename from doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/images/howto_oa_pp_009.gif rename to doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/images/howto_oa_pp_121.gif diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_oa/01_streams.rst b/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_oa/01_streams.rst index 0feed5d49..1a1e80460 100644 --- a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_oa/01_streams.rst +++ b/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_oa/01_streams.rst @@ -1,6 +1,6 @@ .. _target_api_oa_streams: -OA Stream Processing -==================== +Online-adaptive data stream processing +====================================== .. image:: streams/images/MLPro-OA-Stream-Processing_class_diagram.drawio.png :scale: 50% diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/10_streams.rst b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/10_streams.rst index cfee65612..e501c8832 100644 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/10_streams.rst +++ b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/10_streams.rst @@ -1,6 +1,6 @@ .. _target_api_pool_oa_streams: -OA Stream Processing -==================== +Online-adaptive data stream processing +====================================== .. toctree:: :maxdepth: 2 diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/20_systems.rst b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/20_systems.rst.off similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/20_systems.rst rename to doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/20_systems.rst.off diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/01_stream_tasks.rst b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/01_stream_tasks.rst index fd9c2ab0b..050f59448 100644 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/01_stream_tasks.rst +++ b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/01_stream_tasks.rst @@ -1,6 +1,6 @@ .. _target_api_oa_streams_tasks: -OA Stream Tasks -=============== +Online-adaptive stream tasks +============================ .. toctree:: :maxdepth: 2 diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/01_preprocessing_tasks.rst b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/10_preprocessing_tasks.rst similarity index 90% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/01_preprocessing_tasks.rst rename to doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/10_preprocessing_tasks.rst index 959b5f3c1..8638031f1 100644 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/01_preprocessing_tasks.rst +++ b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/10_preprocessing_tasks.rst @@ -1,12 +1,12 @@ .. _target_api_oa_stream_tasks_prepro: -OA Data Preprocessing -===================== +Preprocessing +============= .. image:: images/MLPro-OA-Preprocessing-Tasks_class_diagram.drawio.png :scale: 50% -Boundary Detector +Boundary detector ----------------- .. automodule:: mlpro.oa.streams.tasks.boundarydetectors diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/02_cluster_analyzers.rst b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/20_cluster_analyzers.rst similarity index 93% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/02_cluster_analyzers.rst rename to doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/20_cluster_analyzers.rst index 13c65ec5e..7a5a73b58 100644 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/02_cluster_analyzers.rst +++ b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/20_cluster_analyzers.rst @@ -1,12 +1,12 @@ .. _target_api_oa_stream_tasks_clu: -Cluster Analysis +Cluster analyzer ================ .. image:: images/MLPro-OA-Cluster_Analyzers_class_diagram.drawio.png :scale: 50% -Template for Cluster Algorithms +Template for cluster algorithms ------------------------------- .. automodule:: mlpro.oa.streams.tasks.clusteranalyzers.basics diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/03_anomaly_detectors.rst b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/30_anomaly_detectors.rst similarity index 97% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/03_anomaly_detectors.rst rename to doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/30_anomaly_detectors.rst index bd4d77d36..79e2bc780 100644 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/03_anomaly_detectors.rst +++ b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/30_anomaly_detectors.rst @@ -1,5 +1,5 @@ .. _target_api_oa_stream_tasks_ad: -Anomaly Detectors +Anomaly detectors ================= .. image:: anomaly_detectors/images/MLPro-OA-Anomaly-Detectors_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/04_anomaly_predictors.rst b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/31_anomaly_predictors.rst.off similarity index 78% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/04_anomaly_predictors.rst rename to doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/31_anomaly_predictors.rst.off index d4c847a1a..0ce038b8b 100644 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/04_anomaly_predictors.rst +++ b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/31_anomaly_predictors.rst.off @@ -1,5 +1,5 @@ .. _target_api_oa_stream_tasks_ap: -Anomaly Predictors +Anomaly predictors ================== In progress... diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/40_drift_detectors.rst b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/40_drift_detectors.rst new file mode 100644 index 000000000..227bbaec4 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/40_drift_detectors.rst @@ -0,0 +1,36 @@ +.. _target_api_oa_stream_tasks_dd: +Drift detectors +=============== + +.. image:: drift_detectors/images/MLPro-OA-Drift-Detectors_class_diagram.drawio.png + :scale: 50% + + +Template for drift detectors +---------------------------- + +.. automodule:: mlpro.oa.streams.tasks.driftdetectors.basics + :members: + :undoc-members: + :private-members: + :show-inheritance: + + +Template for drift events +------------------------- + +.. automodule:: mlpro.oa.streams.tasks.driftdetectors.drift.basics + :members: + :undoc-members: + :private-members: + :show-inheritance: + + +Concrete drift events and algorithms +------------------------------------ + +.. toctree:: + :maxdepth: 2 + :glob: + + drift_detectors/* diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/10_common_drifts.rst b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/10_common_drifts.rst new file mode 100644 index 000000000..dcb3085f4 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/10_common_drifts.rst @@ -0,0 +1,10 @@ +.. _target_api_oa_stream_tasks_ad_common_drifts: +Common drifts +============= + + +.. toctree:: + :maxdepth: 2 + :glob: + + common_drifts/* \ No newline at end of file diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/20_common_algorithms.rst b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/20_common_algorithms.rst new file mode 100644 index 000000000..ae5e1efb6 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/20_common_algorithms.rst @@ -0,0 +1,10 @@ +.. _target_api_oa_stream_tasks_ad_common_algorithms: +Common algorithms +================= + + +.. toctree:: + :maxdepth: 2 + :glob: + + common_algorithms/* \ No newline at end of file diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/30_cluster_based.rst b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/30_cluster_based.rst new file mode 100644 index 000000000..30d1b7a43 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/30_cluster_based.rst @@ -0,0 +1,14 @@ +.. _target_api_oa_stream_tasks_ad_cb: +Cluster-based drifts and detectors +===================================== + + +.. image:: cluster_based/images/MLPro-OA-CB-Drift-Detectors_class_diagram.drawio.png + :scale: 50% + + +.. toctree:: + :maxdepth: 2 + :glob: + + cluster_based/* \ No newline at end of file diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/cluster_based/images/.$MLPro-OA-CB-Drift-Detectors_class_diagram.drawio.dtmp b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/cluster_based/images/.$MLPro-OA-CB-Drift-Detectors_class_diagram.drawio.dtmp new file mode 100644 index 000000000..9249c1e80 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/cluster_based/images/.$MLPro-OA-CB-Drift-Detectors_class_diagram.drawio.dtmp @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/cluster_based/images/MLPro-OA-CB-Drift-Detectors_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/cluster_based/images/MLPro-OA-CB-Drift-Detectors_class_diagram.drawio new file mode 100644 index 000000000..3e94fcfa5 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/cluster_based/images/MLPro-OA-CB-Drift-Detectors_class_diagram.drawio @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/images/.$MLPro-OA-Drift-Detectors_class_diagram.drawio.bkp b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/images/.$MLPro-OA-Drift-Detectors_class_diagram.drawio.bkp new file mode 100644 index 000000000..3e94fcfa5 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/images/.$MLPro-OA-Drift-Detectors_class_diagram.drawio.bkp @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/images/MLPro-OA-Drift-Detectors_class_diagram-Page-1.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/images/MLPro-OA-Drift-Detectors_class_diagram-Page-1.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..6ad9bdc5a69975b0f2156c004b8fffd81fb8e981 GIT binary patch literal 326107 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�Pne!s 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 hSr2AXP<03$#^o|^tys!Z# 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�? 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 literal 0 HcmV?d00001 diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/images/MLPro-OA-Drift-Detectors_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/images/MLPro-OA-Drift-Detectors_class_diagram.drawio new file mode 100644 index 000000000..3e94fcfa5 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/drift_detectors/images/MLPro-OA-Drift-Detectors_class_diagram.drawio @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/clusterbased/__init__.py b/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/clusterbased/__init__.py index 134079f20..b5e76cf4f 100644 --- a/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/clusterbased/__init__.py +++ b/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/clusterbased/__init__.py @@ -1,7 +1,6 @@ from mlpro.oa.streams.tasks.anomalydetectors.anomalies.clusterbased.basics import CBAnomaly from mlpro.oa.streams.tasks.anomalydetectors.anomalies.clusterbased.density import ClusterDensityVariation from mlpro.oa.streams.tasks.anomalydetectors.anomalies.clusterbased.disappearance import ClusterDisappearance -from mlpro.oa.streams.tasks.anomalydetectors.anomalies.clusterbased.drift import ClusterDrift from mlpro.oa.streams.tasks.anomalydetectors.anomalies.clusterbased.enlargement import ClusterEnlargement from mlpro.oa.streams.tasks.anomalydetectors.anomalies.clusterbased.shrinkage import ClusterShrinkage from mlpro.oa.streams.tasks.anomalydetectors.anomalies.clusterbased.new_cluster import NewClusterAppearance \ No newline at end of file diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/__init__.py b/src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/__init__.py index cc3af768a..bc88be69d 100644 --- a/src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/__init__.py +++ b/src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/__init__.py @@ -1,6 +1,5 @@ from mlpro.oa.streams.tasks.anomalydetectors.cb_detectors.basics import AnomalyDetectorCB from mlpro.oa.streams.tasks.anomalydetectors.cb_detectors.disappearance_detector import ClusterDisappearanceDetector -from mlpro.oa.streams.tasks.anomalydetectors.cb_detectors.drift_detector import ClusterDriftDetector from mlpro.oa.streams.tasks.anomalydetectors.cb_detectors.density_change_detector import ClusterDensityChangeDetector from mlpro.oa.streams.tasks.anomalydetectors.cb_detectors.geo_size_change_detector import ClusterGeometricSizeChangeDetector from mlpro.oa.streams.tasks.anomalydetectors.cb_detectors.new_cluster_detector import NewClusterDetector diff --git a/src/mlpro/oa/streams/tasks/driftdetectors/basics.py b/src/mlpro/oa/streams/tasks/driftdetectors/basics.py index 38bc9f0f1..7126782e1 100644 --- a/src/mlpro/oa/streams/tasks/driftdetectors/basics.py +++ b/src/mlpro/oa/streams/tasks/driftdetectors/basics.py @@ -31,8 +31,9 @@ class Figure : pass ## ------------------------------------------------------------------------------------------------- class DriftDetector (OAStreamTask): """ - Base class for online anomaly detectors. It raises an event when an - anomaly is detected. + Base class for online anomaly detectors. It raises an event whenever the beginning or the end + of a drift is detected. Please describe in child classes which event classes are used. Always + use the _raise_drift_event() method when raising an event. Parameters ---------- @@ -52,13 +53,9 @@ class DriftDetector (OAStreamTask): Further optional named parameters. """ - C_TYPE = 'Drift Detector' - - C_EVENT_DRIFT_ADDED = 'DRIFT_ADDED' - C_EVENT_DRIFT_REMOVED = 'DRIFT_REMOVED' - - C_PLOT_ACTIVE = True - C_PLOT_STANDALONE = False + C_TYPE = 'Drift Detector' + C_PLOT_ACTIVE = True + C_PLOT_STANDALONE = False ## ------------------------------------------------------------------------------------------------- def __init__( self, @@ -78,14 +75,23 @@ def __init__( self, p_logging = p_logging, **p_kwargs ) - self._drift_id = 0 - self._drifts = {} + self._drift_id = 0 + self._drifts = {} ## ------------------------------------------------------------------------------------------------- - def _run(self, p_inst : InstDict): - pass + def get_drifts(self): + """ + Method to return the current list of drifts. + + Returns + ------- + drifts : dict[Drift] + Current dictionary of drifts. + """ + return self._drifts + ## ------------------------------------------------------------------------------------------------- def _get_next_drift_id(self): @@ -101,20 +107,6 @@ def _get_next_drift_id(self): return self._drift_id -## ------------------------------------------------------------------------------------------------- - def get_drifts(self): - """ - Method to return the current list of drifts. - - Returns - ------- - drifts : dict[Drift] - Current dictionary of drifts. - """ - - return self._drifts - - ## ------------------------------------------------------------------------------------------------- def _buffer_drift(self, p_drift:Drift): """ @@ -137,7 +129,7 @@ def _buffer_drift(self, p_drift:Drift): ## ------------------------------------------------------------------------------------------------- - def remove_drift(self, p_drift:Drift): + def _remove_drift(self, p_drift:Drift): """ Method to remove an existing drift object. Please use as part of your algorithm. @@ -152,16 +144,12 @@ def remove_drift(self, p_drift:Drift): ## ------------------------------------------------------------------------------------------------- - def _raise_drift_event( self, - p_event_id : str, - p_drift : Drift ): + def _raise_drift_event( self, p_drift : Drift ): """ Specialized method to raise drift events. Parameters ---------- - p_event_id : str - Event id. See class constants C_EVENT_DRIFT_ADDED/REMOVED. p_drift : Drift Drift event object to be raised. """ @@ -171,7 +159,7 @@ def _raise_drift_event( self, if self.get_visualization(): p_drift.init_plot( p_figure=self._figure, p_plot_settings=self.get_plot_settings() ) - return super()._raise_event( p_event_id = p_event_id, p_event_object = p_drift ) + return super()._raise_event( p_event_id = p_drift.event_id, p_event_object = p_drift ) ## ------------------------------------------------------------------------------------------------- diff --git a/src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/__init__.py b/src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/__init__.py index c08a54cbc..a4f80c4ae 100644 --- a/src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/__init__.py +++ b/src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/__init__.py @@ -1 +1,2 @@ -from mlpro.oa.streams.tasks.driftdetectors.clusterbased.basics import DriftDetectorCB \ No newline at end of file +from mlpro.oa.streams.tasks.driftdetectors.clusterbased.basics import DriftDetectorCB +from mlpro.oa.streams.tasks.driftdetectors.clusterbased.movement import DriftDetectorCBMovement \ No newline at end of file diff --git a/src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/basics.py b/src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/basics.py index ed3036c8f..6f0dc275b 100644 --- a/src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/basics.py +++ b/src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/basics.py @@ -15,7 +15,7 @@ """ from mlpro.bf.various import Log -from mlpro.bf.math.properties import * +from mlpro.bf.math.properties import PropertyDefinitions from mlpro.oa.streams.basics import OAStreamTask from mlpro.oa.streams.tasks.driftdetectors.basics import DriftDetector @@ -65,15 +65,15 @@ def __init__( self, p_duplicate_data : bool = False, p_visualize : bool = False, p_logging=Log.C_LOG_ALL, - **p_kwargs): + **p_kwargs ): - super().__init__(p_name = p_name, - p_range_max = p_range_max, - p_ada = p_ada, - p_duplicate_data = p_duplicate_data, - p_visualize = p_visualize, - p_logging = p_logging, - **p_kwargs) + super().__init__( p_name = p_name, + p_range_max = p_range_max, + p_ada = p_ada, + p_duplicate_data = p_duplicate_data, + p_visualize = p_visualize, + p_logging = p_logging, + **p_kwargs ) self._clusterer = p_clusterer unknown_prop = self._clusterer.align_cluster_properties(p_properties=self.C_REQ_CLUSTER_PROPERTIES) diff --git a/src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/drift_detector.py b/src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/movement.py similarity index 72% rename from src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/drift_detector.py rename to src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/movement.py index b88be9f5f..a25c363ec 100644 --- a/src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/drift_detector.py +++ b/src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/movement.py @@ -1,7 +1,7 @@ ## -- ---------------------------------------------------------------------------------------------- ## -- Project : MLPro - The integrative middleware framework for standardized machine learning ## -- Package : mlpro.oa.tasks.driftdetectors.clusterbased -## -- Module : drift_detector.py +## -- Module : movement.py ## ------------------------------------------------------------------------------------------------- ## -- History : ## -- yyyy-mm-dd Ver. Auth. Description @@ -9,23 +9,26 @@ ## -- 2023-09-12 1.0.0 SK Release ## -- 2024-04-10 1.1.0 DA/SK Refactoring ## -- 2024-05-28 1.2.0 SK Refactoring -## -- 2025-02-12 2.0.0 DA Relocation and refactoring +## -- 2025-02-12 2.0.0 DA Relocation, refactoring, renaming ## ------------------------------------------------------------------------------------------------- """ Ver. 2.0.0 (2025-02-12) -This module provides a cluster-based drift detector algorithm. +This module provides a cluster-based drift detector algorithm determining cluster movement. """ import time -from mlpro.oa.streams.basics import * -from mlpro.oa.streams.tasks.anomalydetectors.cb_detectors.basics import AnomalyDetectorCB -from mlpro.oa.streams.tasks.anomalydetectors.anomalies.clusterbased.drifts import ClusterDrift -from mlpro.oa.streams.tasks.clusteranalyzers.basics import ClusterAnalyzer -from mlpro.bf.streams import Instance, InstDict + +from mlpro.bf.various import Log +from mlpro.bf.streams import InstDict +from mlpro.bf.streams.tasks import StreamTask from mlpro.bf.math.properties import * + +from mlpro.oa.streams.tasks.driftdetectors.clusterbased import DriftDetectorCB +from mlpro.oa.streams.tasks.driftdetectors.drifts.clusterbased import DriftCBMovement +from mlpro.oa.streams.tasks.clusteranalyzers.basics import ClusterAnalyzer from mlpro.oa.streams.tasks.clusteranalyzers.clusters.properties.centroid import cprop_centroid2 @@ -33,53 +36,81 @@ ## ------------------------------------------------------------------------------------------------- ## ------------------------------------------------------------------------------------------------- -class ClusterDriftDetector(AnomalyDetectorCB): +class DriftDetectorCBMovement (DriftDetectorCB): """ This is the class for detecting change in velocity of clusters. + Parameters + ---------- + p_clusterer : ClusterAnalyzer + Related cluster analyzer providing its clusters as the basis for drift detection + p_instantaneous_velocity_change_detection : bool = True + Boolean switch for instantaneous velocity change detection (Default: True) + p_min_velocity_threshold : float = 0.01 + Threshold for minimum velocity (Default: 0.01) + p_state_change_detection : bool = False + Boolean switch for state change detection (Default: False) + p_min_acceleration_threshold : float = None + Threshold for minimum acceleration (Default: None) + p_name : str + Optional name of the task. Default is None. + p_range_max : int + Maximum range of asynchonicity. See class Range. Default is Range.C_RANGE_PROCESS. + p_ada : bool + Boolean switch for adaptivitiy. Default = True. + p_duplicate_data : bool + If True, instances will be duplicated before processing. Default = False. + p_visualize : bool + Boolean switch for visualisation. Default = False. + p_logging + Log level (see constants of class Log). Default: Log.C_LOG_ALL + p_kwargs : dict + Further optional named parameters. + """ + + C_TYPE = 'Cluster-based Drift Detector (Movement)' C_PROPERTY_DEFINITIONS : PropertyDefinitions = [cprop_centroid2] ## ------------------------------------------------------------------------------------------------- - def __init__(self, - p_clusterer : ClusterAnalyzer = None, - p_instantaneous_velocity_change_detection : bool = True, - p_min_velocity_threshold : float = 0.01, - p_state_change_detection : bool = False, - p_min_acceleration_threshold : float = False, - p_buffer_size = 5, - p_ema_alpha : float = 0.7, - p_with_time_calculation : bool = True, - p_initial_skip : int = 1, - p_name:str = None, - p_range_max = StreamTask.C_RANGE_THREAD, - p_ada : bool = True, - p_duplicate_data : bool = False, - p_visualize : bool = False, - p_logging=Log.C_LOG_ALL, - **p_kwargs): - - super().__init__(p_clusterer = p_clusterer, - p_name = p_name, - p_range_max = p_range_max, - p_ada = p_ada, - p_duplicate_data = p_duplicate_data, - p_visualize = p_visualize, - p_logging = p_logging, - **p_kwargs) + def __init__( self, + p_clusterer : ClusterAnalyzer, + p_instantaneous_velocity_change_detection : bool = True, + p_min_velocity_threshold : float = 0.01, + p_state_change_detection : bool = False, + p_min_acceleration_threshold : float = None, + p_buffer_size = 5, + p_ema_alpha : float = 0.7, + p_with_time_calculation : bool = True, + p_initial_skip : int = 1, + p_name:str = None, + p_range_max = StreamTask.C_RANGE_THREAD, + p_ada : bool = True, + p_duplicate_data : bool = False, + p_visualize : bool = False, + p_logging=Log.C_LOG_ALL, + **p_kwargs ): + + super().__init__( p_clusterer = p_clusterer, + p_name = p_name, + p_range_max = p_range_max, + p_ada = p_ada, + p_duplicate_data = p_duplicate_data, + p_visualize = p_visualize, + p_logging = p_logging, + **p_kwargs ) # Parameters for dynamic threshold, EMA smoothing, and time-based calculation - self._inst_change_det = p_instantaneous_velocity_change_detection - self._state_change_det = p_state_change_detection - self._min_vel_thresh = p_min_velocity_threshold - self._min_acc_thresh = p_min_acceleration_threshold - self._buffer_size = p_buffer_size - self._ema_alpha = p_ema_alpha - self._with_time_calculation = p_with_time_calculation - self._init_skip = p_initial_skip - self._visualize = p_visualize - self._count = 0 - self._count_change = {} + self._inst_change_det : bool = p_instantaneous_velocity_change_detection + self._state_change_det : bool = p_state_change_detection + self._min_vel_thresh : float = p_min_velocity_threshold + self._min_acc_thresh : float = p_min_acceleration_threshold + self._buffer_size = p_buffer_size + self._ema_alpha = p_ema_alpha + self._with_time_calculation : bool = p_with_time_calculation + self._init_skip : int = p_initial_skip + self._count : int = 0 + self._count_change = {} # Data structures for storing previous states and buffers self._centroids_history = {} @@ -148,13 +179,14 @@ def _run(self, p_inst : InstDict): # Raise Anomaly event if (self._count >= self._init_skip): if len(drifting_clusters) != 0: - anomaly = ClusterDrift(p_id = self._get_next_anomaly_id, - p_instances=new_instances, - p_clusters=drifting_clusters, - p_properties=properties, - p_det_time=str(inst.get_tstamp()), - p_visualize=self._visualize) - self._raise_anomaly_event(anomaly) + drift = DriftCBMovement( p_drift_status = True, + p_id = self._get_next_drift_id(), + p_instances=new_instances, + p_clusters=drifting_clusters, + p_properties=properties, + p_det_time=str(inst.get_tstamp()), + p_visualize=self._visualize ) + self._raise_drift_event( p_drift = drift ) if self._count < self._init_skip: self._count += 1 diff --git a/src/mlpro/oa/streams/tasks/driftdetectors/drifts/basics.py b/src/mlpro/oa/streams/tasks/driftdetectors/drifts/basics.py index 340c033dc..43c56c383 100644 --- a/src/mlpro/oa/streams/tasks/driftdetectors/drifts/basics.py +++ b/src/mlpro/oa/streams/tasks/driftdetectors/drifts/basics.py @@ -5,11 +5,12 @@ ## ------------------------------------------------------------------------------------------------- ## -- History : ## -- yyyy-mm-dd Ver. Auth. Description -## -- 2025-02-12 1.0.0 DA Creation +## -- 2025-02-12 0.1.0 DA Creation +## -- 2025-02-13 0.2.0 DA Class Drift: new attributes event_id, drift_status ## ------------------------------------------------------------------------------------------------- """ -Ver. 1.0.0 (2025-02-12) +Ver. 0.2.0 (2025-02-13) This module provides a template class for types of data drift to be used in drift detection algorithms. """ @@ -22,17 +23,17 @@ - - ## ------------------------------------------------------------------------------------------------- ## ------------------------------------------------------------------------------------------------- class Drift (Id, Event, Plottable): """ - This is the base class for drift events which can be raised by the drift detectors when a - drift is detected. + This is the base class for drift events which can be raised by drift detectors when the beginning + or end of a drift is detected. Parameters ---------- + p_drift_status : bool + Determines whether a new drift starts (True) or an existing drift ends (False). p_id : int Drift ID. Default value = 0. p_tstamp : datetime @@ -43,20 +44,49 @@ class Drift (Id, Event, Plottable): Reference of the object raised. Default = None. **p_kwargs Further optional keyword arguments. + + Attributes + ---------- + event_id : str + Event id to be used when raising a drift event object. It is a string consisting of the + class name and one of the postfixes '(ON)', '(OFF)' depending on the drift status. """ - C_TYPE = 'Drift' - C_PLOT_STANDALONE = False + C_TYPE = 'Drift' + C_PLOT_STANDALONE = False ## ------------------------------------------------------------------------------------------------- - def __init__(self, - p_id : int = 0, - p_tstamp : datetime = None, - p_visualize : bool = False, - p_raising_object : object = None, - **p_kwargs): + def __init__( self, + p_drift_status : bool, + p_id : int = 0, + p_tstamp : datetime = None, + p_visualize : bool = False, + p_raising_object : object = None, + **p_kwargs): Id.__init__( self, p_id = p_id ) Event.__init__( self, p_raising_object=p_raising_object, p_tstamp=p_tstamp, **p_kwargs) Plottable.__init__( self, p_visualize = p_visualize ) + + self._drift_status : bool = p_drift_status + + if p_drift_status: + self._event_id = type(self).__name__ + '(ON)' + else: + self._event_id = type(self).__name__ + '(OFF)' + + +## ------------------------------------------------------------------------------------------------- + def _get_drift_status(self) -> bool: + return self._drift_status + + +## ------------------------------------------------------------------------------------------------- + def _get_event_id(self) -> str: + return self._event_id + + +## ------------------------------------------------------------------------------------------------- + drift_status = property( fget = _get_drift_status ) + event_id = property( fget = _get_event_id ) diff --git a/src/mlpro/oa/streams/tasks/driftdetectors/drifts/clusterbased/__init__.py b/src/mlpro/oa/streams/tasks/driftdetectors/drifts/clusterbased/__init__.py index 5a486ce5b..620733649 100644 --- a/src/mlpro/oa/streams/tasks/driftdetectors/drifts/clusterbased/__init__.py +++ b/src/mlpro/oa/streams/tasks/driftdetectors/drifts/clusterbased/__init__.py @@ -1 +1,2 @@ -from mlpro.oa.streams.tasks.driftdetectors.drifts.clusterbased.basics import CBDrift \ No newline at end of file +from mlpro.oa.streams.tasks.driftdetectors.drifts.clusterbased.basics import DriftCB +from mlpro.oa.streams.tasks.driftdetectors.drifts.clusterbased.movement import DriftCBMovement \ No newline at end of file diff --git a/src/mlpro/oa/streams/tasks/driftdetectors/drifts/clusterbased/basics.py b/src/mlpro/oa/streams/tasks/driftdetectors/drifts/clusterbased/basics.py index 440654589..ba43fc553 100644 --- a/src/mlpro/oa/streams/tasks/driftdetectors/drifts/clusterbased/basics.py +++ b/src/mlpro/oa/streams/tasks/driftdetectors/drifts/clusterbased/basics.py @@ -9,7 +9,7 @@ ## ------------------------------------------------------------------------------------------------- """ -Ver. 1.0.0 (2025-02-12) +Ver. 0.1.0 (2025-02-12) This module provides a template class for cluster-based drifts to be used in cluster-based drift detection algorithms. @@ -28,11 +28,9 @@ class Figure : pass - - ## ------------------------------------------------------------------------------------------------- ## ------------------------------------------------------------------------------------------------- -class CBDrift (Drift): +class DriftCB (Drift): """ Sub-type for cluster-based drift events. @@ -59,6 +57,7 @@ class CBDrift (Drift): ## ------------------------------------------------------------------------------------------------- def __init__(self, + p_drift_status : bool, p_id : int = 0, p_tstamp : datetime = None, p_visualize : bool = False, @@ -67,7 +66,8 @@ def __init__(self, p_properties : dict = None, **p_kwargs): - super().__init__( p_id = p_id, + super().__init__( p_drift_status = p_drift_status, + p_id = p_id, p_tstamp = p_tstamp, p_visualize = p_visualize, p_raising_object = p_raising_object, @@ -110,7 +110,10 @@ def _init_plot_2d(self, p_figure: Figure, p_settings: PlotSettings): cluster : Cluster = None for cluster in self._clusters.values(): - cluster.color = "red" + if self.drift_status: + cluster.color = "red" + else: + raise NotImplementedError ## ------------------------------------------------------------------------------------------------- @@ -120,7 +123,7 @@ def _init_plot_3d(self, p_figure: Figure, p_settings: PlotSettings): cluster : Cluster = None for cluster in self._clusters.values(): - cluster.color = "red" - - - + if self.drift_status: + cluster.color = "red" + else: + raise NotImplementedError diff --git a/src/mlpro/oa/streams/tasks/driftdetectors/drifts/clusterbased/movement.py b/src/mlpro/oa/streams/tasks/driftdetectors/drifts/clusterbased/movement.py new file mode 100644 index 000000000..7d1021b18 --- /dev/null +++ b/src/mlpro/oa/streams/tasks/driftdetectors/drifts/clusterbased/movement.py @@ -0,0 +1,30 @@ +## ------------------------------------------------------------------------------------------------- +## -- Project : MLPro - The integrative middleware framework for standardized machine learning +## -- Package : mlpro.oa.tasks.driftdetectors.drifts.clusterbased +## -- Module : movement.py +## ------------------------------------------------------------------------------------------------- +## -- History : +## -- yyyy-mm-dd Ver. Auth. Description +## -- 2025-02-13 1.0.0 DA Creation +## ------------------------------------------------------------------------------------------------- + +""" +Ver. 1.0.0 (2025-02-13) + +This module provides a sub-typ of class DriftCB related to cluster movement. +""" + +from mlpro.oa.streams.tasks.driftdetectors.drifts.clusterbased.basics import DriftCB + + + + +## ------------------------------------------------------------------------------------------------- +## ------------------------------------------------------------------------------------------------- +class DriftCBMovement (DriftCB): + """ + Sub-type indicating the begin or end of a cluster movement. + """ + + C_NAME = 'Cluster-based Drift (Movement)' + C_PLOT_ACTIVE = True \ No newline at end of file diff --git a/test/howtos/oa/howto_oa_streams_cbap_001_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py.off b/test/howtos/oa/howto_oa_streams_cbap_001_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py.off deleted file mode 100644 index 9dad40ce2..000000000 --- a/test/howtos/oa/howto_oa_streams_cbap_001_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py.off +++ /dev/null @@ -1,199 +0,0 @@ -## ------------------------------------------------------------------------------------------------- -## -- Project : MLPro - The integrative middleware framework for standardized machine learning -## -- Package : test.howtos.oa -## -- Module : howto_oa_streams_cbap_001_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py -## ------------------------------------------------------------------------------------------------- -## -- History : -## -- yyyy-mm-dd Ver. Auth. Description -## -- 2024-08-14 0.0.0 DA Copied from howto_oa_streams_cbad_001_KMeans_....py -## ------------------------------------------------------------------------------------------------- - -""" -Ver. 0.0.0 (2024-08-14) - -This module is done as a part of the Master's Thesis named Online Adaptive Cluster-based Anomaly -Detection, authored by Syamraj Purushamparambil Satheesh, as a part of the course -"Systems Engineering and Engineering Management" in the Department of "Electrical Energy Engineering", -supervised by Dipl.-Info. Detlef Arend. - - -This module demonstrates cluster-based anomlay detection, on synthetic 2-dimensional data generated by -the StreamMLProClusterGenerator, using the ClusterDriftDetector anomaly detection algorithm employing -the KMeans clustering algorithm wrapped from River library, to detect ClusterDrift anomaly. - -You will learn: - -1. Generating synthetic data using the native StreamMLProClusterGenerator. - -2. Creating a workflow and tasks in MLPro-OA. - -3. Clustering the normalized streaming data using the WrRiverKMeans2MLPro, with normalizer as a predecessor. - -4. Detecting drift anomalies in the clustered data using the ClusterDriftDetector. - -In the visualization, the cross hair designating the cluster's centroid becomes'red' in colour when -an anomaly is detected linked to that specific cluster. An overview of the anomalies is displayed on -the screen following the run. - -""" -from mlpro.bf.math import Event -from mlpro.bf.mt import Event -from mlpro.bf.streams.streams import * -from mlpro.bf.various import Log -from mlpro.oa.streams import * -from mlpro_int_river.wrappers.clusteranalyzers.kmeans import WrRiverKMeans2MLPro -from mlpro.oa.streams.tasks.anomalydetectors.cb_detectors.drift_detector import ClusterDriftDetector -from mlpro.oa.streams.tasks.anomalypredictors.tsf.ad_based import AnomalyPredictorAD - - - - -class DevindisPredictor (AnomalyPredictorAD): - - def _adapt_on_event(self, p_event_id: str, p_event_object: Event) -> bool: - - # Set breakpoint here... - pass - - - - -## ------------------------------------------------------------------------------------------------- -## ------------------------------------------------------------------------------------------------- -# 1 Prepare a scenario -class MyScenario(OAStreamScenario): - C_NAME = 'ClusterDriftScenario' - - def _setup(self, p_mode, p_ada: bool, p_visualize: bool, p_logging): - - # 1.1 Get MLPro benchmark Clutser Generator - stream = StreamMLProClusterGenerator(p_num_dim=2, - p_num_instances=5000, - p_num_clusters=3, - p_radii=[100], - p_velocities=[0.0], - p_change_velocities=True, - p_changed_velocities=[0.5, 0.6], - p_points_of_change_velocities=[1000, 1200], - p_num_clusters_for_change_velocities=2, - p_seed=12, - p_logging=p_logging) - - - # 1.2 Set up a stream workflow - - # 1.2.1 Creation of a workflow - workflow = OAStreamWorkflow( p_name='Anomaly Detection', - p_range_max=OAStreamWorkflow.C_RANGE_NONE, - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - - # 1.2.2 Creation of tasks and add them to the workflow - - # Cluster Analyzer - task_clusterer = WrRiverKMeans2MLPro( p_name='#1: KMeans@River', - p_n_clusters=3, - p_halflife=0.05, - p_sigma=3, - p_seed=42, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task = task_clusterer) - - # Anomaly Detector - task_anomaly_detector = ClusterDriftDetector( p_clusterer=task_clusterer, - p_with_time_calculation=False, - p_instantaneous_velocity_change_detection=True, - p_min_velocity_threshold=1, - p_initial_skip=400, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task=task_anomaly_detector, p_pred_tasks=[task_clusterer]) - - # Anomaly Predictor - task_anomaly_predictor = DevindisPredictor( p_visualize=p_visualize, - p_logging=p_logging) - - task_anomaly_detector.register_event_handler( p_event_id = 'Anomaly', - p_event_handler = task_anomaly_predictor.adapt_on_event ) - - # 1.3 Return stream and workflow - return stream, workflow - - - -# 2 Prepare for test -if __name__ == "__main__": - cycle_limit = 2000 - logging = Log.C_LOG_ALL - visualize = True - step_rate = 1 -else: - cycle_limit = 5 - logging = Log.C_LOG_NOTHING - visualize = False - step_rate = 1 - - -# 3 Instantiate the stream scenario -myscenario = MyScenario( p_mode=Mode.C_MODE_SIM, - p_cycle_limit=cycle_limit, - p_visualize=visualize, - p_logging=logging ) - -# 4 Reset and run own stream scenario -myscenario.reset() - -if __name__ == "__main__": - myscenario.init_plot( p_plot_settings=PlotSettings( p_view = PlotSettings.C_VIEW_2D, - p_step_rate = step_rate ) ) - input('\nPlease arrange all windows and press ENTER to start stream processing...') - - - -tp_before = datetime.now() -myscenario.run() -tp_after = datetime.now() -tp_delta = tp_after - tp_before -duraction_sec = ( tp_delta.seconds * 1000000 + tp_delta.microseconds + 1 ) / 1000000 -myscenario.log(Log.C_LOG_TYPE_W, 'Duration [sec]:', round(duraction_sec,2), ', Cycles/sec:', round(cycle_limit/duraction_sec,2)) - - - -# 5 Summary -anomalies = myscenario.get_workflow()._tasks[1].get_anomalies() -detected_anomalies= len(anomalies) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, 'Here is the recap of the anomaly detector') -myscenario.log(Log.C_LOG_TYPE_W, 'Number of anomalies: ', detected_anomalies ) - -for anomaly in anomalies.values(): - anomaly_name = anomaly.C_NAME - anomaly_id = str(anomaly.id) - clusters_affected = {} - clusters = anomaly.get_clusters() - properties = anomaly.get_properties() - for x in clusters.keys(): - clusters_affected[x] = {} - clusters_affected[x]["velocity"] = properties[x]["velocity"] - clusters_affected[x]["acceleration"] = properties[x]["acceleration"] - - - inst = anomaly.get_instances()[-1].get_id() - myscenario.log(Log.C_LOG_TYPE_W, - 'Anomaly : ', anomaly_name, - '\n Anomaly ID : ', anomaly_id, - '\n Instance ID : ', inst, - '\n Clusters : ', clusters_affected) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') - -if __name__ == "__main__": - input('Press ENTER to exit...') \ No newline at end of file diff --git a/test/howtos/oa/howto_oa_streams_pp_105_rearranger_window_bd_normminmax_2d_3d_nD_multithreading.py.off b/test/howtos/oa/howto_oa_streams_pp_105_rearranger_window_bd_normminmax_2d_3d_nD_multithreading.py.off deleted file mode 100644 index 756c2b248..000000000 --- a/test/howtos/oa/howto_oa_streams_pp_105_rearranger_window_bd_normminmax_2d_3d_nD_multithreading.py.off +++ /dev/null @@ -1,261 +0,0 @@ -## ------------------------------------------------------------------------------------------------- -## -- Project : MLPro - The integrative middleware framework for standardized machine learning -## -- Package : mlpro.oa.examples -## -- Module : howto_oa_pp_007_rearranger_window_bd_normminmax_2d_3d_nD_multithreading.py -## ------------------------------------------------------------------------------------------------- -## -- History : -## -- yyyy-mm-dd Ver. Auth. Description -## -- 2023-01-09 1.0.0 DA Creation -## -- 2023-04-10 1.1.0 DA Refactoring after changes on class OAScenario -## -- 2023-05-20 1.1.1 DA Registered handler of boundary detector to window -## ------------------------------------------------------------------------------------------------- - -""" -Ver. 1.1.1 (2023-05-20) - -This module is an example of adaptive normalization of streaming data using MinMax normalizer. To -this regard, an online-adadptive custom scenario is set up. It combines a native 10-dimensional -sample stream with an online-adaptive workflow. The latter one consists of four tasks: a rearranger -to reduce the stream data to 3 dimensions, a window that buffers the last 50 instances, a boundary -detector and finally the MinMax normalizer. - -You will learn: - -1. How to set up online-adaptive custom stream scenarios. - -2. How to set up online-adaptive workflows reusing various adaptive/non-adaptive MLPro stream tasks - -3. How to run and visualize your own custom stream scenario. -""" - - - -from mlpro.bf.streams import * -from mlpro.bf.streams.streams import * -from mlpro.bf.streams.tasks import RingBuffer, Rearranger -from mlpro.oa.streams import * - - - -## ------------------------------------------------------------------------------------------------- -## ------------------------------------------------------------------------------------------------- -class MyAdaptiveScenario (OAScenario): - - C_NAME = 'Dummy' - -## ------------------------------------------------------------------------------------------------- - def _setup(self, p_mode, p_ada: bool, p_visualize: bool, p_logging): - - # 1 Prepare a native stream from MLPro - mlpro = StreamProviderMLPro(p_logging=p_logging) - stream = mlpro.get_stream( p_name=StreamMLProRnd10D.C_NAME, - p_mode=p_mode, - p_visualize=p_visualize, - p_logging=p_logging ) - - - # 2 Set up a stream workflow based on a custom stream task - - # 2.1 Creation of a workflow - workflow = OAWorkflow( p_name='wf', - p_range_max=OAWorkflow.C_RANGE_THREAD, - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - - # 2.2 Creation of a task chain 2D - - # 2.2.1 Rearranger to reduce the number of features - features = stream.get_feature_space().get_dims() - features_new = [ ( 'F', features[1:3] ) ] - - task_rearranger = Rearranger( p_name='Chain 2D, Task T1', - p_duplicate_data=True, - p_range_max=Task.C_RANGE_THREAD, - p_visualize=p_visualize, - p_logging=p_logging, - p_features_new=features_new ) - - workflow.add_task( p_task=task_rearranger ) - - # 2.2.2 Window to buffer some data - task_window = RingBuffer( p_buffer_size=50, - p_delay=True, - p_enable_statistics=True, - p_name='Chain 2D, Task T2', - p_duplicate_data=True, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task=task_window, p_pred_tasks=[task_rearranger]) - - # 2.2.3 Boundary detector - task_bd = BoundaryDetector( p_name='Chain 2D, Task T3', - p_ada=True, - p_visualize=True, - p_logging=p_logging ) - - task_window.register_event_handler( p_event_id=RingBuffer.C_EVENT_DATA_REMOVED, p_event_handler=task_bd.adapt_on_event ) - workflow.add_task(p_task = task_bd, p_pred_tasks=[task_window]) - - # # 2.2.4 MinMax-Normalizer - task_norm_minmax = NormalizerMinMax( p_name='Chain 2D, Task T4', - p_ada=True, - p_visualize=p_visualize, - p_logging=p_logging ) - - task_bd.register_event_handler( p_event_id=BoundaryDetector.C_EVENT_ADAPTED, p_event_handler=task_norm_minmax.adapt_on_event ) - - workflow.add_task(p_task = task_norm_minmax, p_pred_tasks=[task_bd]) - - - # 2.3 Creation of a task chain 3D - - # 2.3.1 Rearranger to reduce the number of features - features = stream.get_feature_space().get_dims() - features_new = [ ( 'F', features[1:4] ) ] - - task_rearranger = Rearranger( p_name='Chain 3D, Task T1', - p_range_max=Task.C_RANGE_THREAD, - p_duplicate_data=True, - p_visualize=p_visualize, - p_logging=p_logging, - p_features_new=features_new ) - - workflow.add_task( p_task=task_rearranger ) - - # 2.3.2 Window to buffer some data - task_window = Window( p_buffer_size=50, - p_delay=True, - p_enable_statistics=True, - p_name='Chain 3D, Task T2', - p_duplicate_data=True, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task=task_window, p_pred_tasks=[task_rearranger]) - - # 2.3.3 Boundary detector - task_bd = BoundaryDetector( p_name='Chain 3D, Task T3', - p_ada=True, - p_visualize=True, - p_logging=p_logging, - p_window=task_window ) - - workflow.add_task(p_task = task_bd, p_pred_tasks=[task_window]) - - # # 2.3.4 MinMax-Normalizer - task_norm_minmax = NormalizerMinMax( p_name='Chain 3D, Task T4', - p_ada=True, - p_visualize=p_visualize, - p_logging=p_logging ) - - task_bd.register_event_handler( p_event_id=BoundaryDetector.C_EVENT_ADAPTED, p_event_handler=task_norm_minmax.adapt_on_event ) - - workflow.add_task(p_task = task_norm_minmax, p_pred_tasks=[task_bd]) - - - - # 2.5 Creation of a task chain nD - - # 2.5.1 Rearranger to reduce the number of features - features = stream.get_feature_space().get_dims() - features_new = [ ( 'F', features[1:5] ) ] - - task_rearranger = Rearranger( p_name='Chain nD, Task T1', - p_range_max=Task.C_RANGE_THREAD, - p_duplicate_data=True, - p_visualize=p_visualize, - p_logging=p_logging, - p_features_new=features_new ) - - workflow.add_task( p_task=task_rearranger ) - - # 2.5.2 Window to buffer some data - task_window = Window( p_buffer_size=50, - p_delay=True, - p_enable_statistics=True, - p_name='Chain nD, Task T2', - p_duplicate_data=True, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task=task_window, p_pred_tasks=[task_rearranger]) - - # 2.5.3 Boundary detector - task_bd = BoundaryDetector( p_name='Chain nD, Task T3', - p_ada=True, - p_visualize=True, - p_logging=p_logging, - p_window=task_window ) - - workflow.add_task(p_task = task_bd, p_pred_tasks=[task_window]) - - # # 2.5.4 MinMax-Normalizer - task_norm_minmax = NormalizerMinMax( p_name='Chain nD, Task T4', - p_ada=True, - p_visualize=p_visualize, - p_logging=p_logging ) - - task_bd.register_event_handler( p_event_id=BoundaryDetector.C_EVENT_ADAPTED, p_event_handler=task_norm_minmax.adapt_on_event ) - - workflow.add_task(p_task = task_norm_minmax, p_pred_tasks=[task_bd]) - - - # 3 Return stream and workflow - return stream, workflow - - - - -# 1 Preparation of demo/unit test mode -if __name__ == "__main__": - # 1.1 Parameters for demo mode - logging = Log.C_LOG_ALL - visualize = True - - try: - cycle_limit = min(1000, max(1, int(input('\nPlease enter number of cycles (1 - 1000, default = 200): ')))) - except: - cycle_limit = 200 - - try: - step_rate = max(1, int(input('\nPlease enter update step rate for visualization (1 = update after every cycle): '))) - except: - step_rate = 1 - -else: - # 1.2 Parameters for internal unit test - cycle_limit = 2 - logging = Log.C_LOG_NOTHING - visualize = False - step_rate = 1 - - -# 2 Instantiate the stream scenario -myscenario = MyAdaptiveScenario(p_mode=Mode.C_MODE_REAL, - p_cycle_limit=cycle_limit, - p_visualize=visualize, - p_logging=logging) - - - - -# 3 Reset and run own stream scenario -myscenario.reset() - -if __name__ == '__main__': - myscenario.init_plot( p_plot_settings=PlotSettings( p_view = PlotSettings.C_VIEW_ND, - p_step_rate = step_rate ) ) - input('\nPlease arrange all windows and press ENTER to start stream processing...') - -tp_before = datetime.now() -myscenario.run() -tp_after = datetime.now() -tp_delta = tp_after - tp_before -duraction_sec = ( tp_delta.seconds * 1000000 + tp_delta.microseconds + 1 ) / 1000000 -myscenario.log(Log.C_LOG_TYPE_S, 'Duration [sec]:', round(duraction_sec,2), ', Cycles/sec:', round(cycle_limit/duraction_sec,2)) - -if __name__ == '__main__': - input('Press ENTER to exit...') \ No newline at end of file diff --git a/test/howtos/oa/streams/anomalydetection/.gitkeep b/test/howtos/oa/streams/anomalydetection/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/test/howtos/oa/streams/anomalyprediction/.gitkeep b/test/howtos/oa/streams/anomalyprediction/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/test/howtos/oa/howto_oa_streams_cbad_001_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py b/test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_001_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py.off similarity index 78% rename from test/howtos/oa/howto_oa_streams_cbad_001_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py rename to test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_001_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py.off index 90cc691b3..8e09f91fc 100644 --- a/test/howtos/oa/howto_oa_streams_cbad_001_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py +++ b/test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_001_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py.off @@ -1,16 +1,17 @@ ## ------------------------------------------------------------------------------------------------- ## -- Project : MLPro - The integrative middleware framework for standardized machine learning ## -- Package : test.howtos.oa -## -- Module : howto_oa_streams_cbad_002_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py +## -- Module : howto_oa_streams_cbdd_001_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py ## ------------------------------------------------------------------------------------------------- ## -- History : ## -- yyyy-mm-dd Ver. Auth. Description ## -- 2024-08-04 1.0.0 SK Creation ## -- 2024-10-29 1.0.1 DA Refactoring +## -- 2025-02-13 2.0.0 DA Refactoring ## ------------------------------------------------------------------------------------------------- """ -Ver. 1.0.1 (2024-10-29) +Ver. 2.0.0 (2025-02-13) This module is done as a part of the Master's Thesis named Online Adaptive Cluster-based Anomaly Detection, authored by Syamraj Purushamparambil Satheesh, as a part of the course @@ -41,7 +42,7 @@ from mlpro.bf.various import Log from mlpro.oa.streams import * from mlpro_int_river.wrappers.clusteranalyzers import WrRiverKMeans2MLPro -from mlpro.oa.streams.tasks import ClusterDriftDetector +from mlpro.oa.streams.tasks.driftdetectors.clusterbased import DriftDetectorCBMovement @@ -55,23 +56,23 @@ class MyScenario(OAStreamScenario): def _setup(self, p_mode, p_ada: bool, p_visualize: bool, p_logging): # 1.1 Get MLPro benchmark Clutser Generator - stream = StreamMLProClusterGenerator(p_num_dim=2, - p_num_instances=5000, - p_num_clusters=3, - p_radii=[100], - p_velocities=[0.0], - p_change_velocities=True, - p_changed_velocities=[0.5, 0.6], - p_points_of_change_velocities=[1000, 1200], - p_num_clusters_for_change_velocities=2, - p_seed=12, - p_logging=p_logging) + stream = StreamMLProClusterGenerator( p_num_dim=2, + p_num_instances=5000, + p_num_clusters=3, + p_radii=[100], + p_velocities=[0.0], + p_change_velocities=True, + p_changed_velocities=[0.5, 0.6], + p_points_of_change_velocities=[1000, 1200], + p_num_clusters_for_change_velocities=2, + p_seed=12, + p_logging=p_logging ) # 1.2 Set up a stream workflow # 1.2.1 Creation of a workflow - workflow = OAStreamWorkflow( p_name='Anomaly Detection', + workflow = OAStreamWorkflow( p_name='Drift Detection', p_range_max=OAStreamWorkflow.C_RANGE_NONE, p_ada=p_ada, p_visualize=p_visualize, @@ -92,13 +93,13 @@ def _setup(self, p_mode, p_ada: bool, p_visualize: bool, p_logging): workflow.add_task(p_task = task_clusterer) # Anomaly Detector - task_anomaly_detector = ClusterDriftDetector(p_clusterer=task_clusterer, - p_with_time_calculation=False, - p_instantaneous_velocity_change_detection=True, - p_min_velocity_threshold=1, - p_initial_skip=400, - p_visualize=p_visualize, - p_logging=p_logging) + task_anomaly_detector = DriftDetectorCBMovement( p_clusterer=task_clusterer, + p_with_time_calculation=False, + p_instantaneous_velocity_change_detection=True, + p_min_velocity_threshold=1, + p_initial_skip=400, + p_visualize=p_visualize, + p_logging=p_logging ) workflow.add_task(p_task=task_anomaly_detector, p_pred_tasks=[task_clusterer]) diff --git a/test/howtos/oa/howto_oa_streams_cbad_002_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_2d.py b/test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_002_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_2d.py.off similarity index 100% rename from test/howtos/oa/howto_oa_streams_cbad_002_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_2d.py rename to test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_002_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_2d.py.off diff --git a/test/howtos/oa/howto_oa_streams_cbad_003_KMeans_ClusterDriftDetector_StateDetection_2d.py b/test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_003_KMeans_ClusterDriftDetector_StateDetection_2d.py.off similarity index 100% rename from test/howtos/oa/howto_oa_streams_cbad_003_KMeans_ClusterDriftDetector_StateDetection_2d.py rename to test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_003_KMeans_ClusterDriftDetector_StateDetection_2d.py.off diff --git a/test/howtos/oa/howto_oa_streams_cbad_004_KMeans_ClusterDriftDetector_StateDetection_normalization_2d.py b/test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_004_KMeans_ClusterDriftDetector_StateDetection_normalization_2d.py.off similarity index 100% rename from test/howtos/oa/howto_oa_streams_cbad_004_KMeans_ClusterDriftDetector_StateDetection_normalization_2d.py rename to test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_004_KMeans_ClusterDriftDetector_StateDetection_normalization_2d.py.off diff --git a/test/howtos/oa/howto_oa_streams_cbad_005_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_3d.py b/test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_005_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_3d.py.off similarity index 100% rename from test/howtos/oa/howto_oa_streams_cbad_005_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_3d.py rename to test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_005_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_3d.py.off diff --git a/test/howtos/oa/howto_oa_streams_cbad_006_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_3d.py b/test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_006_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_3d.py.off similarity index 100% rename from test/howtos/oa/howto_oa_streams_cbad_006_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_3d.py rename to test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_006_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_3d.py.off diff --git a/test/howtos/oa/howto_oa_streams_cbad_007_KMeans_ClusterDriftDetector_StateDetection_3d.py b/test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_007_KMeans_ClusterDriftDetector_StateDetection_3d.py.off similarity index 100% rename from test/howtos/oa/howto_oa_streams_cbad_007_KMeans_ClusterDriftDetector_StateDetection_3d.py rename to test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_007_KMeans_ClusterDriftDetector_StateDetection_3d.py.off diff --git a/test/howtos/oa/howto_oa_streams_cbad_008_KMeans_ClusterDriftDetector_StateDetection_normalization_3d.py b/test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_008_KMeans_ClusterDriftDetector_StateDetection_normalization_3d.py.off similarity index 100% rename from test/howtos/oa/howto_oa_streams_cbad_008_KMeans_ClusterDriftDetector_StateDetection_normalization_3d.py rename to test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_008_KMeans_ClusterDriftDetector_StateDetection_normalization_3d.py.off diff --git a/test/howtos/oa/howto_oa_streams_cbad_009_KMeans_ClusterDriftDetector_InstantaneousDetection_5d.py b/test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_009_KMeans_ClusterDriftDetector_InstantaneousDetection_5d.py.off similarity index 100% rename from test/howtos/oa/howto_oa_streams_cbad_009_KMeans_ClusterDriftDetector_InstantaneousDetection_5d.py rename to test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_009_KMeans_ClusterDriftDetector_InstantaneousDetection_5d.py.off diff --git a/test/howtos/oa/howto_oa_streams_cbad_010_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_5d.py b/test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_010_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_5d.py.off similarity index 100% rename from test/howtos/oa/howto_oa_streams_cbad_010_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_5d.py rename to test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_010_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_5d.py.off diff --git a/test/howtos/oa/howto_oa_streams_cbad_011_KMeans_ClusterDriftDetector_StateDetection_5d.py b/test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_011_KMeans_ClusterDriftDetector_StateDetection_5d.py.off similarity index 100% rename from test/howtos/oa/howto_oa_streams_cbad_011_KMeans_ClusterDriftDetector_StateDetection_5d.py rename to test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_011_KMeans_ClusterDriftDetector_StateDetection_5d.py.off diff --git a/test/howtos/oa/howto_oa_streams_cbad_012_KMeans_ClusterDriftDetector_StateDetection_normalization_5d.py b/test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_012_KMeans_ClusterDriftDetector_StateDetection_normalization_5d.py.off similarity index 100% rename from test/howtos/oa/howto_oa_streams_cbad_012_KMeans_ClusterDriftDetector_StateDetection_normalization_5d.py rename to test/howtos/oa/streams/driftdetection/clusterbased/howto_oa_streams_cbdd_012_KMeans_ClusterDriftDetector_StateDetection_normalization_5d.py.off diff --git a/test/howtos/oa/howto_oa_streams_pp_121_complex_preprocessing.py b/test/howtos/oa/streams/hybrid/howto_oa_streams_pp_121_complex_preprocessing.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_121_complex_preprocessing.py rename to test/howtos/oa/streams/hybrid/howto_oa_streams_pp_121_complex_preprocessing.py diff --git a/test/howtos/oa/howto_oa_streams_pp_001_bd_normminmax_2d.py b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_001_bd_normminmax_2d.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_001_bd_normminmax_2d.py rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_001_bd_normminmax_2d.py diff --git a/test/howtos/oa/howto_oa_streams_pp_002_bd_normminmax_3d.py b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_002_bd_normminmax_3d.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_002_bd_normminmax_3d.py rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_002_bd_normminmax_3d.py diff --git a/test/howtos/oa/howto_oa_streams_pp_003_bd_normminmax_nd.py b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_003_bd_normminmax_nd.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_003_bd_normminmax_nd.py rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_003_bd_normminmax_nd.py diff --git a/test/howtos/oa/howto_oa_streams_pp_006_normztrans_2d.py b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_006_normztrans_2d.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_006_normztrans_2d.py rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_006_normztrans_2d.py diff --git a/test/howtos/oa/howto_oa_streams_pp_007_normztrans_3d.py b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_007_normztrans_3d.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_007_normztrans_3d.py rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_007_normztrans_3d.py diff --git a/test/howtos/oa/howto_oa_streams_pp_008_normztrans_nd.py b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_008_normztrans_nd.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_008_normztrans_nd.py rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_008_normztrans_nd.py diff --git a/test/howtos/oa/howto_oa_streams_pp_101_rearranger_window_bd_normminmax_2d.py b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_101_rearranger_window_bd_normminmax_2d.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_101_rearranger_window_bd_normminmax_2d.py rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_101_rearranger_window_bd_normminmax_2d.py diff --git a/test/howtos/oa/howto_oa_streams_pp_102_rearranger_window_bd_normminmax_3d.py b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_102_rearranger_window_bd_normminmax_3d.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_102_rearranger_window_bd_normminmax_3d.py rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_102_rearranger_window_bd_normminmax_3d.py diff --git a/test/howtos/oa/howto_oa_streams_pp_103_rearranger_window_bd_normminmax_nd.py b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_103_rearranger_window_bd_normminmax_nd.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_103_rearranger_window_bd_normminmax_nd.py rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_103_rearranger_window_bd_normminmax_nd.py diff --git a/test/howtos/oa/howto_oa_streams_pp_104_rearranger_window_bd_normminmax_2d_3d_nD.py b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_104_rearranger_window_bd_normminmax_2d_3d_nD.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_104_rearranger_window_bd_normminmax_2d_3d_nD.py rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_104_rearranger_window_bd_normminmax_2d_3d_nD.py diff --git a/test/howtos/oa/howto_oa_streams_pp_111_rearranger_deriver_normalizer.py.off b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_111_rearranger_deriver_normalizer.py.off similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_111_rearranger_deriver_normalizer.py.off rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_111_rearranger_deriver_normalizer.py.off