For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/ja/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/ja/llms-full.txt, and this page is available as Markdown at https://docs.dataplatform.ovh.net/ja/legacy/getting-further-ml-custom-sklearn.md.
  • 🇯🇵 日本語
  • カスタム Scikit Learn スクリプトを使用して機械学習パイプラインを作成する

    Warning

    このチュートリアルでは、Machine Learning Managerを使用します。これはForePaaS Legacy Platformのサービスで、OVHcloud Data Platformでは利用できません。現在のチュートリアルをご覧ください。

    このチュートリアルでは、カスタムエスティメーターを機械学習パイプラインで使用する方法を説明します。

    標準エスティメーターとは異なり、カスタムエスティメーターを使用すると、Python 3+のコードをアップロードして、パイプライン内のトレーニングスクリプトとして実行できます。以下のチュートリアルでは、Scikit Learnフレームワークのエスティメーターの例を示します。

    Info

    このチュートリアルでは、ForePaaSのSDKの関数も使用します。これは、ForePaaSのデータプロジェクトの残りの部分に接続するためのツールを提供します。

    前提条件

    !> Machine Learning Managerの入門チュートリアルをまだ実施していない場合は、以下の前提条件を実施してください。

    このチュートリアルを実施する前に:

    • このガイドで必要な2つのデータファイルを含むこのzipファイルをダウンロードします:ml_dataset.csvml_sample.csv
    • ファイルをConnectorsに読み込みます:
      • ファイルをConnectorsのSourcesタブに読み込みます。
      • Analyzerでメタデータを抽出します。
    • Lakehouse Managerでデータモデルを構築します:
      • 両方のテーブル(それぞれml_datasetml_sampleと名前を付けます)をTablesタブに追加します。
      • 対応するLoadアクションを有効にすることを忘れないでください。
      • 両方のテーブルの主キーとしてdatestation_idが設定されていることを確認します。
      • Playアイコンをクリックしてモデルを保存し、構築します。
    • Data Processing Engine (DPE)で物理データを処理します:
      • DPEを開き、Workflowsタブに移動します。
      • 両方の新しく作成されたLoadアクションを含むワークフローを作成します。
      • ワークフローを実行し、ジョブが完了するまで数分待ちます。
      • Lakehouse Managerに戻り、Tablesタブのリストビューで、両方のテーブルがデータで埋められていることを確認します(行数が0より大きい)。

    準備完了です! 今作成したサンプルデータモデルは、今から構築する機械学習モデルで使用されます。

    準備はできましたか? では、始めましょう! 🏃


    新しいパイプラインを作成する

    Machine Learning Managerを開きます。ウェルカムページでNew Projectをクリックし、Pipelineを選択します。

    machinelearning

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

    machinelearning

    パイプラインのデータ準備ステップを入門チュートリアル ここに示されているように設定します。入力テーブルとしてml_datasetを使用します。冗長な変数を削除することを忘れないでください。

    以下のスクリーンショットのように画面が表示されたら、Trainingをクリックしてトレーニング手順に進みます。

    machinelearning


    カスタムトレーニングスクリプトをアップロードする

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

    machinelearning

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

    machinelearning

    このフレームワークを使用すると、Scikit Learnライブラリと互換性のあるエスティメーターを含むPythonの.pyファイルをアップロードできます。サポートされているライブラリには、Scikit Learn、XGBoost、lightgbmなどが含まれます。

    Info

    このフレームワークを選択すると、パイプラインの環境でscikit-learnとForePaaSのSDKに付属するライブラリがデフォルトでインポートされます。

    以下のボックスにトレーニングスクリプトをアップロードする必要があります:

    machinelearning

    以下は、特徴量エンジニアリングを含むml_datasetの例に合わせてカスタマイズされたサンプルカスタムエスティメーターです。scikit-learnの例に従い、sklearn.pipeline]を使用して、スクリプトには以下が含まれます:

    • ForePaaSのSDK関数を使用して取得:
      • トレーニングデータセットとテストデータセット(事前に設定済み)
      • バリデーション構成(インターフェースでデフォルトの80%/20%に設定)
      • ハイパーパラメータグリッド(後で登録します)
    • 数値変数のスケーリング
    • 一部のカテゴリ変数の基本的な処理(ワンホットエンコーディング)
    • ハイパーパラメータチューニングとバリデーションを使用したRandomForestClassifierエスティメーターのフィッティング
    import numpy as np
    
    from sklearn.compose import ColumnTransformer
    from sklearn.pipeline import Pipeline
    from sklearn.impute import SimpleImputer
    from sklearn.preprocessing import StandardScaler, OneHotEncoder
    
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.model_selection import GridSearchCV
    from sklearn.metrics import make_scorer
    
    from forepaas.core.settings import ML_CONFIG
    from forepaas.ml import get_train_dataset, get_hyper_parameters, get_train_scoring_function
    
    
    def my_random_forest(event):
        # Retrieve train dataset. No need to split it since it will be done by cross validation
        x, y = get_train_dataset()
    
        # Retrieve validation settings.
        cv = ML_CONFIG["train"]["execution_options"]["cross_validation"]
        if not cv:
            cv = get_shuffle_split(x, y)
    
        # Retrieve scoring function used for the validation score, and make it compatible with scikit's gridSearchCV
        scoring_function = get_train_scoring_function()
        scoring = make_scorer(scoring_function["func"])
    
        # Retrieve hyper parameters.
        hyper_parameters = get_hyper_parameters()
    
        # Set Column Transformers
        numeric_features = ['cloud_cover','humidity','temperature','wind_speed']
        numeric_transformer = Pipeline(steps=[
            ('imputer', SimpleImputer(strategy='median')),
            ('scaler', StandardScaler())])
    
        categorical_features = ['station_id','month','week_day']
        categorical_transformer = OneHotEncoder(handle_unknown='ignore')
    
        preprocessor = ColumnTransformer(
            transformers=[
                ('num', numeric_transformer, numeric_features),
                ('cat', categorical_transformer, categorical_features)])
    
        # Append classifier to preprocessing pipeline.
        # Now we have a full prediction pipeline.
        clf = Pipeline(steps=[('preprocessor', preprocessor),
                          ('classifier', RandomForestClassifier())])
        # Start grid search with cross validation
        grid_search = GridSearchCV(clf, hyper_parameters, scoring=scoring, cv=cv, return_train_score=True)
        grid_search.fit(x, y)
        return grid_search
    
    
    def get_shuffle_split(x, y):
        from sklearn.model_selection import ShuffleSplit
    
        ratio = ML_CONFIG["train"]["ratio"]
    
        rs = ShuffleSplit(n_splits=1, test_size=ratio)
        return rs.split(x)

    上記のスニペットを.pyファイルとして保存し、ForePaaSパイプラインにアップロードします。

    machinelearning

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

    この関数の名前は、ここではmy_random_forest]で、function nameボックスに記載する必要があります。

    machinelearning

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

    machinelearning

    最後に、最適化するハイパーパラメータグリッドを指定する必要があります。

    カスタムハイパーパラメータの入力

    パイプラインのチューニングステップに進みます。

    machinelearning

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

    ?> ここで何も変更しない場合、パイプラインを実行すると、Scikit Learnモデルがすべてのハイパーパラメータのデフォルト値を使用してトレーニングされます。

    追加をクリックして新しいハイパーパラメータを作成します。

    machinelearning

    トレーニングスクリプトで以前使用したコードスニペットは、classifierステップでRandomForestClassifier()Pipelineオブジェクトにカプセル化しています。そのため、RandomForestClassifierに渡したいすべてのパラメータは、nameOfTheStepInSklearnPipeline__(ダブルアンダースコア)で始まる必要があります。

    この場合、n_estimatorsハイパーパラメータにグリッドサーチを追加する場合は、classifier__n_estimatorsと名前を付けます。

    machinelearning

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

    machinelearning

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

    machinelearning

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

    machinelearning

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

    パイプライン実行が完了したら、モデル選択ステップに移動してデプロイされたモデルを表示します。

    machinelearning

    これで完了です!カスタムMLモデルがライブになり、ユーザーがアクセスできるようになりました。モデルAPIにコンサマーを追加して、モデルをライブまたはバッチ予測に使用できます。また、トリガーを追加して、自動的に再トレーニング/再デプロイすることもできます。


    おめでとうございます! 🎉🎊

    ForePaaS Getting Furtherチュートリアルを完了しました! これで、独自のカスタム機械学習パイプラインを構築する準備が整いました。

    3分 ⌛をかけてこの短いアンケートに回答してください。これにより、体験の中でうまくいったこととそうでなかったことを理解するのに役立ち、このチュートリアルをさらに改善することができます。

    congrats

    もちろん、このチュートリアルにいつでも戻ってくることができます!必要に応じて、製品の特定のコンポーネントについてさらに深く掘り下げるために、ドキュメントの残りの部分を確認することをお勧めします。


    さらに!

    このチュートリアルが気に入りましたか?さらに知りたいですか?心配しないでください、私たちはあなたをサポートします。ドキュメントでMachine Learning Managerのカスタマイズ機能についてさらに深く掘り下げることができます!

    カスタム推定器についてさらに詳しく

    また、何か必要な場合は、お問い合わせください。サポートチームと製品チームは、あなたが考えているAIアプリケーションをより早く提供するのをお手伝いするために専門的にサポートしています。

    ロードマップについて意見を述べる 🚀