Skip to content

Commit 5f27960

Browse files
Add KSWIN API example
1 parent e7af505 commit 5f27960

File tree

1 file changed

+35
-26
lines changed
  • frouros/detectors/concept_drift/streaming/window_based

1 file changed

+35
-26
lines changed

frouros/detectors/concept_drift/streaming/window_based/kswin.py

Lines changed: 35 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -17,34 +17,30 @@
1717
class KSWINConfig(BaseWindowConfig):
1818
"""KSWIN (Kolmogorov-Smirnov Windowing) [raab2020reactive]_ configuration.
1919
20+
:param alpha: significance value, defaults to 0.0001
21+
:type alpha: float
22+
:param seed: seed value, defaults to None
23+
:type seed: Optional[int]
24+
:param min_num_instances: minimum numbers of instances to start looking for changes, defaults to 100
25+
:type min_num_instances: int
26+
:param num_test_instances: numbers of instances to be used by the statistical test, defaults to 30
27+
:type num_test_instances: int
28+
:raises ValueError: Value error exception if seed is not valid
29+
2030
:References:
2131
2232
.. [raab2020reactive] Raab, Christoph, Moritz Heusinger, and Frank-Michael Schleif.
2333
"Reactive soft prototype computing for concept drift streams."
2434
Neurocomputing 416 (2020): 340-351.
25-
"""
35+
""" # noqa: E501
2636

27-
def __init__(
37+
def __init__( # noqa: D107
2838
self,
2939
alpha: float = 0.0001,
3040
seed: Optional[int] = None,
3141
min_num_instances: int = 100,
3242
num_test_instances: int = 30,
3343
) -> None:
34-
"""Init method.
35-
36-
:param alpha: significance value
37-
:type alpha: float
38-
:param seed: seed value
39-
:type seed: Optional[int]
40-
:param min_num_instances: minimum numbers of instances
41-
to start looking for changes
42-
:type min_num_instances: int
43-
:param num_test_instances: numbers of instances
44-
to be used by the statistical test
45-
:type num_test_instances: int
46-
:raises ValueError: Value error exception
47-
"""
4844
try:
4945
np.random.seed(seed=seed)
5046
except ValueError as e:
@@ -104,30 +100,43 @@ def num_test_instances(self, value: int) -> None:
104100
class KSWIN(BaseWindow):
105101
"""KSWIN (Kolmogorov-Smirnov Windowing) [raab2020reactive]_ detector.
106102
103+
:param config: configuration object of the detector, defaults to None. If None, the default configuration of :class:`KSWINConfig` is used.
104+
:type config: Optional[KSWINConfig]
105+
:param callbacks: callbacks, defaults to None
106+
:type callbacks: Optional[Union[BaseCallbackStreaming, List[BaseCallbackStreaming]]]
107+
107108
:References:
108109
109110
.. [raab2020reactive] Raab, Christoph, Moritz Heusinger, and Frank-Michael Schleif.
110111
"Reactive soft prototype computing for concept drift streams."
111112
Neurocomputing 416 (2020): 340-351.
112-
"""
113+
114+
:Example:
115+
116+
>>> from frouros.detectors.concept_drift import KSWIN, KSWINConfig
117+
>>> import numpy as np
118+
>>> np.random.seed(seed=31)
119+
>>> dist_a = np.random.normal(loc=0.2, scale=0.01, size=1000)
120+
>>> dist_b = np.random.normal(loc=0.8, scale=0.04, size=1000)
121+
>>> stream = np.concatenate((dist_a, dist_b))
122+
>>> detector = KSWIN(config=KSWINConfig(seed=31))
123+
>>> for i, value in enumerate(stream):
124+
... _ = detector.update(value=value)
125+
... if detector.drift:
126+
... print(f"Change detected at index {i}")
127+
... break
128+
Change detected at index 1016
129+
""" # noqa: E501
113130

114131
config_type = KSWINConfig
115132

116-
def __init__(
133+
def __init__( # noqa: D107
117134
self,
118135
config: Optional[KSWINConfig] = None,
119136
callbacks: Optional[
120137
Union[BaseCallbackStreaming, List[BaseCallbackStreaming]]
121138
] = None,
122139
) -> None:
123-
"""Init method.
124-
125-
:param config: configuration parameters
126-
:type config: Optional[KSWINConfig]
127-
:param callbacks: callbacks
128-
:type callbacks: Optional[Union[BaseCallbackStreaming,
129-
List[BaseCallbackStreaming]]]
130-
"""
131140
super().__init__(
132141
config=config,
133142
callbacks=callbacks,

0 commit comments

Comments
 (0)