注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

コードリポジトリ内のデータセットモデル

データセットモデルは、Code Workbookとコードリポジトリから作成することができます。Code Workbookはよりインタラクティブで高度なプロット機能を備えていますが、コードリポジトリは完全なGit機能、PRワークフロー、メタプログラミングをサポートしています。

このワークフローは、コードリポジトリとPythonトランスフォームについての知識を前提としています。

コードリポジトリでのモデル作成

セットアップ

新しいリポジトリを作成した(または既存のものを開いた)ら、foundry_mlscikit-learnConda環境で利用可能であることを確認します。結果はmeta.yamlファイルを調査することで確認できます。以下のコードを実行するためには、必要なmeta.yamlファイルの例を以下に示します:

img

ロジスティック回帰モデルの作成

transformデコレーターを使用して、Modelオブジェクトのmodel.save(transform_output)インスタンスメソッドを使用してモデルを保存します。

**注:**以下に示すコードでは、複数のStageオブジェクトが作成され、一つのトランスフォーム内で一つのModelに結合されています。これは、Code WorkbookベースのGetting Startedチュートリアルで別々に保存されたステージとは異なります。どちらのアプローチでも問題ありません。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 from sklearn.compose import make_column_transformer from sklearn.linear_model import LogisticRegression from transforms.api import transform, Input, Output from foundry_ml import Model, Stage from foundry_ml_sklearn.utils import extract_matrix @transform( iris=Input("/path/to/input/iris_dataset"), out_model=Output("/path/to/output/model"), ) def create_model(iris, out_model): df = iris.dataframe().toPandas() column_transformer = make_column_transformer( ('passthrough', ['sepal_width', 'sepal_length', 'petal_width', 'petal_length']) ) # カラムトランスフォーマをフィットさせ、ベクトル化器として機能させる column_transformer.fit(df[['sepal_width', 'sepal_length', 'petal_width', 'petal_length']]) # ベクトル化器を Stage としてラップし、モデルで適用する変換を示す vectorizer = Stage(column_transformer) # ベクトル化器を適用して、すべての元の列とベクトル化されたデータの列を持つデータフレームを生成します。デフォルトの名前は "features" です。 training_df = vectorizer.transform(df) # ベクトルの列を NumPy 行列に変換し、疎行列を処理するためのヘルパー関数があります X = extract_matrix(training_df, 'features') y = training_df['is_setosa'] # ロジスティック回帰モデルを学習させる - 将来の警告を防ぐためにソルバーを指定する clf = LogisticRegression(solver='lbfgs') clf.fit(X, y) # 変換のパイプラインが含まれるモデルオブジェクトを返す model = Model(vectorizer, Stage(clf, input_column_name='features')) # モデルを保存する構文 model.save(out_model)

モデルの読み込みと使用

