注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
データセットモデルは、Code Workbookとコードリポジトリから作成することができます。Code Workbookはよりインタラクティブで高度なプロット機能を備えていますが、コードリポジトリは完全なGit機能、PRワークフロー、メタプログラミングをサポートしています。
このワークフローは、コードリポジトリとPythonトランスフォームについての知識を前提としています。
新しいリポジトリを作成した(または既存のものを開いた)ら、foundry_ml
とscikit-learn
がConda環境で利用可能であることを確認します。結果はmeta.yaml
ファイルを調査することで確認できます。以下のコードを実行するためには、必要なmeta.yaml
ファイルの例を以下に示します:
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は、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ヘルパーパネルが表示されます。
自動提出は、一度に一つのモデルに対してのみ設定することができます。これは、各モデルを個別に選択することにより行います。複数のモデルが選択されている場合、モデルが提出している目標のリストを表示することはできますが、一括して自動提出を設定することはできません。
モデルに対して自動提出を設定するには、インターフェースの左側のModelsパネルからモデルを選択し、Select modeling objectiveボタンをクリックし、モデルが提出する目標を選択します。
モデルは、構築されたときに自動的にその目標に提出します。追加の目標に提出するには、Add additional modeling objectiveをクリックし、これらの手順を繰り返します。
特定のモデルの目標への提出を停止するには、インターフェースの左側のModelsパネルからモデルを選択し、削除したい目標の横にある三つの点(...)をクリックします。
Remove objectiveを選択し、決定を確認します。
設定されている場合、モデルはそのモデルにトランザクションが成功したたびに自動的に提出されます。しかし、毎回の再訓練後にモデルを再提出することが望ましいわけではないため、ユーザーの望む条件に基づいてモデルの再訓練と自動提出を中止することができます。
例として、訓練時に前回の提出よりも低いホールドアウトメトリクスを持つモデルの再訓練後に自動提出を停止することができます。これを行うには、モデルの再訓練トランスフォームで以下の手順を実行します:
model.save(transform_output)
でモデルを保存します。上記の手順は、モデルの再訓練中に多くのライブチェックを行うために簡単に再利用することができます。
自動提出は、ビルドスケジュールと組み合わせることで、システマティックなモデルの再訓練を設定することができます。
モデルに自動提出を設定したら、そのモデルにスケジュールを追加します。必要に応じて、上流のデータセットも含めることができます。例えば:
これで、スケジュール内で時間およびイベントベースのトリガーの任意の組み合わせを設定することができます。
一般的な設定には以下のようなものがあります:
AND
またはOR
の組み合わせを使用した高度な設定。高度な再訓練トリガーを進める前に、incremental transformsについて理解しておくことをお勧めします。
いくつかのケースでは、計算負荷の高い訓練ジョブなど、モデルのビルドスケジュールを設定して、他のデータセットに基づいてモデルの再訓練をトリガーすることができます。これにより、特徴のドリフト、スコアのドリフト、観察されたモデルの劣化、ユーザーフィードバック、またはその他の指標に基づいて再訓練をトリガーすることができます。
これを行うには、"alerts"データセットを作成し、スケジュールすることをお勧めします。これには、ユーザーのユースケースに適した要素の組み合わせを使用します:
ユーザーのロジックをエンコードするために、コードベースのツールまたは低/ノーコードツール(例えばContour)を使用することができます。
アラートのロジックの下流で、コードリポジトリ内のPythonトランスフォームを使用して、追加のみのインクリメンタルな"alerts"データセットを生成します。トランスフォームのロジックで、新しいアラートがないときはトランザクションを中止します。
これで、モデルの再訓練スケジュールを"Transaction committed"イベントトリガーでトリガーすることができます。
また、アラートデータセットにヘルスチェックを設定したり、カスタムレビューアプリケーションで使用することもできます。