deep-river 0.2.4__tar.gz → 0.2.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. {deep_river-0.2.4 → deep_river-0.2.6}/PKG-INFO +106 -9
  2. {deep_river-0.2.4 → deep_river-0.2.6}/README.md +11 -7
  3. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/__version__.py +1 -1
  4. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/anomaly/ae.py +3 -3
  5. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/anomaly/probability_weighted_ae.py +2 -2
  6. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/anomaly/scaler.py +3 -7
  7. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/base.py +6 -24
  8. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/classification/classifier.py +5 -6
  9. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/classification/rolling_classifier.py +3 -3
  10. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/classification/zoo.py +4 -4
  11. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/regression/multioutput.py +15 -7
  12. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/regression/rolling_regressor.py +4 -6
  13. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/utils/__init__.py +1 -0
  14. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/utils/estimator_checks.py +1 -0
  15. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/utils/tensor_conversion.py +1 -1
  16. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/utils/test_estimators.py +1 -0
  17. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river.egg-info/PKG-INFO +107 -10
  18. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river.egg-info/requires.txt +18 -18
  19. {deep_river-0.2.4 → deep_river-0.2.6}/setup.py +6 -6
  20. {deep_river-0.2.4 → deep_river-0.2.6}/LICENSE +0 -0
  21. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/__init__.py +0 -0
  22. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/anomaly/__init__.py +0 -0
  23. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/anomaly/rolling_ae.py +0 -0
  24. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/classification/__init__.py +0 -0
  25. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/regression/__init__.py +0 -0
  26. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/regression/regressor.py +0 -0
  27. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/regression/zoo.py +0 -0
  28. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/utils/hooks.py +0 -0
  29. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/utils/params.py +0 -0
  30. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river/utils/test_tensor_conversion.py +0 -0
  31. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river.egg-info/SOURCES.txt +0 -0
  32. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river.egg-info/dependency_links.txt +0 -0
  33. {deep_river-0.2.4 → deep_river-0.2.6}/deep_river.egg-info/top_level.txt +0 -0
  34. {deep_river-0.2.4 → deep_river-0.2.6}/pyproject.toml +0 -0
  35. {deep_river-0.2.4 → deep_river-0.2.6}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deep_river
3
- Version: 0.2.4
3
+ Version: 0.2.6
4
4
  Summary: Online Deep Learning for river
5
5
  Home-page: https://online-ml.github.io/deep-river/
6
6
  Author: Cedric Kulbach
@@ -16,10 +16,103 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
16
16
  Classifier: Programming Language :: Python :: Implementation :: PyPy
17
17
  Requires-Python: >=3.6.0
18
18
  Description-Content-Type: text/markdown
19
+ License-File: LICENSE
20
+ Requires-Dist: scikit-learn~=1.4.2
21
+ Requires-Dist: torch~=2.2.2
22
+ Requires-Dist: pandas~=2.2.2
23
+ Requires-Dist: numpy~=1.26.4
24
+ Requires-Dist: river~=0.21.1
25
+ Requires-Dist: tqdm~=4.66.4
26
+ Requires-Dist: ordered-set~=4.1.0
27
+ Requires-Dist: torchviz~=0.0.2
19
28
  Provides-Extra: dev
29
+ Requires-Dist: scikit-learn~=1.4.2; extra == "dev"
30
+ Requires-Dist: torch~=2.2.2; extra == "dev"
31
+ Requires-Dist: pandas~=2.2.2; extra == "dev"
32
+ Requires-Dist: numpy~=1.26.4; extra == "dev"
33
+ Requires-Dist: river~=0.21.1; extra == "dev"
34
+ Requires-Dist: tqdm~=4.66.4; extra == "dev"
35
+ Requires-Dist: ordered-set~=4.1.0; extra == "dev"
36
+ Requires-Dist: torchviz~=0.0.2; extra == "dev"
37
+ Requires-Dist: graphviz>=0.10.1; extra == "dev"
38
+ Requires-Dist: matplotlib>=3.0.2; extra == "dev"
39
+ Requires-Dist: mypy>=0.990; extra == "dev"
40
+ Requires-Dist: pre-commit>=2.20.0; extra == "dev"
41
+ Requires-Dist: pytest>=7.2.0; extra == "dev"
42
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
43
+ Requires-Dist: scikit-learn>=0.22.1; extra == "dev"
44
+ Requires-Dist: black>=22.10.0; extra == "dev"
45
+ Requires-Dist: flake8>=5.0.4; extra == "dev"
46
+ Requires-Dist: isort>=5.10.1; extra == "dev"
47
+ Requires-Dist: jupyter>=1.0.0; extra == "dev"
48
+ Requires-Dist: pyupgrade==3.2.0; extra == "dev"
20
49
  Provides-Extra: docs
