
Biblioteca de aprendizado de máquina em streaming para aprendizado incremental em fluxos de dados, fornecendo estimadores online, detecção de drift e anomalias, pipelines, métricas e conjuntos de dados integrados para Python.
River é uma biblioteca Python para aprendizado de máquina online. O objetivo é ser a biblioteca mais amigável para fazer aprendizado de máquina em dados em streaming. River é o resultado da fusão entre creme e scikit-multiflow.
Como exemplo rápido, vamos treinar uma regressão logística para classificar o conjunto de dados de phishing de websites. Aqui está uma amostra da primeira observação do conjunto de dados.
>>> 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
Agora vamos executar o modelo no conjunto de dados de forma contínua (streaming). Intercalamos sequencialmente previsões e atualizações do modelo. Enquanto isso, atualizamos uma métrica de desempenho para ver como o modelo está se saindo.
>>> 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%
Claro, isso é apenas um exemplo ilustrativo. Convidamos você a conferir a seção de introdução da documentação para um tutorial mais completo.
O River foi feito para funcionar com Python 3.11 e superior. A instalação pode ser feita com o pip:
pip install river
Existem pacotes wheel disponíveis para Linux, MacOS e Windows. Isso significa que, muito provavelmente, você não precisará compilar o River a partir do código-fonte.
A interface online principal do River (learn_one / predict_one) não tem dependência de pandas. A interface de mini-lote (learn_many, predict_many, predict_proba_many, transform_many) é construída sobre pandas e é opcional:
pip install "river[pandas]"
Você pode instalar a versão de desenvolvimento mais recente do GitHub da seguinte forma:
pip install git+https://github.com/online-ml/river --upgrade
pip install git+ssh://[email protected]/online-ml/river.git --upgrade # using SSH
Esse método requer que o Cython e o Rust estejam instalados na sua máquina.
O River fornece implementações online das seguintes famílias de algoritmos:
O River também oferece outros utilitários online:
Confira a API para uma visão geral abrangente.
Você deve se perguntar se precisa de aprendizado de máquina online. A resposta provavelmente é não. Na maioria das vezes, o aprendizado em lote é suficiente. Uma abordagem online pode ser adequada se:
Algumas especificidades do River são:
Sinta-se à vontade para contribuir da forma que preferir; estamos sempre abertos a novas ideias e abordagens.
Por favor, consulte as diretrizes de contribuição se quiser fazer modificações no código.
Se o River foi útil para você e você gostaria de citá-lo em uma publicação científica, consulte o artigo publicado no 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 é um software livre e de código aberto licenciado sob a licença BSD de 3 cláusulas.