{"id":13473435,"url":"https://github.com/online-ml/deep-river","last_synced_at":"2025-12-13T23:07:13.621Z","repository":{"id":38196532,"uuid":"429054352","full_name":"online-ml/deep-river","owner":"online-ml","description":null,"archived":false,"fork":false,"pushed_at":"2025-04-10T07:28:27.000Z","size":55393,"stargazers_count":133,"open_issues_count":6,"forks_count":16,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-11T11:23:05.996Z","etag":null,"topics":["data-science","deep-learning","incremental-learning","machine-learning","neural-network","online-deep-learning","online-learning","outlier-detection","pytorch","stream"],"latest_commit_sha":null,"homepage":"https://online-ml.github.io/deep-river/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/online-ml.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-11-17T13:22:04.000Z","updated_at":"2025-04-10T07:26:07.000Z","dependencies_parsed_at":"2023-07-12T23:11:53.336Z","dependency_job_id":"aa0b863e-d999-4dfa-8501-7199cedbbf09","html_url":"https://github.com/online-ml/deep-river","commit_stats":{"total_commits":532,"total_committers":8,"mean_commits":66.5,"dds":0.5845864661654135,"last_synced_commit":"8a2d19653eb2fa7eb57df66b6459336cbdb8ad2d"},"previous_names":["kulbachcedric/incrementaltorch"],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/online-ml%2Fdeep-river","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/online-ml%2Fdeep-river/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/online-ml%2Fdeep-river/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/online-ml%2Fdeep-river/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/online-ml","download_url":"https://codeload.github.com/online-ml/deep-river/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248616014,"owners_count":21133990,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-science","deep-learning","incremental-learning","machine-learning","neural-network","online-deep-learning","online-learning","outlier-detection","pytorch","stream"],"created_at":"2024-07-31T16:01:03.629Z","updated_at":"2025-12-13T23:07:13.503Z","avatar_url":"https://github.com/online-ml.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg height=\"150px\" src=\"https://raw.githubusercontent.com/online-ml/deep-river/master/docs/img/logo.png\" alt=\"incremental dl logo\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003cimg alt=\"PyPI\" src=\"https://img.shields.io/pypi/v/deep-river\"\u003e\n    \u003ca href=\"https://codecov.io/gh/online-ml/deep-river\" \u003e \n        \u003cimg src=\"https://codecov.io/gh/online-ml/deep-river/branch/master/graph/badge.svg?token=ZKUIISZAYA\"/\u003e \n    \u003c/a\u003e\n    \u003cimg alt=\"PyPI - Python Version\" src=\"https://img.shields.io/pypi/pyversions/deep-river\"\u003e\n    \u003cimg alt=\"PyPI - Downloads\" src=\"https://img.shields.io/pypi/dm/deep-river\"\u003e\n    \u003cimg alt=\"GitHub\" src=\"https://img.shields.io/github/license/online-ml/deep-river\"\u003e\n    \u003ca href=\"https://joss.theoj.org/papers/6a76784f55e8b041d71a7fa776eb386a\"\u003e\u003cimg src=\"https://joss.theoj.org/papers/6a76784f55e8b041d71a7fa776eb386a/status.svg\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://doi.org/10.5281/zenodo.14601980\"\u003e\u003cimg src=\"https://zenodo.org/badge/DOI/10.5281/zenodo.14601980.svg\" alt=\"DOI\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    deep-river is a Python library for online deep learning.\n    deep-river's ambition is to enable \u003ca href=\"https://www.wikiwand.com/en/Online_machine_learning\"\u003eonline machine learning\u003c/a\u003e for neural networks.\n    It combines the \u003ca href=\"https://www.riverml.xyz\"\u003eriver\u003c/a\u003e API with the capabilities of designing neural networks based on \u003ca href=\"https://pytorch.org\"\u003ePyTorch\u003c/a\u003e.\n\u003c/p\u003e\n\n## 📚 [Documentation](https://online-ml.github.io/deep-river/)\nThe [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. \nIn each of these, the git repo reference is listed in a section that shows [examples](https://github.com/online-ml/deep-river/blob/master/docs/examples) of the features and functionality.\nAs we are always looking for further use cases and examples, feel free to contribute to the documentation or the repository itself via a pull request\n\n## 💈 Installation\n\n```shell\npip install deep-river\n```\nor\n```shell\npip install \"river[deep]\"\n```\nYou can install the latest development version from GitHub as so:\n\n```shell\npip install https://github.com/online-ml/deep-river/archive/refs/heads/master.zip\n```\n\n## 🍫 Quickstart\n\nWe build the development of neural networks on top of the \u003ca href=\"https://www.riverml.xyz\"\u003eriver API\u003c/a\u003e and refer to the rivers design principles.\nThe following example creates a simple MLP architecture based on PyTorch and incrementally predicts and trains on the website phishing dataset.\nFor further examples check out the \u003ca href=\"https://online-ml.github.io/deep-river\"\u003eDocumentation\u003c/a\u003e.\n\n### Classification\n\n```python\n\u003e\u003e\u003e from river import metrics, datasets, preprocessing, compose\n\u003e\u003e\u003e from deep_river import classification\n\u003e\u003e\u003e from torch import nn\n\u003e\u003e\u003e from torch import optim\n\u003e\u003e\u003e from torch import manual_seed\n\n\u003e\u003e\u003e _ = manual_seed(42)\n\n\u003e\u003e\u003e class MyModule(nn.Module):\n...     def __init__(self, n_features):\n...         super(MyModule, self).__init__()\n...         self.dense0 = nn.Linear(n_features, 5)\n...         self.nonlin = nn.ReLU()\n...         self.dense1 = nn.Linear(5, 2)\n...         self.softmax = nn.Softmax(dim=-1)\n...\n...     def forward(self, X, **kwargs):\n...         X = self.nonlin(self.dense0(X))\n...         X = self.nonlin(self.dense1(X))\n...         X = self.softmax(X)\n...         return X\n\n\u003e\u003e\u003e model_pipeline = compose.Pipeline(\n...     preprocessing.StandardScaler(),\n...     classification.ClassifierInitialized(module=MyModule(10), loss_fn='binary_cross_entropy', optimizer_fn='adam')\n... )\n\n\u003e\u003e\u003e dataset = datasets.Phishing()\n\u003e\u003e\u003e metric = metrics.Accuracy()\n\n\u003e\u003e\u003e for x, y in dataset:\n...     y_pred = model_pipeline.predict_one(x)  # make a prediction\n...     metric.update(y, y_pred)  # update the metric\n...     model_pipeline.learn_one(x, y)  # make the model learn\n\u003e\u003e\u003e print(f\"Accuracy: {metric.get():.4f}\")\nAccuracy: 0.7264\n\n```\n### Multi Target Regression \n```python\n\u003e\u003e\u003e from river import evaluate, compose\n\u003e\u003e\u003e from river import metrics\n\u003e\u003e\u003e from river import preprocessing\n\u003e\u003e\u003e from river import stream\n\u003e\u003e\u003e from sklearn import datasets\n\u003e\u003e\u003e from torch import nn\n\u003e\u003e\u003e from deep_river.regression.multioutput import MultiTargetRegressorInitialized\n\n\u003e\u003e\u003e class MyModule(nn.Module):\n...     def __init__(self, n_features):\n...         super(MyModule, self).__init__()\n...         self.dense0 = nn.Linear(n_features, 3)\n...\n...     def forward(self, X, **kwargs):\n...         X = self.dense0(X)\n...         return X\n\n\u003e\u003e\u003e dataset = stream.iter_sklearn_dataset(\n...         dataset=datasets.load_linnerud(),\n...         shuffle=True,\n...         seed=42\n...     )\n\u003e\u003e\u003e model = compose.Pipeline(\n...     preprocessing.StandardScaler(),\n...     MultiTargetRegressorInitialized(\n...         module=MyModule(10),\n...         loss_fn='mse',\n...         lr=0.3,\n...         optimizer_fn='sgd',\n...     ))\n\u003e\u003e\u003e metric = metrics.multioutput.MicroAverage(metrics.MAE())\n\u003e\u003e\u003e ev = evaluate.progressive_val_score(dataset, model, metric)\n\u003e\u003e\u003e print(f\"MicroAverage(MAE): {metric.get():.2f}\")\nMicroAverage(MAE): 34.31\n\n```\n\n### Anomaly Detection\n\n```python\n\u003e\u003e\u003e from deep_river.anomaly import AutoencoderInitialized\n\u003e\u003e\u003e from river import metrics\n\u003e\u003e\u003e from river.datasets import CreditCard\n\u003e\u003e\u003e from torch import nn\n\u003e\u003e\u003e import math\n\u003e\u003e\u003e from river.compose import Pipeline\n\u003e\u003e\u003e from river.preprocessing import MinMaxScaler\n\n\u003e\u003e\u003e dataset = CreditCard().take(5000)\n\u003e\u003e\u003e metric = metrics.RollingROCAUC(window_size=5000)\n\n\u003e\u003e\u003e class MyAutoEncoder(nn.Module):\n...     def __init__(self, n_features, latent_dim=3):\n...         super(MyAutoEncoder, self).__init__()\n...         self.linear1 = nn.Linear(n_features, latent_dim)\n...         self.nonlin = nn.LeakyReLU()\n...         self.linear2 = nn.Linear(latent_dim, n_features)\n...         self.sigmoid = nn.Sigmoid()\n...\n...     def forward(self, X, **kwargs):\n...         X = self.linear1(X)\n...         X = self.nonlin(X)\n...         X = self.linear2(X)\n...         return self.sigmoid(X)\n\n\u003e\u003e\u003e ae = AutoencoderInitialized(module=MyAutoEncoder(10), lr=0.005)\n\u003e\u003e\u003e scaler = MinMaxScaler()\n\u003e\u003e\u003e model = Pipeline(scaler, ae)\n\n\u003e\u003e\u003e for x, y in dataset:\n...     score = model.score_one(x)\n...     model.learn_one(x=x)\n...     metric.update(y, score)\n...\n\u003e\u003e\u003e print(f\"Rolling ROCAUC: {metric.get():.4f}\")\nRolling ROCAUC: 0.8901\n\n```\n\n## 💬 Citation\n\nTo acknowledge the use of the `DeepRiver` library in your research, please refer to our [paper](https://joss.theoj.org/papers/10.21105/joss.07226) published on Journal of Open Source Software (JOSS):\n\n```bibtex\n@article{Kulbach2025, \n    doi = {10.21105/joss.07226}, \n    url = {https://doi.org/10.21105/joss.07226}, \n    year = {2025}, \n    publisher = {The Open Journal}, \n    volume = {10}, \n    number = {105}, \n    pages = {7226}, \n    author = {Cedric Kulbach and Lucas Cazzonelli and Hoang-Anh Ngo and Max Halford and Saulo Martiello Mastelini}, \n    title = {DeepRiver: A Deep Learning Library for Data Streams}, \n    journal = {Journal of Open Source Software} \n}\n```\n\n\n## 🏫 Affiliations\n\n\u003cp align=\"center\"\u003e\n    \u003cimg 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\"/\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://lieferbotnet.de/wp-content/uploads/2022/09/LieferBotNet-Logo.png?raw=true\" alt=\"Lieferbot net\" height=\"200\"/\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fonline-ml%2Fdeep-river","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fonline-ml%2Fdeep-river","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fonline-ml%2Fdeep-river/lists"}