50
+ Requires-Dist: scikit-learn~=1.4.2; extra == "docs"
51
+ Requires-Dist: torch~=2.2.2; extra == "docs"
52
+ Requires-Dist: pandas~=2.2.2; extra == "docs"
53
+ Requires-Dist: numpy~=1.26.4; extra == "docs"
54
+ Requires-Dist: river~=0.21.1; extra == "docs"
55
+ Requires-Dist: tqdm~=4.66.4; extra == "docs"
56
+ Requires-Dist: ordered-set~=4.1.0; extra == "docs"
57
+ Requires-Dist: torchviz~=0.0.2; extra == "docs"
58
+ Requires-Dist: flask>=2.0.2; extra == "docs"
59
+ Requires-Dist: ipykernel>=6.9.0; extra == "docs"
60
+ Requires-Dist: mike>=0.5.3; extra == "docs"
61
+ Requires-Dist: mkdocs>=1.2.3; extra == "docs"
62
+ Requires-Dist: mkdocs-awesome-pages-plugin>=2.7.0; extra == "docs"
63
+ Requires-Dist: mkdocs-gen-files>=0.3.5; extra == "docs"
64
+ Requires-Dist: mkdocs-charts-plugin>=0.0.8; extra == "docs"
65
+ Requires-Dist: mkdocs-literate-nav>=0.4.1; extra == "docs"
66
+ Requires-Dist: mkdocs-material>=8.1.11; extra == "docs"
67
+ Requires-Dist: mkdocstrings[python]>=0.19.0; extra == "docs"
68
+ Requires-Dist: pytkdocs[numpy-style]>=0.5.0; extra == "docs"
69
+ Requires-Dist: ipython_genutils>=0.1.0; extra == "docs"
70
+ Requires-Dist: mkdocs-jupyter>=0.20.0; extra == "docs"
71
+ Requires-Dist: nbconvert>=6.4.2; extra == "docs"
72
+ Requires-Dist: numpydoc>=1.2; extra == "docs"
73
+ Requires-Dist: spacy>=3.2.2; extra == "docs"
74
+ Requires-Dist: jinja2>=3.0.3; extra == "docs"
75
+ Requires-Dist: dominate; extra == "docs"
76
+ Requires-Dist: jupyter-client; extra == "docs"
77
+ Requires-Dist: mkdocs-charts-plugin; extra == "docs"
78
+ Requires-Dist: python-slugify; extra == "docs"
79
+ Requires-Dist: watermark==2.3.1; extra == "docs"
21
80
  Provides-Extra: all
22
- License-File: LICENSE
81
+ Requires-Dist: graphviz>=0.10.1; extra == "all"
82
+ Requires-Dist: matplotlib>=3.0.2; extra == "all"
83
+ Requires-Dist: mypy>=0.990; extra == "all"
84
+ Requires-Dist: pre-commit>=2.20.0; extra == "all"
85
+ Requires-Dist: pytest>=7.2.0; extra == "all"
86
+ Requires-Dist: pytest-cov>=4.0.0; extra == "all"
87
+ Requires-Dist: scikit-learn>=0.22.1; extra == "all"
88
+ Requires-Dist: black>=22.10.0; extra == "all"
89
+ Requires-Dist: flake8>=5.0.4; extra == "all"
90
+ Requires-Dist: isort>=5.10.1; extra == "all"
91
+ Requires-Dist: jupyter>=1.0.0; extra == "all"
92
+ Requires-Dist: pyupgrade==3.2.0; extra == "all"
93
+ Requires-Dist: flask>=2.0.2; extra == "all"
94
+ Requires-Dist: ipykernel>=6.9.0; extra == "all"
95
+ Requires-Dist: mike>=0.5.3; extra == "all"
96
+ Requires-Dist: mkdocs>=1.2.3; extra == "all"
97
+ Requires-Dist: mkdocs-awesome-pages-plugin>=2.7.0; extra == "all"
98
+ Requires-Dist: mkdocs-gen-files>=0.3.5; extra == "all"
99
+ Requires-Dist: mkdocs-charts-plugin>=0.0.8; extra == "all"
100
+ Requires-Dist: mkdocs-literate-nav>=0.4.1; extra == "all"
101
+ Requires-Dist: mkdocs-material>=8.1.11; extra == "all"
102
+ Requires-Dist: mkdocstrings[python]>=0.19.0; extra == "all"
103
+ Requires-Dist: pytkdocs[numpy-style]>=0.5.0; extra == "all"
104
+ Requires-Dist: ipython_genutils>=0.1.0; extra == "all"
105
+ Requires-Dist: mkdocs-jupyter>=0.20.0; extra == "all"
106
+ Requires-Dist: nbconvert>=6.4.2; extra == "all"
107
+ Requires-Dist: numpydoc>=1.2; extra == "all"
108
+ Requires-Dist: spacy>=3.2.2; extra == "all"
109
+ Requires-Dist: jinja2>=3.0.3; extra == "all"
110
+ Requires-Dist: dominate; extra == "all"
111
+ Requires-Dist: jupyter-client; extra == "all"
112
+ Requires-Dist: mkdocs-charts-plugin; extra == "all"
113
+ Requires-Dist: python-slugify; extra == "all"
114
+ Requires-Dist: watermark==2.3.1; extra == "all"
115
+ Requires-Dist: dataclasses; python_version == "3.6"
23
116
 
24
117
 
25
118
  <p align="center">
@@ -98,10 +191,10 @@ For further examples check out the <a href="https://online-ml.github.io/deep-riv
98
191
 
99
192
  >>> for x, y in dataset:
100
193
  ... y_pred = model_pipeline.predict_one(x) # make a prediction