transform デコレータを使用して、Model クラスの Model.load(transform_input) クラスメソッドを使ってモデルを読み込みます。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 @transform( in_model=Input("/path/to/output/model"), # 出力モデルへのパス test_data=Input("/path/to/data"), # データへのパス out_data=Output("/path/to/output/data/from/applying/model"), # モデル適用後のデータ出力へのパス ) def apply_model(in_model, test_data, out_data): # 上記で保存されたモデルを読み込む model = Model.load(in_model) # スコアリングまたはテスト用データセットにモデルを適用する pandas_df = test_data.dataframe().toPandas() output_df = model.transform(pandas_df) # 変換の出力には、numpy配列の列が含まれているため、保存する前にキャストする output_df['features'] = output_df['features'].apply(lambda x: x.tolist()) # モデル適用結果を書き込む out_data.write_pandas(output_df)

MetricSetsの保存と読み込み

MetricSetsは、Modelと同じ構文を使用して保存および読み込みが行われます。つまり、metric_set.save(transform_output) および MetricSet.load(transform_input) です。

Modelを生成するのと同じトランスフォームからMetricSetsを生成することができます(例えば、訓練時のホールドアウトメトリクス)または、Modelを読み込み、実行する下流のトランスフォームから生成することもできます。

モデルの自動提出

ベータ機能

これは積極的に開発中の実験的な機能です。ユーザーインターフェースは、今後のバージョンで変更される可能性があります。

Code Repositoriesでは、モデルを構築したときに、自動的にModeling objectiveに提出するように設定することができます。この設定を行うと、Modeling objectiveはモデルにサブスクライブし、そのモデルにトランザクションが成功したたびに新しい提出が作成されます。

前提条件

この機能を使用するには、まず次のことを行う必要があります:

  • Transforms Python Code Repositoryを作成します。リポジトリの設定方法については、Python transforms tutorialを参照してください。

  • meta.yaml ファイルに foundry_ml パッケージをランタイム依存性として追加し、変更をコミットします。コミットが完了すると、下記のスクリーンショットに示すように、インターフェースの下部の他のパネルと並んでModeling objectiveヘルパーパネルが表示されます。

新規設定済みのCodeリポジトリ

  • モデルデータセットを出力するトランスフォームを作成します。詳細は上記を参照してください。
  • データセットを少なくとも一度ビルドします。これにより、ヘルパーパネルがリポジトリ内のモデルを検出し、自動提出の設定を可能にします。

自動提出の設定

自動提出は、一度に一つのモデルに対してのみ設定することができます。これは、各モデルを個別に選択することにより行います。複数のモデルが選択されている場合、モデルが提出している目標のリストを表示することはできますが、一括して自動提出を設定することはできません。

モデルに対して自動提出を設定するには、インターフェースの左側のModelsパネルからモデルを選択し、Select modeling objectiveボタンをクリックし、モデルが提出する目標を選択します。

Modeling objective helper panel

モデルは、構築されたときに自動的にその目標に提出します。追加の目標に提出するには、Add additional modeling objectiveをクリックし、これらの手順を繰り返します。

ヘルパーパネルの設定済みモデル

自動提出の無効化

特定のモデルの目標への提出を停止するには、インターフェースの左側のModelsパネルからモデルを選択し、削除したい目標の横にある三つの点(...)をクリックします。

目標のオプションメニュー

Remove objectiveを選択し、決定を確認します。

目標の削除確認ダイアログ

条件に基づく自動提出

設定されている場合、モデルはそのモデルにトランザクションが成功したたびに自動的に提出されます。しかし、毎回の再訓練後にモデルを再提出することが望ましいわけではないため、ユーザーの望む条件に基づいてモデルの再訓練と自動提出を中止することができます。

例として、訓練時に前回の提出よりも低いホールドアウトメトリクスを持つモデルの再訓練後に自動提出を停止することができます。これを行うには、モデルの再訓練トランスフォームで以下の手順を実行します:

  1. モデルを再訓練し、上記で説明したように新しいホールドアウトメトリクスを生成します。
  2. Foundryのincremental transform behaviorを使用して、以前のホールドアウトメトリクスを読み込みます。
  3. 新しいホールドアウトメトリクスと以前のホールドアウトメトリクスを比較します。
    • 新しいホールドアウトメトリクスが以前のメトリクスよりも優れている場合は、model.save(transform_output)でモデルを保存します。
    • 新しいホールドアウトメトリクスが以前のメトリクスよりも劣る場合は、モデル訓練トランスフォームを中止します。これによりモデルの自動提出も中止されます。

上記の手順は、モデルの再訓練中に多くのライブチェックを行うために簡単に再利用することができます。

自動再訓練の設定

自動提出は、ビルドスケジュールと組み合わせることで、システマティックなモデルの再訓練を設定することができます。

モデルに自動提出を設定したら、そのモデルにスケジュールを追加します。必要に応じて、上流のデータセットも含めることができます。例えば:

  • モデルを生成するトランスフォームが別々に訓練されたステージを含む場合、スケジュールにこれらを含めることが望ましいかもしれません。
  • 一部のケースでは、訓練データセットをスケジュールの一部として含めることが適切かもしれません。

これで、スケジュール内で時間およびイベントベースのトリガーの任意の組み合わせを設定することができます。

一般的な設定には以下のようなものがあります:

  • 純粋に時間ベースのトリガー(例:24時間ごとに再訓練)。
  • 純粋にイベントベースのトリガー(例:訓練セットが更新されるたびに再訓練)。
  • 上記のANDまたはORの組み合わせを使用した高度な設定。

高度な再訓練トリガー

高度な再訓練トリガーを進める前に、incremental transformsについて理解しておくことをお勧めします。

いくつかのケースでは、計算負荷の高い訓練ジョブなど、モデルのビルドスケジュールを設定して、他のデータセットに基づいてモデルの再訓練をトリガーすることができます。これにより、特徴のドリフト、スコアのドリフト、観察されたモデルの劣化、ユーザーフィードバック、またはその他の指標に基づいて再訓練をトリガーすることができます。

これを行うには、"alerts"データセットを作成し、スケジュールすることをお勧めします。これには、ユーザーのユースケースに適した要素の組み合わせを使用します:

モデル再訓練フロー

ユーザーのロジックをエンコードするために、コードベースのツールまたは低/ノーコードツール(例えばContour)を使用することができます。

アラートのロジックの下流で、コードリポジトリ内のPythonトランスフォームを使用して、追加のみのインクリメンタルな"alerts"データセットを生成します。トランスフォームのロジックで、新しいアラートがないときはトランザクションを中止します。

これで、モデルの再訓練スケジュールを"Transaction committed"イベントトリガーでトリガーすることができます。

また、アラートデータセットにヘルスチェックを設定したり、カスタムレビューアプリケーションで使用することもできます。