模型训练与推理

备注

Snowflake 特征平台 API 在 Snowpark ML Python 包 (snowflake-ml-python) v1.5.0 及更高版本中提供。

生成用于训练的表

您可以使用特征平台的 generate_training_set 方法生成训练数据集,该方法可通过衍生的特征值充实 Snowpark DataFrame。若要从特征视图中选择特征子集,请使用 fv.slice

对于时序特征,请提供时间戳列名称,以自动执行时间点特征值查找。

training_set = fs.generate_training_set(
    spine_df=MySourceDataFrame,
    features=[registered_fv],
    save_as="data_20240101",                    # optional
    spine_timestamp_col="TS",                   # optional
    spine_label_cols=["LABEL1", "LABEL2"],      # optional
    include_feature_view_timestamp_col=False,   # optional
)
Copy

备注

在这里,spine_df (MySourceDataFrame) 是一个 DataFrame,包含源数据中的实体 IDs,还包含时间戳、标签列及包含训练数据的附加列。系统会针对实体 IDs 列表检索所请求的特征,并根据所提供的时间戳保证时间点正确性。

训练集默认为临时性质;它们仅作为 Snowpark DataFrames 存在,并且不会物化。若要将训练集物化为表,请使用有效且不存在的表名称指定 save_as 实参。该训练集会写入到新创建的表中。

物化表目前不能保证不变性,并且对元数据的支持有限。如果您需要这些功能,请考虑改为使用 Snowflake 数据集

备注

generate_training_set API 在 snowflake-ml-python 版本 1.5.4 或更高版本中可用。

生成用于训练的 Snowflake 数据集

您可以使用特征平台的 generate_dataset 方法生成 Snowflake 数据集。方法签名类似于 generate_training_set;主要区别在于必需的 name 实参、可选的 version 实参和其他元数据字段。generate_dataset 总会物化结果。

Snowflake 数据集提供基于文件的不可变数据快照,有助于确保模型的可复制性以及大型数据集和/或分布式训练的高效数据引入。数据集还扩展了元数据支持,让发现和使用更加轻松。

以下代码展示了从特征视图生成数据集的过程:

dataset: Dataset = fs.generate_dataset(
    name="MY_DATASET",
    spine_df=MySourceDataFrame,
    features=[registered_fv],
    version="v1",                               # optional
    spine_timestamp_col="TS",                   # optional
    spine_label_cols=["LABEL1", "LABEL2"],      # optional
    include_feature_view_timestamp_col=False,   # optional
    desc="my new dataset",                      # optional
)
Copy

模型训练

创建训练数据集后,您可以在训练时将其传递给模型,如下所示。

如果您生成了一个 Snowpark DataFrame,请将其直接传递给模型:

my_model = train_my_model(training_set)
Copy

如果您生成了 Snowflake 数据集,请将其转换为 Snowpark DataFrame 并传递给模型:

my_model = train_my_model(dataset.read.to_snowpark_dataframe())
Copy

在训练完毕后,模型即可记录到 Snowflake 模型注册表 中。

检索特征并进行预测

如果您在 Python 会话中创建了一个模型,则可以从特征平台中检索特征视图并将其传递给模型以执行预测,如下所示:

prediction_df: snowpark.DataFrame = fs.retrieve_feature_values(
    spine_df=prediction_source_dataframe,
    features=[registered_fv],
    spine_timestamp_col="TS",
    exclude_columns=[],
)

# predict with your previously trained model
my_model.predict(prediction_df)
Copy

您可以使用 exclude_columns 实参排除指定的列,或者通过设置 include_feature_view_timestamp_col 来包含特征视图中的时间戳列。

语言: 中文