Skip to content

Commit ab6b592

Browse files
Add EDDM API example
1 parent 7bcc658 commit ab6b592

File tree

1 file changed

+42
-24
lines changed
  • frouros/detectors/concept_drift/streaming/statistical_process_control

1 file changed

+42
-24
lines changed

frouros/detectors/concept_drift/streaming/statistical_process_control/eddm.py

Lines changed: 42 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,32 +15,29 @@
1515
class EDDMConfig(BaseSPCConfig):
1616
"""EDDM (Early drift detection method) [baena2006early]_ configuration.
1717
18+
:param alpha: warning zone value, defaults to 0.95
19+
:type alpha: float
20+
:param beta: change zone value, defaults to 0.9
21+
:type beta: float
22+
:param level: level factor, defaults to 2.0
23+
:type level: float
24+
:param min_num_misclassified_instances: minimum numbers of instances to start looking for changes, defaults to 30
25+
:type min_num_misclassified_instances: int
26+
1827
:References:
1928
2029
.. [baena2006early] Baena-Garcıa, Manuel, et al. "Early drift detection method."
2130
Fourth international workshop on knowledge discovery from data streams.
2231
Vol. 6. 2006.
23-
"""
32+
""" # noqa: E501
2433

25-
def __init__(
34+
def __init__( # noqa: D107
2635
self,
2736
alpha: float = 0.95,
2837
beta: float = 0.9,
2938
level: float = 2.0,
3039
min_num_misclassified_instances: int = 30,
3140
) -> None:
32-
"""Init method.
33-
34-
:param alpha: warning zone value
35-
:type alpha: float
36-
:param beta: change zone value
37-
:type beta: float
38-
:param level: level factor
39-
:type level: float
40-
:param min_num_misclassified_instances: minimum numbers of instances
41-
to start looking for changes
42-
:type min_num_misclassified_instances: int
43-
"""
4441
super().__init__()
4542
self.alpha = alpha
4643
self.beta = beta
@@ -136,30 +133,51 @@ def min_num_misclassified_instances(self, value: int) -> None:
136133
class EDDM(BaseSPC):
137134
"""EDDM (Early drift detection method) [baena2006early]_ detector.
138135
136+
:param config: configuration object of the detector, defaults to None. If None, the default configuration of :class:`EDDMConfig` is used.
137+
:type config: Optional[EDDMConfig]
138+
:param callbacks: callbacks, defaults to None
139+
:type callbacks: Optional[Union[BaseCallbackStreaming, List[BaseCallbackStreaming]]]
140+
141+
:Note:
142+
:func:`update` method expects to receive a value of 0 if the instance is correctly classified (no error) and 1 otherwise (error).
143+
139144
:References:
140145
141146
.. [baena2006early] Baena-Garcıa, Manuel, et al. "Early drift detection method."
142147
Fourth international workshop on knowledge discovery from data streams.
143148
Vol. 6. 2006.
144-
"""
149+
150+
:Example:
151+
152+
>>> from frouros.detectors.concept_drift import EDDM
153+
>>> import numpy as np
154+
>>> np.random.seed(seed=31)
155+
>>> dist_a = np.random.binomial(n=1, p=0.6, size=1000)
156+
>>> dist_b = np.random.binomial(n=1, p=0.8, size=1000)
157+
>>> stream = np.concatenate((dist_a, dist_b))
158+
>>> detector = EDDM()
159+
>>> warning_flag = False
160+
>>> for i, value in enumerate(stream):
161+
... _ = detector.update(value=value)
162+
... if detector.drift:
163+
... print(f"Change detected at index {i}")
164+
... break
165+
... if not warning_flag and detector.warning:
166+
... print(f"Warning detected at index {i}")
167+
... warning_flag = True
168+
Warning detected at index 39
169+
Change detected at index 1294
170+
""" # noqa: E501
145171

146172
config_type = EDDMConfig # type: ignore
147173

148-
def __init__(
174+
def __init__( # noqa: D107
149175
self,
150176
config: Optional[EDDMConfig] = None,
151177
callbacks: Optional[
152178
Union[BaseCallbackStreaming, List[BaseCallbackStreaming]]
153179
] = None,
154180
) -> None:
155-
"""Init method.
156-
157-
:param config: configuration parameters
158-
:type config: Optional[EDDMConfig]
159-
:param callbacks: callbacks
160-
:type callbacks: Optional[Union[BaseCallbackStreaming,
161-
List[BaseCallbackStreaming]]]
162-
"""
163181
# mean_distance_error = 0.0
164182
super().__init__(
165183
config=config,

0 commit comments

Comments
 (0)