River: Pythonでオンライン機械学習、概念的な紹介
シリーズの前回の記事では、オフライン(または伝統的な)機械学習とは異なる代替手段としてのオンライン機械学習について紹介しました。オフライン機械学習は一括のデータで動作します。
今回は、コンセプトとしてRiverライブラリを探っていきます。Riverの主な特徴や、ストリーミングデータとオンライン機械学習モデルを操作する際に使用する基本的な概念を紹介します。
Riverの特徴
Riverの主な特徴は以下のとおりです:
- ライブラリはインクリメンタルに動作し、ストリーミングデータの処理に使用可能です
- Riverは適応可能であり、常に変化する環境で動作することができます
- 汎用性があり、分類、回帰、クラスタリング問題に対応し、教師あり学習や教師なし学習を含みます
- 効率的で、学びやすく、scikit-learnと似たAPIを持ちます
- 献身的なコミュニティとメンテナーがいます
- 研究環境でモデルのトレーニングや評価にストリーミング形式で読むことができる簡単にアクセスできるデータセットがあります。また、従来のデータセットをストリーミング形式で読むための機能があります
ただし、このライブラリを選ぶか、他のツールを選ぶかを決める際に本質的ないくつかのデメリットもあります:
- ライブラリはまだバージョン1.0に達していません
- ほんの少数の人々がほとんどの作業を行い、「プロジェクトを背負っている」状態です
これにより、プロジェクトが失敗し、中止される可能性への不安があるためです。しかしながら、Pythonでオンライン機械学習に取り組むためには、未だに最良の代替手段です。
基本概念
手を動かす前に、Riverがどのような問題を解決しているのかをよりよく理解するために、Riverが使用する用語についてもう少し知っておくことが非常に重要です。
データストリーム
一般的にはまだあいまいで固定されていない言葉ですが、Riverの公式ドキュメントに従って、データストリームとは個々の要素の連続のことです。より具体的には、通常、機械学習の専門用語で「フィーチャー」と呼ばれる特徴のセットです。つまり、CSVの単一行のようなものです。ライブラリはこの単一の特徴の行を「サンプル」と呼んでいます。
すべてのサンプルが常に同じ構造を持ち、同じフィーチャーを持つことができる一方で、新しいフィーチャーが現れたり消えたりすることもあり、これはアプリケーションによって異なります。
反応型および積極型データストリーム
データストリームの概念内でも、2つの異なる方法で分類できます。反応型データストリームは、自分たちのところに来て、私たちがほとんどコントロールできない、またはまったくコントロールできないものです。データがアプリケーションからモデルに届く際、例えばユーザーがボタンを押したり、フォームを記入したりするとき、データがいつ到着するか、新しいデータがどの速度で到着するかをコントロールすることはできません。
一方、積極型データストリームは反対で、例えばファイルを読むような場合、データの流れをコントロールできます。この場合、読む速度やファイルを読む順序をコントロールすることができます。
オンライン処理
オンライン処理は、一度に1サンプルずつ、データストリームを行ごとに処理する行為です。これは、一度にあらかじめ与えられたデータのバッチ全体を読むのと対照的なオンライン学習の最大の特徴です。
その結果、オンラインモデルはステートフルでダイナミックなオブジェクトです。常に学習を続け、古いデータを再訪する必要はありません。
汎用性
機械学習は、分類、回帰、異常検出、時系列予測など、さまざまな問題を解決しようとしています。Riverは、これらのすべてのタスクや問題(ストリーミングデータで)を解決できる汎用ライブラリを目指しています。実際には、バッチデータ用の多くの古典的アルゴリズムも、オンライン版を持っています。
Riverは、ストリーミングデータ上で平均を計算するような、それ以前のさらに単純なタスクも実行できます。つまり、単にオンライン学習ライブラリである以上に、ストリーミングデータのためのデータ処理ライブラリとなっています。
いたる所の辞書
ライブラリは基本的に辞書の使用を基本コンポーネントとしています。開発者達はこのアプローチを選びました。なぜなら、オンライン学習の文脈ではベクトル化が速度の目立った利点をもたらさないからです。実際、numpyやPyTorchのような数値処理ライブラリはかなりのオーバーヘッドを伴います。Pythonのネイティブな辞書を使用する方が速いのです。
データセット
Riverを使用したオンライン機械学習では、データが流れるにつれて予測を行いながら学習できるモデルを設計することができる、大きな利点があります。
しかし、モデルを開発する際には、通常、モデルの評価のためにリアルタイムデータへのアクセスを持ちませんので、オンライン形式ですぐに読むことができるデータセットがライブラリに用意されています。
ライブラリはまた、伝統的なデータセット(例えば、pandas DataFrame)をストリーミング処理できるデータセットに変換する機能も紹介しています。
モデル評価
Riverを使ったオンライン機械学習のモデル評価は、バッチ版のそれとは異なります。後者では通常、クロスバリデーションを行い、データをトレーニングセットとテストセットに分けます。
オンライン学習はこのプロセスを使用せず、評価には、生産現場と同じ順序で学習と推論が行われます。これにより、生産シナリオをシミュレートし、クロスバリデーションよりも高い忠実度でモデルを評価することができます。
コンセプトドリフト
オフラインモデルが生産で期待どおりに実行されない主な理由は、コンセプトの逸脱によるものですが、オンラインモデルについてもそれは真です。
オンラインモデルがオフラインモデルと比較して持つ大きな利点の一つは、この逸脱を処理できることです。実際、常に学習を続けているため、オンラインモデルはコンセプトの逸脱に対して継続的に適応することができますが、これは従来のモデルでは始めから制約が必要です。
将来のチュートリアルでコンセプトドリフトについて詳しく話します。
結論
この記事で、Riverライブラリが取り扱う主な概念を探り、今後のより実践的なコンテンツに向けた準備をすることができました。この知識の基盤があれば、Riverライブラリを使用して、初のオンライン機械学習モデルを実装するための第一歩を踏み出すことができます。
この内容が興味深いものであったら、何らかの形で評価し、次の記事をフォローしてください。質問、提案、指摘は以下のコメントセクションで大歓迎です。次回まで。
こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/nobrelucas/river-aprendizado-de-maquina-online-com-python-uma-introducao-conceitual-3bb2