Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/online-ml/deep-river
https://github.com/online-ml/deep-river
data-science deep-learning incremental-learning machine-learning neural-network online-deep-learning online-learning outlier-detection pytorch stream
Last synced: about 5 hours ago
JSON representation
- Host: GitHub
- URL: https://github.com/online-ml/deep-river
- Owner: online-ml
- License: bsd-3-clause
- Created: 2021-11-17T13:22:04.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2024-11-05T17:17:00.000Z (8 days ago)
- Last Synced: 2024-11-05T18:28:11.467Z (8 days ago)
- Topics: data-science, deep-learning, incremental-learning, machine-learning, neural-network, online-deep-learning, online-learning, outlier-detection, pytorch, stream
- Language: Python
- Homepage: https://online-ml.github.io/deep-river/
- Size: 51.2 MB
- Stars: 115
- Watchers: 5
- Forks: 10
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
deep-river is a Python library for online deep learning.
deep-river's ambition is to enable online machine learning for neural networks.
It combines the river API with the capabilities of designing neural networks based on PyTorch.## 📚 [Documentation](https://online-ml.github.io/deep-river/)
The [documentation](https://online-ml.github.io/deep-river/) contains an overview of all features of this repository as well as the repository's full features list. In each of these, the git repo reference is listed in a section that shows examples of the features and functionality.## 💈 Installation
```shell
pip install deep-river
```
or
```shell
pip install "river[deep]"
```
You can install the latest development version from GitHub as so:```shell
pip install https://github.com/online-ml/deep-river/archive/refs/heads/master.zip
```## 🍫 Quickstart
We build the development of neural networks on top of the river API and refer to the rivers design principles.
The following example creates a simple MLP architecture based on PyTorch and incrementally predicts and trains on the website phishing dataset.
For further examples check out the Documentation.### Classification
```python
>>> from river import metrics, datasets, preprocessing, compose
>>> from deep_river import classification
>>> from torch import nn
>>> from torch import optim
>>> from torch import manual_seed>>> _ = manual_seed(42)
>>> class MyModule(nn.Module):
... def __init__(self, n_features):
... super(MyModule, self).__init__()
... self.dense0 = nn.Linear(n_features, 5)
... self.nonlin = nn.ReLU()
... self.dense1 = nn.Linear(5, 2)
... self.softmax = nn.Softmax(dim=-1)
...
... def forward(self, X, **kwargs):
... X = self.nonlin(self.dense0(X))
... X = self.nonlin(self.dense1(X))
... X = self.softmax(X)
... return X>>> model_pipeline = compose.Pipeline(
... preprocessing.StandardScaler(),
... classification.Classifier(module=MyModule, loss_fn='binary_cross_entropy', optimizer_fn='adam')
... )>>> dataset = datasets.Phishing()
>>> metric = metrics.Accuracy()>>> for x, y in dataset:
... y_pred = model_pipeline.predict_one(x) # make a prediction
... metric.update(y, y_pred) # update the metric
... model_pipeline.learn_one(x, y) # make the model learn
>>> print(f"Accuracy: {metric.get():.4f}")
Accuracy: 0.7264```
### Multi Target Regression
```python
>>> from river import evaluate, compose
>>> from river import metrics
>>> from river import preprocessing
>>> from river import stream
>>> from sklearn import datasets
>>> from torch import nn
>>> from deep_river.regression.multioutput import MultiTargetRegressor>>> class MyModule(nn.Module):
... def __init__(self, n_features):
... super(MyModule, self).__init__()
... self.dense0 = nn.Linear(n_features, 3)
...
... def forward(self, X, **kwargs):
... X = self.dense0(X)
... return X>>> dataset = stream.iter_sklearn_dataset(
... dataset=datasets.load_linnerud(),
... shuffle=True,
... seed=42
... )
>>> model = compose.Pipeline(
... preprocessing.StandardScaler(),
... MultiTargetRegressor(
... module=MyModule,
... loss_fn='mse',
... lr=0.3,
... optimizer_fn='sgd',
... ))
>>> metric = metrics.multioutput.MicroAverage(metrics.MAE())
>>> ev = evaluate.progressive_val_score(dataset, model, metric)
>>> print(f"MicroAverage(MAE): {metric.get():.2f}")
MicroAverage(MAE): 34.31```
### Anomaly Detection
```python
>>> from deep_river.anomaly import Autoencoder
>>> from river import metrics
>>> from river.datasets import CreditCard
>>> from torch import nn
>>> import math
>>> from river.compose import Pipeline
>>> from river.preprocessing import MinMaxScaler>>> dataset = CreditCard().take(5000)
>>> metric = metrics.ROCAUC(n_thresholds=50)>>> class MyAutoEncoder(nn.Module):
... def __init__(self, n_features, latent_dim=3):
... super(MyAutoEncoder, self).__init__()
... self.linear1 = nn.Linear(n_features, latent_dim)
... self.nonlin = nn.LeakyReLU()
... self.linear2 = nn.Linear(latent_dim, n_features)
... self.sigmoid = nn.Sigmoid()
...
... def forward(self, X, **kwargs):
... X = self.linear1(X)
... X = self.nonlin(X)
... X = self.linear2(X)
... return self.sigmoid(X)>>> ae = Autoencoder(module=MyAutoEncoder, lr=0.005)
>>> scaler = MinMaxScaler()
>>> model = Pipeline(scaler, ae)>>> for x, y in dataset:
... score = model.score_one(x)
... model.learn_one(x=x)
... metric.update(y, score)
...
>>> print(f"ROCAUC: {metric.get():.4f}")
ROCAUC: 0.7812```
## 🏫 Affiliations