カスタム Scikit Learn スクリプトを使用して機械学習パイプラインを作成する
このチュートリアルでは、Machine Learning Managerを使用します。これはForePaaS Legacy Platformのサービスで、OVHcloud Data Platformでは利用できません。現在のチュートリアルをご覧ください。
このチュートリアルでは、カスタムエスティメーターを機械学習パイプラインで使用する方法を説明します。
標準エスティメーターとは異なり、カスタムエスティメーターを使用すると、Python 3+のコードをアップロードして、パイプライン内のトレーニングスクリプトとして実行できます。以下のチュートリアルでは、Scikit Learnフレームワークのエスティメーターの例を示します。
このチュートリアルでは、ForePaaSのSDKの関数も使用します。これは、ForePaaSのデータプロジェクトの残りの部分に接続するためのツールを提供します。
前提条件
!> Machine Learning Managerの入門チュートリアルをまだ実施していない場合は、以下の前提条件を実施してください。
このチュートリアルを実施する前に:
- このガイドで必要な2つのデータファイルを含むこのzipファイルをダウンロードします:ml_dataset.csvとml_sample.csv。
- ファイルをConnectorsに読み込みます:
- ファイルをConnectorsのSourcesタブに読み込みます。
- Analyzerでメタデータを抽出します。
- Lakehouse Managerでデータモデルを構築します:
- 両方のテーブル(それぞれml_datasetとml_sampleと名前を付けます)をTablesタブに追加します。
- 対応するLoadアクションを有効にすることを忘れないでください。
- 両方のテーブルの主キーとしてdateとstation_idが設定されていることを確認します。
- Playアイコンをクリックしてモデルを保存し、構築します。
- Data Processing Engine (DPE)で物理データを処理します:
- DPEを開き、Workflowsタブに移動します。
- 両方の新しく作成されたLoadアクションを含むワークフローを作成します。
- ワークフローを実行し、ジョブが完了するまで数分待ちます。
- Lakehouse Managerに戻り、Tablesタブのリストビューで、両方のテーブルがデータで埋められていることを確認します(行数が0より大きい)。
準備完了です! 今作成したサンプルデータモデルは、今から構築する機械学習モデルで使用されます。
準備はできましたか? では、始めましょう! 🏃
新しいパイプラインを作成する
Machine Learning Managerを開きます。ウェルカムページでNew Projectをクリックし、Pipelineを選択します。

ForePaaSで新しいMLパイプラインを作成しました。Datasetパネルを開きます。

パイプラインのデータ準備ステップを入門チュートリアル ここに示されているように設定します。入力テーブルとしてml_datasetを使用します。冗長な変数を削除することを忘れないでください。
以下のスクリーンショットのように画面が表示されたら、Trainingをクリックしてトレーニング手順に進みます。

カスタムトレーニングスクリプトをアップロードする
Custom Estimatorを選択します。これにより、パイプラインのトレーニング手順をカスタマイズできます。

次に、パイプラインのフレームワークを指定します。Custom Scikit Learnを選択します。

このフレームワークを使用すると、Scikit Learnライブラリと互換性のあるエスティメーターを含むPythonの.pyファイルをアップロードできます。サポートされているライブラリには、Scikit Learn、XGBoost、lightgbmなどが含まれます。
このフレームワークを選択すると、パイプラインの環境でscikit-learnとForePaaSのSDKに付属するライブラリがデフォルトでインポートされます。
以下のボックスにトレーニングスクリプトをアップロードする必要があります:

以下は、特徴量エンジニアリングを含むml_datasetの例に合わせてカスタマイズされたサンプルカスタムエスティメーターです。scikit-learnの例に従い、sklearn.pipeline]を使用して、スクリプトには以下が含まれます:
- ForePaaSのSDK関数を使用して取得:
- トレーニングデータセットとテストデータセット(事前に設定済み)
- バリデーション構成(インターフェースでデフォルトの80%/20%に設定)
- ハイパーパラメータグリッド(後で登録します)
- 数値変数のスケーリング
- 一部のカテゴリ変数の基本的な処理(ワンホットエンコーディング)
- ハイパーパラメータチューニングとバリデーションを使用したRandomForestClassifierエスティメーターのフィッティング
上記のスニペットを.pyファイルとして保存し、ForePaaSパイプラインにアップロードします。