101
- ... metric = metric.update(y, y_pred) # update the metric
102
- ... model_pipeline = model_pipeline.learn_one(x, y) # make the model learn
194
+ ... metric.update(y, y_pred) # update the metric
195
+ ... model_pipeline.learn_one(x, y) # make the model learn
103
196
  >>> print(f"Accuracy: {metric.get():.4f}")
104
- Accuracy: 0.6728
197
+ Accuracy: 0.6736
105
198
 
106
199
  ```
107
200
  ### Multi Target Regression
@@ -139,7 +232,7 @@ Accuracy: 0.6728
139
232
  >>> metric = metrics.multioutput.MicroAverage(metrics.MAE())
140
233
  >>> ev = evaluate.progressive_val_score(dataset, model, metric)
141
234
  >>> print(f"MicroAverage(MAE): {metric.get():.2f}")
142
- MicroAverage(MAE): 28.36
235
+ MicroAverage(MAE): 34.31
143
236
 
144
237
  ```
145
238
 
@@ -177,11 +270,11 @@ MicroAverage(MAE): 28.36
177
270
 
178
271
  >>> for x, y in dataset:
179
272
  ... score = model.score_one(x)
180
- ... model = model.learn_one(x=x)
181
- ... metric = metric.update(y, score)
273
+ ... model.learn_one(x=x)
274
+ ... metric.update(y, score)
182
275
  ...
183
276
  >>> print(f"ROCAUC: {metric.get():.4f}")
184
- ROCAUC: 0.7447
277
+ ROCAUC: 0.9017
185
278
 
186
279
  ```
187
280
 
@@ -190,3 +283,7 @@ ROCAUC: 0.7447
190
283
  <p align="center">
191
284
  <img src="https://upload.wikimedia.org/wikipedia/de/thumb/4/44/Fzi_logo.svg/1200px-Fzi_logo.svg.png?raw=true" alt="FZI Logo" height="200"/>
192
285
  </p>
286
+
287
+ <p align="center">
288
+ <img src="https://lieferbotnet.de/wp-content/uploads/2022/09/LieferBotNet-Logo.png?raw=true" alt="Lieferbot net" height="200"/>
289
+ </p>
@@ -74,10 +74,10 @@ For further examples check out the <a href="https://online-ml.github.io/deep-riv
74
74
 
75
75
  >>> for x, y in dataset:
76
76
  ... y_pred = model_pipeline.predict_one(x) # make a prediction
77
- ... metric = metric.update(y, y_pred) # update the metric
78
- ... model_pipeline = model_pipeline.learn_one(x, y) # make the model learn
77
+ ... metric.update(y, y_pred) # update the metric
78
+ ... model_pipeline.learn_one(x, y) # make the model learn
79
79
  >>> print(f"Accuracy: {metric.get():.4f}")
80
- Accuracy: 0.6728
80
+ Accuracy: 0.6736
81
81
 
82
82
  ```
83
83
  ### Multi Target Regression
@@ -115,7 +115,7 @@ Accuracy: 0.6728
115
115
  >>> metric = metrics.multioutput.MicroAverage(metrics.MAE())
116
116
  >>> ev = evaluate.progressive_val_score(dataset, model, metric)
117
117
  >>> print(f"MicroAverage(MAE): {metric.get():.2f}")
118
- MicroAverage(MAE): 28.36
118
+ MicroAverage(MAE): 34.31
119
119
 
120
120
  ```
121
121
 
@@ -153,11 +153,11 @@ MicroAverage(MAE): 28.36
153
153
 
154
154
  >>> for x, y in dataset:
155
155
  ... score = model.score_one(x)
156
- ... model = model.learn_one(x=x)
157
- ... metric = metric.update(y, score)
156
+ ... model.learn_one(x=x)
157
+ ... metric.update(y, score)
158
158
  ...
159
159
  >>> print(f"ROCAUC: {metric.get():.4f}")
160
- ROCAUC: 0.7447
160
+ ROCAUC: 0.9017
161
161
 
162
162
  ```
163
163
 
@@ -166,3 +166,7 @@ ROCAUC: 0.7447
166
166
  <p align="center">
167
167
  <img src="https://upload.wikimedia.org/wikipedia/de/thumb/4/44/Fzi_logo.svg/1200px-Fzi_logo.svg.png?raw=true" alt="FZI Logo" height="200"/>
168
168
  </p>
169
+
170
+ <p align="center">
171
+ <img src="https://lieferbotnet.de/wp-content/uploads/2022/09/LieferBotNet-Logo.png?raw=true" alt="Lieferbot net" height="200"/>
172
+ </p>
@@ -1,3 +1,3 @@
1
- VERSION = (0, 2, 4)
1
+ VERSION = (0, 2, 6)
2
2
 
3
3
  __version__ = ".".join(map(str, VERSION)) # noqa: F401
@@ -89,11 +89,11 @@ class Autoencoder(DeepEstimator, AnomalyDetector):
89
89
 
90
90
  >>> for x, y in dataset:
91
91
  ... score = model.score_one(x)
92
- ... model = model.learn_one(x=x)
93
- ... metric = metric.update(y, score)
92
+ ... model.learn_one(x=x)
93
+ ... metric.update(y, score)
94
94
  ...
