CatBoost¶
Snowflake ML Model Registry 支持使用 CatBoost 创建的模型(从 catboost.CatBoost 派生的模型,例如 catboost.CatBoostClassifier、catboost.CatBoostRegressor 和 catboost.CatBoostRanker)。
调用 options 时,可以在 log_model 字典中使用下列附加选项:
选项 |
描述 |
|---|---|
|
模型对象上可用方法的名称列表。CatBoost 模型默认具有以下目标方法(假设方法存在): |
|
是否使用 SHAP 启用模型的可解释性功能。默认为 |
|
部署到具有 GPU 的平台时使用的 CUDA 运行时版本;默认值为 11.8。如果手动设置为 |
在登记 CatBoost 模型时,您必须指定 sample_input_data 或 signatures 参数,以确保注册表了解目标方法的签名。
示例¶
这些示例假设 reg 是 snowflake.ml.registry.Registry 的一个实例。
CatBoostClassifier¶
以下示例演示了训练 CatBoost 分类器、将其注册到 Snowflake ML Model Registry 并使用注册模型实现推理和可解释性的关键步骤。工作流程包括:
训练示例数据集上的 CatBoost 分类器。
将模型记录到 Snowflake ML Model Registry。
进行预测并检索预测概率。
获取模型预测的 SHAP 值。
import catboost
from sklearn import datasets, model_selection
# Load dataset
cal_data = datasets.load_breast_cancer(as_frame=True)
cal_X = cal_data.data
cal_y = cal_data.target
# Normalize column names (replace spaces with underscores)
cal_X.columns = [col.replace(' ', '_') for col in cal_X.columns]
cal_X_train, cal_X_test, cal_y_train, cal_y_test = model_selection.train_test_split(
cal_X, cal_y, test_size=0.2
)
# Train CatBoost Classifier
classifier = catboost.CatBoostClassifier(
iterations=100,
learning_rate=0.1,
depth=6,
verbose=False
)
classifier.fit(cal_X_train, cal_y_train)
# Log the model
model_ref = reg.log_model(
model=classifier,
model_name="my_catboost_classifier",
version_name="v1",
sample_input_data=cal_X_test,
)
# Make predictions
result_df = model_ref.run(cal_X_test[-10:], function_name="predict")
# Get prediction probabilities
proba_df = model_ref.run(cal_X_test[-10:], function_name="predict_proba")
# Get explanations (SHAP values)
explanations_df = model_ref.run(cal_X_test[-10:], function_name="explain")
CatBoostRegressor¶
以下示例演示了训练 CatBoost 回归模型、将模型记录到 Snowflake ML Model Registry 并使用已注册模型进行推理的关键步骤。工作流程包括:
基于样本数据集训练 CatBoost 回归模型。
将模型记录到 Snowflake ML Model Registry。
进行预测。
import catboost
from sklearn import datasets, model_selection
# Load dataset
cal_data = datasets.load_diabetes(as_frame=True)
cal_X = cal_data.data
cal_y = cal_data.target
cal_X_train, cal_X_test, cal_y_train, cal_y_test = model_selection.train_test_split(
cal_X, cal_y, test_size=0.2
)
# Train CatBoost Regressor
regressor = catboost.CatBoostRegressor(
iterations=100,
learning_rate=0.1,
depth=6,
verbose=False
)
regressor.fit(cal_X_train, cal_y_train)
# Log the model
model_ref = reg.log_model(
model=regressor,
model_name="my_catboost_regressor",
version_name="v1",
sample_input_data=cal_X_test,
)
# Make predictions
result_df = model_ref.run(cal_X_test[-10:], function_name="predict")
禁用可解释性¶
如果您不需要可解释性功能,您可以在日志记录期间禁用它们,以减少模型大小和依赖项:
model_ref = reg.log_model(
model=classifier,
model_name="my_catboost_classifier_no_explain",
version_name="v1",
sample_input_data=cal_X_test,
options={"enable_explainability": False},
)