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

グリッドサーチを実行する

廃止された機能

以下のドキュメントでは、プラットフォームでの使用が推奨されなくなったfoundry_mlライブラリについて説明しています。代わりにpalantir_modelsライブラリを使用してください。foundry_mlからpalantir_modelsフレームワークにモデルを移行する方法についてはこちらの例をご覧ください。

foundry_mlライブラリは、Python 3.9の廃止に伴い、2025年10月31日に削除されます

モデルを開発する際に、ハイパーパラメーターを実験して効果的な値の組み合わせを見つけたい場合があります。Foundry内では、一般的なライブラリやカスタムコードを使用して、モデルのトレーニングジョブの一部としてハイパーパラメーターの最適化を実行し、メトリクスやメタデータと共に1つまたは複数の「最適な」モデルを保存することができます。

この例では、Code Repositories内のPythonトランスフォームを介してscikit-learnのGridSearchCVを使用する方法を示しています。これは、パラメーターセットに対してクロスバリデーションを実行し、最適なモデルを生成する「フィッタブル」クラスでscikit-learn互換のモデルをラップします。

示された実装は、単一の大きなドライバーでグリッドサーチを実行します。リポジトリにプロファイルを有効にする方法については、Sparkプロファイルのドキュメントを参照してください。また、Sparkを活用して分散グリッドサーチを実装することも可能です(たとえば、pandas_udfとトレーニング関数を使用)。ただし、以下では実装されていません。

マルチアウトプット形式は、1つのトランスフォームで複数のモデルをトレーニングする場合にも有用です。

以下の例では、最適なモデルを抽出し、関連する評価メトリクスを保存します。この例では、modeling objectiveチュートリアルの住宅データを使用しています。

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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 from transforms.api import transform, Input, Output, configure from sklearn.compose import make_column_transformer from sklearn.preprocessing import StandardScaler from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import GridSearchCV import pandas as pd from foundry_ml_sklearn.utils import extract_matrix from foundry_ml import Model, Stage from foundry_ml_metrics import MetricSet # 計算リソースの設定 @configure(profile=['DRIVER_CORES_EXTRA_LARGE', 'DRIVER_MEMORY_OVERHEAD_EXTRA_LARGE']) @transform( training_data=Input('/Public/.../training_data'), out_model=Output('/Public/.../mo_model'), out_metrics=Output('/Public/.../mo_training_metrics'), ) def brown_hair_by_sex(training_data, out_model, out_metrics): training = training_data.dataframe().toPandas() # 数値列を特徴ベクトルに変換するためのパススルーオプション column_transformer = make_column_transformer( (StandardScaler(), ['median_income', "housing_median_age", "total_rooms"]) ) # ベクトル化器としてカラム変換器を適合させる column_transformer.fit(training) # モデルに適用される変換であることを示すため、ステージとしてベクトル化器をラップする vectorizer = Stage(column_transformer) training_df = vectorizer.transform(training) # ベクトルの列をNumPy行列に変換し、スパース性を処理するためのヘルパー関数を呼び出す X = extract_matrix(training_df, 'features') y = training_df['median_house_value'] # パラメータグリッドの作成 param_grid = [ {'n_estimators': [3, 10, 30], 'max_features': [2, 3]}, {'bootstrap': [False], 'n_estimators': [3, 10], 'max_features': [2, 3]}, ] # アルゴリズムを選択し、クロスバリデーションに使用する指標を選択 forest_reg = RandomForestRegressor() grid_search = GridSearchCV(forest_reg, param_grid, cv=5, scoring='neg_mean_squared_error') grid_search.fit(X, y) # 内部クロスバリデーションの結果を取得 - 最適なモデル cv_results = pd.DataFrame(grid_search.cv_results_).select_dtypes(include=['number']) # メトリクスを抽出し、辞書に変換 cv_results = cv_results[cv_results['rank_test_score'] == 1].to_dict('records')[0] # 変換のパイプラインを含むモデルオブジェクトを返す model = Model(vectorizer, Stage(grid_search.best_estimator_, input_column_name='features')) # 最良のスコアをメトリクスとして保存 metric_set = MetricSet( model = model, input_data=training_data ) # メトリクスをメトリクスセットに追加 for key, value in cv_results.items(): metric_set.add(name=key, value=value) model.save(out_model) metric_set.save(out_metrics)