95
95
  >>> print(f"ROCAUC: {metric.get():.4f}")
96
- ROCAUC: 0.7447
96
+ ROCAUC: 0.9017
97
97
  """
98
98
 
99
99
  def __init__(
@@ -83,8 +83,8 @@ class ProbabilityWeightedAutoencoder(ae.Autoencoder):
83
83
 
84
84
  >>> for x, y in dataset:
85
85
  ... score = model.score_one(x)
86
- ... model = model.learn_one(x=x)
87
- ... metric = metric.update(y, score)
86
+ ... model.learn_one(x=x)
87
+ ... metric.update(y, score)
88
88
  ...
89
89
  >>> print(f"ROCAUC: {metric.get():.4f}")
90
90
  ROCAUC: 0.8599
@@ -4,7 +4,7 @@ import numpy as np
4
4
  from river import base, utils
5
5
  from river.anomaly import HalfSpaceTrees
6
6
  from river.anomaly.base import AnomalyDetector
7
- from river.stats import Mean, Min
7
+ from river.stats import Mean, Min, RollingMin
8
8
 
9
9
 
10
10
  class AnomalyScaler(base.Wrapper, AnomalyDetector):
@@ -259,12 +259,8 @@ class AnomalyMinMaxScaler(AnomalyScaler):
259
259
  super().__init__(anomaly_detector)
260
260
  self.rolling = rolling
261
261
  self.window_size = window_size
262
- self.min = (
263
- utils.Rolling(Min(), self.window_size) if self.rolling else Min()
264
- )
265
- self.max = (
266
- utils.Rolling(Min(), self.window_size) if self.rolling else Min()
267
- )
262
+ self.min = RollingMin(self.window_size) if self.rolling else Min()
263
+ self.max = RollingMin(self.window_size) if self.rolling else Min()
268
264
 
269
265
  def score_one(self, *args):
270
266
  """
@@ -1,7 +1,6 @@
1
- import abc
2
1
  import collections
3
2
  import inspect
4
- from typing import Any, Callable, Deque, Optional, Type, Union, cast
3
+ from typing import Any, Callable, Deque, Type, Union, cast
5
4
 
6
5
  import torch
7
6
  from river import base
@@ -70,27 +69,6 @@ class DeepEstimator(base.Estimator):
70
69
  self.module_initialized = False
71
70
  torch.manual_seed(seed)
72
71
 
73
- @abc.abstractmethod
74
- def learn_one(
75
- self, x: dict, y: Optional[Any], **kwargs
76
- ) -> "DeepEstimator":
77
- """
78
- Performs one step of training with a single example.
79
-
80
- Parameters
81
- ----------
82
- x
83
- Input example.
84
- y
85
- Target value.
86
-
87
- Returns
88
- -------
89
- DeepEstimator
90
- The estimator itself.
91
- """
92
- raise NotImplementedError
93
-
94
72
  def _filter_kwargs(self, fn: Callable, override=None, **kwargs) -> dict:
95
73
  """Filters `net_params` and returns those in `fn`'s arguments.
96
74
 
@@ -151,7 +129,11 @@ class DeepEstimator(base.Estimator):
151
129
  )
152
130
  self.module_initialized = True
153
131
 
154
- def clone(self, new_params: dict = {}, include_attributes=False):
132
+ def clone(
133
+ self,
134
+ new_params: dict[Any, Any] | None = None,
135
+ include_attributes=False,
136
+ ):
155
137
  """Clones the estimator.
156
138
 
157
139
  Parameters
@@ -116,11 +116,11 @@ class Classifier(DeepEstimator, base.MiniBatchClassifier):
116
116
 
117
117
  >>> for x, y in dataset:
118
118
  ... y_pred = model_pipeline.predict_one(x) # make a prediction
119
- ... metric = metric.update(y, y_pred) # update the metric
120
- ... model_pipeline = model_pipeline.learn_one(x,y)
119
+ ... metric.update(y, y_pred) # update the metric
120
+ ... model_pipeline.learn_one(x,y)
121
121
 
122
122
  >>> print(f'Accuracy: {metric.get()}')
123
- Accuracy: 0.6728
123
+ Accuracy: 0.6736
124
124
  """
125
125
 
126
126
  def __init__(
@@ -194,13 +194,13 @@ class Classifier(DeepEstimator, base.MiniBatchClassifier):
194
194
  self.optimizer.zero_grad()
195
195
  y_pred = self.module(x)
196
196
  n_classes = y_pred.shape[-1]
197
- y = labels2onehot(
197
+ y_onehot = labels2onehot(
198
198
  y=y,
199
199
  classes=self.observed_classes,
200
200
  n_classes=n_classes,
201
201
  device=self.device,
202
202
  )
203
- loss = self.loss_fn(y_pred, y)
203
+ loss = self.loss_fn(y_pred, y_onehot)
204
204
  loss.backward()
205
205
  self.optimizer.step()
206
206
  return self
@@ -372,7 +372,6 @@ class Classifier(DeepEstimator, base.MiniBatchClassifier):
372
372
  )
373
373
 
374
374
  def find_output_layer(self, n_features: int):
375
-
376
375
  handles: List[RemovableHandle] = []
377
376
  tracker = ForwardOrderTracker()
378
377
  apply_hooks(module=self.module, hook=tracker, handles=handles)
@@ -119,10 +119,10 @@ class RollingClassifier(Classifier, RollingDeepEstimator):
119
119
 
120
120
  >>> for x, y in dataset.take(5000):
121
121
  ... y_pred = model_pipeline.predict_one(x) # make a prediction
122
- ... metric = metric.update(y, y_pred) # update the metric
123
- ... model = model_pipeline.learn_one(x, y) # make the model learn
122
+ ... metric.update(y, y_pred) # update the metric
123
+ ... model_pipeline.learn_one(x, y) # make the model learn
124
124
  >>> print(f'Accuracy: {metric.get()}')
125
- Accuracy: 0.4552
125
+ Accuracy: 0.4548
126
126
  """
