模型训练与推理¶
备注
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
)
备注
在这里,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
)
模型训练¶
创建训练数据集后,您可以在训练时将其传递给模型,如下所示。
如果您生成了一个 Snowpark DataFrame,请将其直接传递给模型:
my_model = train_my_model(training_set)
如果您生成了 Snowflake 数据集,请将其转换为 Snowpark DataFrame 并传递给模型:
my_model = train_my_model(dataset.read.to_snowpark_dataframe())
在训练完毕后,模型即可记录到 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)
您可以使用 exclude_columns
实参排除指定的列,或者通过设置 include_feature_view_timestamp_col
来包含特征视图中的时间戳列。