River 是一个用于在线机器学习的 Python 库。它的目标是成为对流式数据进行机器学习的最易用的库。River 是 creme 和 scikit-multiflow 合并的成果。
作为一个快速示例,我们将训练一个逻辑回归来对网站钓鱼数据集进行分类。下面是数据集中第一个观测值的样貌。
>>> from pprint import pprint
>>> from river import datasets
>>> dataset = datasets.Phishing()
>>> for x, y in dataset:
... 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}
True
现在让我们以流式方式在数据集上运行模型。我们依次交错进行预测和模型更新。同时,我们更新一个性能指标来观察模型的表现如何。
>>> from river import compose
>>> from river import linear_model
>>> from river import metrics
>>> from river import preprocessing
>>> model = compose.Pipeline(
... preprocessing.StandardScaler(),
... linear_model.LogisticRegression()
... )
>>> metric = metrics.Accuracy()
>>> for x, y in dataset:
... 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
>>> metric
Accuracy: 89.28%
当然,这只是一个刻意构造的示例。我们欢迎你查看文档中的介绍部分,以获取更详尽的教程。
River 旨在与 Python 3.11 及以上版本配合使用。可以使用 pip 进行安装:
pip install river
针对 Linux、MacOS 和 Windows 都有可用的 wheel 包。这意味着你很可能无需从源码构建 River。
River 的核心在线接口(learn_one / predict_one)不依赖 pandas。小批量接口(learn_many、predict_many、predict_proba_many、transform_many)基于 pandas 构建,并且是可选的:
pip install "river[pandas]"
你可以像这样从 GitHub 安装最新的开发版本:
pip install git+https://github.com/online-ml/river --upgrade
pip install git+ssh://[email protected]/online-ml/river.git --upgrade # using SSH
此方法要求你的机器上安装了 Cython 和 Rust。
River 提供了以下算法家族的在线实现:
River 还提供了其他在线工具:
查看API以获取全面的概览
你应该问自己是否需要在线机器学习。答案很可能是不需要。大多数情况下,批量学习就能很好地完成工作。如果你符合以下情况,在线方法可能适合你:
River 的一些特点包括:
欢迎以任何你喜欢的方式做出贡献,我们始终对新想法和新方法持开放态度。
如果你想对代码库进行修改,请查看贡献指南。
如果 River 对你有帮助,并且你想在科学出版物中引用它,请参考发表在 JMLR 上的论文:
@article{montiel2021river,
title={River: machine learning for streaming data in Python},
author={Montiel, Jacob and Halford, Max and Mastelini, Saulo Martiello
and Bolmier, Geoffrey and Sourty, Raphael and Vaysse, Robin and Zouitine, Adil
and Gomes, Heitor Murilo and Read, Jesse and Abdessalem, Talel and others},
year={2021}
}
River 是自由且开源的软件,采用 3-clause BSD 许可证授权。