127
127
 
128
128
  def __init__(
@@ -60,8 +60,8 @@ class LogisticRegression(Classifier):
60
60
 
61
61
  >>> for x, y in dataset:
62
62
  ... y_pred = model_pipeline.predict_one(x) # make a prediction
63
- ... metric = metric.update(y, y_pred) # update the metric
64
- ... model_pipeline = model_pipeline.learn_one(x, y) # update the model
63
+ ... metric.update(y, y_pred) # update the metric
64
+ ... model_pipeline.learn_one(x, y) # update the model
65
65
 
66
66
  >>> print(f"Accuracy: {metric.get():.2f}")
67
67
  Accuracy: 0.44
@@ -181,8 +181,8 @@ class MultiLayerPerceptron(Classifier):
181
181
 
182
182
  >>> for x, y in dataset:
183
183
  ... y_pred = model_pipeline.predict_one(x) # make a prediction
184
- ... metric = metric.update(y, y_pred) # update the metric
185
- ... model_pipeline = model_pipeline.learn_one(x, y) # update the model
184
+ ... metric.update(y, y_pred) # update the metric
185
+ ... model_pipeline.learn_one(x, y) # update the model
186
186
 
187
187
  >>> print(f"Accuracy: {metric.get():.2f}")
188
188
  Accuracy: 0.44
@@ -6,7 +6,7 @@ import torch
6
6
  from river.base import MultiTargetRegressor as RiverMultiTargetRegressor
7
7
  from river.base.typing import FeatureName, RegTarget
8
8
 
9
- from deep_river.regression import Regressor
9
+ from deep_river.base import DeepEstimator
10
10
  from deep_river.utils import dict2tensor, float2tensor
11
11
 
12
12
 
@@ -19,7 +19,7 @@ class _TestModule(torch.nn.Module):
19
19
  return self.dense0(X)
20
20
 
21
21
 
22
- class MultiTargetRegressor(RiverMultiTargetRegressor, Regressor):
22
+ class MultiTargetRegressor(RiverMultiTargetRegressor, DeepEstimator):
23
23
  """A Regressor that supports multiple targets.
24
24
 
25
25
  Parameters
@@ -82,7 +82,7 @@ class MultiTargetRegressor(RiverMultiTargetRegressor, Regressor):
82
82
  >>> metric = metrics.multioutput.MicroAverage(metrics.MAE())
83
83
  >>> ev = evaluate.progressive_val_score(dataset, model, metric)
84
84
  >>> print(f"MicroAverage(MAE): {metric.get():.2f}")
85
- MicroAverage(MAE): 28.36
85
+ MicroAverage(MAE): 34.31
86
86
 
87
87
  """
88
88
 
@@ -105,9 +105,9 @@ class MultiTargetRegressor(RiverMultiTargetRegressor, Regressor):
105
105
  seed=seed,
106
106
  **kwargs,
107
107
  )
108
- self.observed_targets: OrderedDict[
109
- FeatureName, RegTarget
110
- ] = OrderedDict()
108
+ self.observed_targets: OrderedDict[FeatureName, RegTarget] = (
109
+ OrderedDict()
110
+ )
111
111
 
112
112
  @classmethod
113
113
  def _unit_test_params(cls):
@@ -150,10 +150,18 @@ class MultiTargetRegressor(RiverMultiTargetRegressor, Regressor):
150
150
  "check_pickling",
151
151
  }
152
152
 
153
+ def _learn(self, x: torch.Tensor, y: torch.Tensor):
154
+ self.module.train()
155
+ self.optimizer.zero_grad()
156
+ y_pred = self.module(x)
157
+ loss = self.loss_fn(y_pred, y)
158
+ loss.backward()
159
+ self.optimizer.step()
160
+
153
161
  def learn_one(
154
162
  self,
155
163
  x: dict,
156
- y: typing.Optional[typing.Dict[FeatureName, RegTarget]],
164
+ y: dict[FeatureName, RegTarget],
157
165
  **kwargs,
158
166
  ) -> "MultiTargetRegressor":
159
167
  if not self.module_initialized:
@@ -1,4 +1,4 @@
1
- from typing import Any, Callable, List, Type, Union
1
+ from typing import Callable, List, Type, Union
2
2
 
3
3
  import pandas as pd
4
4
  import torch
@@ -126,7 +126,7 @@ class RollingRegressor(RollingDeepEstimator, Regressor):
126
126
  "check_predict_proba_one_binary",
