注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。

执行网格搜索

已弃用功能

以下文档描述了不再推荐在平台中使用的foundry_ml库。相反,请使用palantir_models库。您还可以通过一个示例学习如何将模型从foundry_ml迁移到palantir_models框架。

foundry_ml库将于2025年10月31日移除,对应于计划弃用Python 3.9。

在开发模型时,您可能希望尝试超参数,直到找到一个有效的值组合。在Foundry中,您可以使用常见库或自定义代码在模型训练期间执行超参数优化,作为训练任务的一部分,并保存一个或多个“优胜”模型以及指标和元数据。

此示例展示了如何通过代码库中的Python变换使用scikit-learn的GridSearchCV。这将使用一个“可拟合”的类包装一个scikit-learn兼容的模型,该类在参数集上执行交叉验证并产生最佳模型。

所示实现对单个大型驱动器执行网格搜索。请参阅Spark配置文件文档,了解如何为仓库启用配置文件。还可以利用Spark实现分布式网格搜索(例如,使用pandas_udf和训练函数),尽管这在下面没有实现。

多输出格式对于在一次变换中训练多个模型也很有用。

下面的示例提取顶级模型并保存相关的评估指标。此示例使用建模目标教程中的住房数据。

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() # passthrough选项将数值列组合成一个特征向量 column_transformer = make_column_transformer( (StandardScaler(), ['median_income', "housing_median_age", "total_rooms"]) ) # 拟合列转换器以充当矢量化器 column_transformer.fit(training) # 将矢量化器包装为一个Stage以表明这是将在Model中应用的转换 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 = Model(vectorizer, Stage(grid_search.best_estimator_, input_column_name='features')) # 将最佳分数保存为指标 metric_set = MetricSet( model = model, input_data=training_data ) # 将指标添加到metricset中 for key, value in cv_results.items(): metric_set.add(name=key, value=value) model.save(out_model) metric_set.save(out_metrics)