Package: river
River is a Python library foronline machine learning. It aims to be the most user-friendly library for doing machine learning on streaming data. River is the result of a merger betweencremeandscikit-multiflow.⚡️ QuickstartAs a quick example, we'll train a logistic regression to classify thewebsite phishing dataset. Here's a look at the first observation in the dataset.>>>frompprintimportpprint>>>fromriverimportdatasets>>>dataset=datasets.Phishing()>>>forx,yindataset:...pprint(x)...print(y)...break{'age_of_domain':1,'anchor_from_other_domain':0.0,'empty_server_form_handler':0.0,'https':0.0,'ip_in_url':1,'is_popular':0.5,'long_url':1.0,'popup_window':0.0,'request_from_other_domain':0.0}TrueNow let's run the model on the dataset in a streaming fashion. We sequentially interleave predictions and model updates. Meanwhile, we update a performance metric to see how well the model is doing.>>>fromriverimportcompose>>>fromriverimportlinear_model>>>fromriverimportmetrics>>>fromriverimportpreprocessing>>>model=compose.Pipeline(...preprocessing.StandardScaler(),...linear_model.LogisticRegression()...)>>>metric=metrics.Accuracy()>>>forx,yindataset:...y_pred=model.predict_one(x)# make a prediction...metric.update(y,y_pred)# update the metric...model.learn_one(x,y)# make the model learn>>>metricAccuracy:89.28%Of course, this is just a contrived example. We welcome you to check theintroductionsection of the documentation for a more thorough tutorial.🛠 InstallationRiver is intended to work withPython 3.8 and above. Installation can be done withpip:pipinstallriverThere arewheels availablefor Linux, MacOS, and Windows. This means you most probably won't have to build River from source.You can install the latest development version from GitHub as so:pipinstallgit+https://github.com/online-ml/river--upgrade
pipinstallgit+ssh://git@github.com/online-ml/river.git--upgrade# using SSHThis method requires having Cython and Rust installed on your machine.🔮 FeaturesRiver provides online implementations of the following family of algorithms:Linear models, with a wide array of optimizersDecision trees and random forests(Approximate) nearest neighborsAnomaly detectionDrift detectionRecommender systemsTime series forecastingBanditsFactorization machinesImbalanced learningClusteringBagging/boosting/stackingActive learningRiver also provides other online utilities:Feature extraction and selectionOnline statistics and metricsPreprocessingBuilt-in datasetsProgressive model validationModel pipelinesCheck outthe APIfor a comprehensive overview🤔 Should I be using River?You should ask yourself if you need online machine learning. The answer is likely no. Most of the time batch learning does the job just fine. An online approach might fit the bill if:You want a model that can learn from new data without having to revisit past data.You want a model which is robust toconcept drift.You want to develop your model in a way that is closer to what occurs in a production context, which is usually event-based.Some specificities of River are that:It focuses on clarity and user experience, more so than performance.It's very fast at processing one sample at a time. Try it, you'll see.It plays nicely with the rest of Python's ecosystem.🔗 Useful linksDocumentationPackage releasesawesome-online-machine-learning2022 presentation at GAIAOnline Clustering: Algorithms, Evaluation, Metrics, Applications and BenchmarkingfromKDD'22.👐 ContributingFeel free to contribute in any way you like, we're always open to new ideas and approaches.Open a discussionif you have any question or enquiry whatsoever. It's more useful to ask your question in public rather than sending us a private email. It's also encouraged to open a discussion before contributing, so that everyone is aligned and unnecessary work is avoided.Feel welcome toopen an issueif you think you've spotted a bug or a performance issue.Ourroadmapis public. Feel free to work on anything that catches your eye, or to make suggestions.Please check out thecontribution guidelinesif you want to bring modifications to the code base.🤝 Affiliations💬 CitationIf River has been useful to you, and you would like to cite it in a scientific publication, please refer to thepaperpublished at JMLR:@article{montiel2021river,title={River: machine learning for streaming data in Python},author={Montiel, Jacob and Halford, Max and Mastelini, Saulo Martielloand Bolmier, Geoffrey and Sourty, Raphael and Vaysse, Robin and Zouitine, Adiland Gomes, Heitor Murilo and Read, Jesse and Abdessalem, Talel and others},year={2021}}📝 LicenseRiver is free and open-source software licensed under the3-clause BSD license.