127
127
  }
128
128
 
129
- def learn_one(self, x: dict, y: RegTarget, **kwargs) -> "RollingRegressor":
129
+ def learn_one(self, x: dict, y: RegTarget, **kwargs) -> "Regressor":
130
130
  """
131
131
  Performs one step of training with the sliding
132
132
  window of the most recent examples.
@@ -156,9 +156,7 @@ class RollingRegressor(RollingDeepEstimator, Regressor):
156
156
 
157
157
  return self
158
158
 
159
- def learn_many(
160
- self, X: pd.DataFrame, y: List[Any]
161
- ) -> "RollingDeepEstimator":
159
+ def learn_many(self, X: pd.DataFrame, y: pd.Series) -> "Regressor":
162
160
  if not self.module_initialized:
163
161
  self.kwargs["n_features"] = len(X.columns)
164
162
  self.initialize_module(**self.kwargs)
@@ -171,7 +169,7 @@ class RollingRegressor(RollingDeepEstimator, Regressor):
171
169
 
172
170
  return self
173
171
 
174
- def predict_one(self, x: dict) -> RegTarget:
172
+ def predict_one(self, x: dict):
175
173
  """
176
174
  Predicts the target value for the current sliding
177
175
  window of most recent examples.
@@ -1,4 +1,5 @@
1
1
  """Utility classes and functions."""
2
+
2
3
  from .estimator_checks import check_estimator
3
4
  from .params import get_activation_fn, get_init_fn, get_loss_fn, get_optim_fn
