注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。
以下文档描述了foundry_ml
库,该库不再推荐在平台中使用。相反,请使用palantir_models
库。您还可以通过一个示例学习如何从foundry_ml
迁移模型到palantir_models
框架。
foundry_ml
库将于2025年10月31日移除,这与计划弃用Python 3.9相对应。
可以从代码工作簿和代码库中创建数据集模型。代码工作簿更具交互性,并配有高级绘图功能,而代码库支持完整的Git功能、PR工作流和元编程。
此工作流假定您熟悉代码库和Python变换。
一旦您创建了一个新的库(或打开了一个现有的库),请确保foundry_ml
和scikit-learn
在conda环境中可用。您可以通过检查meta.yaml
文件来验证结果。要运行下面的代码,以下是您需要的meta.yaml
文件示例:
使用transform
装饰器,通过您的Model
对象的model.save(transform_output)
实例方法保存模型。
注意: 在下面显示的代码中,多个Stage
对象被创建并在一个变换中组合成一个Model
,这与代码工作簿中入门教程中分别保存阶段的方法不同。两种方法都可以。
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
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 = 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)
指标集使用与模型相同的语法进行保存和加载,即 metric_set.save(transform_output)
和 MetricSet.load(transform_input)
。
您可以从生成模型的相同变换(例如训练时的保留指标)或从加载并运行模型的下游变换中生成指标集。
这是一个正在积极开发的实验性功能。用户界面可能会在即将发布的版本中更改。
在代码仓库中,模型可以配置为在搭建时自动提交到建模目标。配置后,这意味着建模目标将订阅该模型,并在事务成功提交到该模型时创建新的提交。
要使用此功能,您必须首先:
创建一个变换Python代码仓库。请参阅Python变换教程以获取有关设置仓库的信息。
将 foundry_ml
包作为运行时依赖项添加到您的 meta.yaml
文件中并提交更改。提交后,您将在界面的底部看到建模目标助手面板,如下图所示。
自动提交只能通过单独选择每个模型来为一个模型配置。如果选择了多个模型,您可以查看模型提交的目标列表,但不能批量配置自动提交。
要为模型配置自动提交,请从界面左侧的模型面板中选择模型,点击选择建模目标按钮,并选择您希望模型提交的目标。
现在,模型将在搭建后自动提交到该目标。要添加额外的提交目标,请点击添加额外的建模目标并重复这些步骤。
要停止将特定模型提交到某个目标,请从界面左侧的模型面板中选择模型,并点击您要移除的目标旁边的三个点(...)。
选择移除目标并确认您的决定。
如果配置了自动提交,则每当事务成功提交到该模型时,模型将自动提交。然而,由于并不总是希望在每次重新训练后重新提交模型,因此可以根据您所需的标准中止模型重新训练和自动提交。
例如,如果模型在训练时的保留指标低于之前的提交,您可以在重新训练后停止自动提交。为此,请在您的模型重新训练变换中执行以下步骤:
model.save(transform_output)
保存模型。上述步骤可以轻松重新用于在模型重新训练期间执行许多实时检查。
自动提交结合搭建计划,使您能够设置系统化的模型重新训练。
一旦您在模型上设置了自动提交,请为该模型添加一个计划。如果需要,还可以包括上游数据集。例如:
您现在可以在计划中设置任何组合的基于时间和事件的触发器。
常见配置包括:
AND
或OR
组合的高级配置。我们建议在继续高级重新训练触发器之前先熟悉增量变换。
在某些情况下,例如计算昂贵的训练任务,您可以通过将模型搭建计划配置为从模型生命周期中的其他数据集触发来有选择地重新训练模型。这使您能够基于特征漂移、评分漂移、观察到的模型降级、用户反馈或其他指标触发重新训练。
为此,我们建议创建并安排一个“警报”数据集。这可以使用适合您应用案例的因素组合:
您可以使用基于代码或低/无代码的工具(例如Contour)来编码您的逻辑。
在警报逻辑的下游,使用Python变换在代码仓库中生成一个仅追加的增量“警报”数据集。在您的变换逻辑中,每当没有新警报时,中止事务。
您现在可以在"事务提交"事件触发器上触发您的模型重新训练计划。