トレーニングジョブが起動されたとき、この.pyファイルが実行されるファイルです。トレーニングデータセットに基づいてフィットされたエスティメーターを返すevent]を最初の引数として持つ関数が含まれています。
この関数の名前は、ここではmy_random_forest]で、function nameボックスに記載する必要があります。

バリデーション構成はデフォルトのままにしておきます。バリデーションセットはトレーニングセットの20%のランダム抽出です。

最後に、最適化するハイパーパラメータグリッドを指定する必要があります。
カスタムハイパーパラメータの入力
パイプラインのチューニングステップに進みます。

標準のScikit Learn推定器を使用していた場合、このページには推定器のハイパーパラメータとそのデフォルト値がすべて事前入力されています。しかし、カスタムスクリプトを使用しているため、このハイパーパラメータチューニングスタジオは、トレーニングスクリプトに渡すことができるキー値オブジェクトのレジストリに変わります。
?> ここで何も変更しない場合、パイプラインを実行すると、Scikit Learnモデルがすべてのハイパーパラメータのデフォルト値を使用してトレーニングされます。
追加をクリックして新しいハイパーパラメータを作成します。

トレーニングスクリプトで以前使用したコードスニペットは、classifierステップでRandomForestClassifier()をPipelineオブジェクトにカプセル化しています。そのため、RandomForestClassifierに渡したいすべてのパラメータは、nameOfTheStepInSklearnPipeline__(ダブルアンダースコア)で始まる必要があります。
この場合、n_estimatorsハイパーパラメータにグリッドサーチを追加する場合は、classifier__n_estimatorsと名前を付けます。

そのタイプをNumberに切り替えることを確認してください。

次に、モードを複数に切り替えます。空のオプションを削除し、Enterキーを押しながらいくつかの値を追加します:5、10、50、100、500、1000。

これで、ForePaaSパイプラインを実行する準備が整いました。右上の再生をクリックし、すべてのステップを再生します。

ForePaaSパイプラインは、6つの異なる組み合わせをトレーニングし、検証セットで最も高いスコアのモデルを保持し、テストセットでスコアを付け、モデルAPIによって提供されるモデルをデプロイします。これは最大10分かかる場合があります。
パイプライン実行が完了したら、モデル選択ステップに移動してデプロイされたモデルを表示します。

これで完了です!カスタムMLモデルがライブになり、ユーザーがアクセスできるようになりました。モデルAPIにコンサマーを追加して、モデルをライブまたはバッチ予測に使用できます。また、トリガーを追加して、自動的に再トレーニング/再デプロイすることもできます。
おめでとうございます! 🎉🎊
ForePaaS Getting Furtherチュートリアルを完了しました! これで、独自のカスタム機械学習パイプラインを構築する準備が整いました。
3分 ⌛をかけてこの短いアンケートに回答してください。これにより、体験の中でうまくいったこととそうでなかったことを理解するのに役立ち、このチュートリアルをさらに改善することができます。

もちろん、このチュートリアルにいつでも戻ってくることができます!必要に応じて、製品の特定のコンポーネントについてさらに深く掘り下げるために、ドキュメントの残りの部分を確認することをお勧めします。
さらに!
このチュートリアルが気に入りましたか?さらに知りたいですか?心配しないでください、私たちはあなたをサポートします。ドキュメントでMachine Learning Managerのカスタマイズ機能についてさらに深く掘り下げることができます!
また、何か必要な場合は、お問い合わせください。サポートチームと製品チームは、あなたが考えているAIアプリケーションをより早く提供するのをお手伝いするために専門的にサポートしています。