4
5
  from .tensor_conversion import (
@@ -1,4 +1,5 @@
1
1
  """Utilities for unit testing and sanity checking estimators."""
2
+
2
3
  import copy
3
4
 
4
5
  __all__ = ["check_estimator"]
@@ -156,7 +156,7 @@ def output2proba(
156
156
  else:
157
157
  preds = torch.sigmoid(preds)
158
158
 
159
- preds_np = preds.detach().numpy()
159
+ preds_np = preds.numpy(force=True)
160
160
  if preds_np.shape[1] == 1:
161
161
  preds_np = np.hstack((preds_np, 1 - preds_np))
162
162
  n_unobserved_classes = preds_np.shape[1] - len(classes)
@@ -1,4 +1,5 @@
1
1
  """General tests that all estimators need to pass."""
2
+
2
3
  import copy
3
4
  import importlib
4
5
  import inspect
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
- Name: deep-river
3
- Version: 0.2.4
2
+ Name: deep_river
3
+ Version: 0.2.6
4
4
  Summary: Online Deep Learning for river
5
5
  Home-page: https://online-ml.github.io/deep-river/
6
6
  Author: Cedric Kulbach
@@ -16,10 +16,103 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
16
16
  Classifier: Programming Language :: Python :: Implementation :: PyPy
17
17
  Requires-Python: >=3.6.0
18
18
  Description-Content-Type: text/markdown
19
+ License-File: LICENSE
20
+ Requires-Dist: scikit-learn~=1.4.2
21
+ Requires-Dist: torch~=2.2.2
22
+ Requires-Dist: pandas~=2.2.2
23
+ Requires-Dist: numpy~=1.26.4
24
+ Requires-Dist: river~=0.21.1
25
+ Requires-Dist: tqdm~=4.66.4
26
+ Requires-Dist: ordered-set~=4.1.0
27
+ Requires-Dist: torchviz~=0.0.2
19
28
  Provides-Extra: dev
29
+ Requires-Dist: scikit-learn~=1.4.2; extra == "dev"
30
+ Requires-Dist: torch~=2.2.2; extra == "dev"
31
+ Requires-Dist: pandas~=2.2.2; extra == "dev"
32
+ Requires-Dist: numpy~=1.26.4; extra == "dev"
33
+ Requires-Dist: river~=0.21.1; extra == "dev"
34
+ Requires-Dist: tqdm~=4.66.4; extra == "dev"
35
+ Requires-Dist: ordered-set~=4.1.0; extra == "dev"
36
+ Requires-Dist: torchviz~=0.0.2; extra == "dev"
37
+ Requires-Dist: graphviz>=0.10.1; extra == "dev"
38
+ Requires-Dist: matplotlib>=3.0.2; extra == "dev"
39
+ Requires-Dist: mypy>=0.990; extra == "dev"
40
+ Requires-Dist: pre-commit>=2.20.0; extra == "dev"
41
+ Requires-Dist: pytest>=7.2.0; extra == "dev"
42
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
43
+ Requires-Dist: scikit-learn>=0.22.1; extra == "dev"
44
+ Requires-Dist: black>=22.10.0; extra == "dev"
45
+ Requires-Dist: flake8>=5.0.4; extra == "dev"
46
+ Requires-Dist: isort>=5.10.1; extra == "dev"
47
+ Requires-Dist: jupyter>=1.0.0; extra == "dev"
48
+ Requires-Dist: pyupgrade==3.2.0; extra == "dev"
20
49
  Provides-Extra: docs
50
+ Requires-Dist: scikit-learn~=1.4.2; extra == "docs"
51
+ Requires-Dist: torch~=2.2.2; extra == "docs"
52
+ Requires-Dist: pandas~=2.2.2; extra == "docs"
53
+ Requires-Dist: numpy~=1.26.4; extra == "docs"
54
+ Requires-Dist: river~=0.21.1; extra == "docs"
55
+ Requires-Dist: tqdm~=4.66.4; extra == "docs"
56
+ Requires-Dist: ordered-set~=4.1.0; extra == "docs"
57
+ Requires-Dist: torchviz~=0.0.2; extra == "docs"
58
+ Requires-Dist: flask>=2.0.2; extra == "docs"
59
+ Requires-Dist: ipykernel>=6.9.0; extra == "docs"
60
+ Requires-Dist: mike>=0.5.3; extra == "docs"
61
+ Requires-Dist: mkdocs>=1.2.3; extra == "docs"
62
+ Requires-Dist: mkdocs-awesome-pages-plugin>=2.7.0; extra == "docs"
63
+ Requires-Dist: mkdocs-gen-files>=0.3.5; extra == "docs"
64
+ Requires-Dist: mkdocs-charts-plugin>=0.0.8; extra == "docs"
65
+ Requires-Dist: mkdocs-literate-nav>=0.4.1; extra == "docs"
66
+ Requires-Dist: mkdocs-material>=8.1.11; extra == "docs"
67
+ Requires-Dist: mkdocstrings[python]>=0.19.0; extra == "docs"
68
+ Requires-Dist: pytkdocs[numpy-style]>=0.5.0; extra == "docs"
69
+ Requires-Dist: ipython_genutils>=0.1.0; extra == "docs"
70
+ Requires-Dist: mkdocs-jupyter>=0.20.0; extra == "docs"
71
+ Requires-Dist: nbconvert>=6.4.2; extra == "docs"
72
+ Requires-Dist: numpydoc>=1.2; extra == "docs"
73
+ Requires-Dist: spacy>=3.2.2; extra == "docs"
74
+ Requires-Dist: jinja2>=3.0.3; extra == "docs"
75
+ Requires-Dist: dominate; extra == "docs"
76
+ Requires-Dist: jupyter-client; extra == "docs"
77
+ Requires-Dist: mkdocs-charts-plugin; extra == "docs"
78
+ Requires-Dist: python-slugify; extra == "docs"
79
+ Requires-Dist: watermark==2.3.1; extra == "docs"
21
80
  Provides-Extra: all
22
- License-File: LICENSE
81
+ Requires-Dist: graphviz>=0.10.1; extra == "all"
82
+ Requires-Dist: matplotlib>=3.0.2; extra == "all"
83
+ Requires-Dist: mypy>=0.990; extra == "all"
84
+ Requires-Dist: pre-commit>=2.20.0; extra == "all"
85
+ Requires-Dist: pytest>=7.2.0; extra == "all"
86
+ Requires-Dist: pytest-cov>=4.0.0; extra == "all"
87
+ Requires-Dist: scikit-learn>=0.22.1; extra == "all"
88
+ Requires-Dist: black>=22.10.0; extra == "all"
89
+ Requires-Dist: flake8>=5.0.4; extra == "all"
90
+ Requires-Dist: isort>=5.10.1; extra == "all"
91
+ Requires-Dist: jupyter>=1.0.0; extra == "all"
92
+ Requires-Dist: pyupgrade==3.2.0; extra == "all"
93
+ Requires-Dist: flask>=2.0.2; extra == "all"
94
+ Requires-Dist: ipykernel>=6.9.0; extra == "all"
95
+ Requires-Dist: mike>=0.5.3; extra == "all"
96
+ Requires-Dist: mkdocs>=1.2.3; extra == "all"
97
+ Requires-Dist: mkdocs-awesome-pages-plugin>=2.7.0; extra == "all"
98
+ Requires-Dist: mkdocs-gen-files>=0.3.5; extra == "all"
99
+ Requires-Dist: mkdocs-charts-plugin>=0.0.8; extra == "all"
100
+ Requires-Dist: mkdocs-literate-nav>=0.4.1; extra == "all"
101
+ Requires-Dist: mkdocs-material>=8.1.11; extra == "all"
102
+ Requires-Dist: mkdocstrings[python]>=0.19.0; extra == "all"
103
+ Requires-Dist: pytkdocs[numpy-style]>=0.5.0; extra == "all"
104
+ Requires-Dist: ipython_genutils>=0.1.0; extra == "all"
105
+ Requires-Dist: mkdocs-jupyter>=0.20.0; extra == "all"
106
+ Requires-Dist: nbconvert>=6.4.2; extra == "all"
107
+ Requires-Dist: numpydoc>=1.2; extra == "all"
108
+ Requires-Dist: spacy>=3.2.2; extra == "all"
109
+ Requires-Dist: jinja2>=3.0.3; extra == "all"
110
+ Requires-Dist: dominate; extra == "all"
111
+ Requires-Dist: jupyter-client; extra == "all"
112
+ Requires-Dist: mkdocs-charts-plugin; extra == "all"
113
+ Requires-Dist: python-slugify; extra == "all"
114
+ Requires-Dist: watermark==2.3.1; extra == "all"
115
+ Requires-Dist: dataclasses; python_version == "3.6"
23
116
 
24
117
 
25
118
  <p align="center">
@@ -98,10 +191,10 @@ For further examples check out the <a href="https://online-ml.github.io/deep-riv
98
191
 
99
192
  >>> for x, y in dataset:
100
193
  ... y_pred = model_pipeline.predict_one(x) # make a prediction
101
- ... metric = metric.update(y, y_pred) # update the metric
102
- ... model_pipeline = model_pipeline.learn_one(x, y) # make the model learn
194
+ ... metric.update(y, y_pred) # update the metric
195
+ ... model_pipeline.learn_one(x, y) # make the model learn
103
196
  >>> print(f"Accuracy: {metric.get():.4f}")
104
- Accuracy: 0.6728
197
+ Accuracy: 0.6736
105
198
 
106
199
  ```
107
200
  ### Multi Target Regression
@@ -139,7 +232,7 @@ Accuracy: 0.6728
139
232
  >>> metric = metrics.multioutput.MicroAverage(metrics.MAE())
140
233
  >>> ev = evaluate.progressive_val_score(dataset, model, metric)
141
234
  >>> print(f"MicroAverage(MAE): {metric.get():.2f}")
142
- MicroAverage(MAE): 28.36
235
+ MicroAverage(MAE): 34.31
143
236
 
144
237
  ```
145
238
 
@@ -177,11 +270,11 @@ MicroAverage(MAE): 28.36
177
270
 
178
271
  >>> for x, y in dataset:
179
272
  ... score = model.score_one(x)
180
- ... model = model.learn_one(x=x)
181
- ... metric = metric.update(y, score)
273
+ ... model.learn_one(x=x)
274
+ ... metric.update(y, score)
182
275
  ...
183
276
  >>> print(f"ROCAUC: {metric.get():.4f}")
184
- ROCAUC: 0.7447
277
+ ROCAUC: 0.9017
185
278
 
186
279
  ```
187
280
 
@@ -190,3 +283,7 @@ ROCAUC: 0.7447
190
283
  <p align="center">
191
284
  <img src="https://upload.wikimedia.org/wikipedia/de/thumb/4/44/Fzi_logo.svg/1200px-Fzi_logo.svg.png?raw=true" alt="FZI Logo" height="200"/>
192
285
  </p>
286
+
287
+ <p align="center">
288
+ <img src="https://lieferbotnet.de/wp-content/uploads/2022/09/LieferBotNet-Logo.png?raw=true" alt="Lieferbot net" height="200"/>
289
+ </p>
@@ -1,9 +1,9 @@
1
- scikit-learn~=1.0.2
2
- torch~=1.13.0
3
- pandas~=1.3.2
4
- numpy~=1.24.0
5
- river~=0.17.0
6
- tqdm~=4.61.2
1
+ scikit-learn~=1.4.2
2
+ torch~=2.2.2
3
+ pandas~=2.2.2
4
+ numpy~=1.26.4
5
+ river~=0.21.1
6
+ tqdm~=4.66.4
7
7
  ordered-set~=4.1.0
8
8
  torchviz~=0.0.2
9
9
 
@@ -47,12 +47,12 @@ python-slugify
47
47
  watermark==2.3.1
48
48
 
49
49
  [dev]
50
- scikit-learn~=1.0.2
51
- torch~=1.13.0
52
- pandas~=1.3.2
53
- numpy~=1.24.0
54
- river~=0.17.0
55
- tqdm~=4.61.2
50
+ scikit-learn~=1.4.2
51
+ torch~=2.2.2
52
+ pandas~=2.2.2
53
+ numpy~=1.26.4
54
+ river~=0.21.1
55
+ tqdm~=4.66.4
56
56
  ordered-set~=4.1.0
57
57
  torchviz~=0.0.2
58
58
  graphviz>=0.10.1
@@ -69,12 +69,12 @@ jupyter>=1.0.0
69
69
  pyupgrade==3.2.0
70
70
 
71
71
  [docs]
72
- scikit-learn~=1.0.2
73
- torch~=1.13.0
74
- pandas~=1.3.2
75
- numpy~=1.24.0
76
- river~=0.17.0
77
- tqdm~=4.61.2
72
+ scikit-learn~=1.4.2
73
+ torch~=2.2.2
74
+ pandas~=2.2.2
75
+ numpy~=1.26.4
76
+ river~=0.21.1
77
+ tqdm~=4.66.4
78
78
  ordered-set~=4.1.0
79
79
  torchviz~=0.0.2
80
80
  flask>=2.0.2
@@ -13,12 +13,12 @@ REQUIRES_PYTHON = ">=3.6.0"
13
13
 
14
14
  # Package requirements.
15
15
  base_packages = [
16
- "scikit-learn~=1.0.2",
17
- "torch~=1.13.0",
18
- "pandas~=1.3.2",
19
- "numpy~=1.24.0",
20
- "river~=0.17.0",
21
- "tqdm~=4.61.2",
16
+ "scikit-learn~=1.4.2",
17
+ "torch~=2.2.2",
18
+ "pandas~=2.2.2",
19
+ "numpy~=1.26.4",
20
+ "river~=0.21.1",
21
+ "tqdm~=4.66.4",
22
22
  "ordered-set~=4.1.0",
23
23
  "torchviz~=0.0.2",
24
24
  ]
File without changes
File without changes
File without changes