You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用CatBoost编码数据集?训练后转换分类变量方法求助

用CatBoost原生工具转换分类变量的方法

如果你已经用CatBoost训练完模型,想要用和训练阶段一致的逻辑转换分类变量,这里有几个靠谱的方案:

方案1:直接用训练好的模型做编码

CatBoost模型本身已经记住了训练时处理分类变量的规则,直接调用它的transform方法就能得到和训练时一致的编码结果:

import catboost as cb

# 加载你已经训练好的模型
model = cb.CatBoostClassifier()  # 回归模型换成CatBoostRegressor即可
model.load_model('你的训练模型文件.cbm')

# 对新数据执行编码,prediction_type='RawFormulaVal'会输出模型内部使用的特征值
transformed_data = model.transform(你的新数据集, prediction_type='RawFormulaVal')

方案2:单独提取CatBoost的编码逻辑

如果不想依赖整个训练好的模型,可以用CatBoost的Pool类单独处理分类变量编码,保证和训练时的规则一致:

import catboost as cb

# 先定义你的分类列名称
cat_features = ['分类列1', '分类列2']

# 用训练数据创建Pool,让CatBoost学习分类变量的编码规则
train_pool = cb.Pool(训练数据集, label=训练标签, cat_features=cat_features)

# 获取训练数据的编码结果(可选操作)
encoded_train_data = train_pool.get_features()

# 对新数据应用同样的编码规则
test_pool = cb.Pool(新数据集, cat_features=cat_features, column_description=train_pool.column_description)
encoded_test_data = test_pool.get_features()

方案3:用category_encoders的CatBoostEncoder适配(仅适用于训练时就用它编码的情况)

如果你训练模型时就是用这个编码器处理的分类变量,那直接保存编码器,后续加载使用即可:

from category_encoders import CatBoostEncoder
import joblib

# 初始化编码器并指定分类列
encoder = CatBoostEncoder(cols=cat_features)

# 用训练数据拟合编码器并转换
encoded_train = encoder.fit_transform(训练数据集, 训练标签)

# 保存编码器到本地
joblib.dump(encoder, 'catboost_encoder.pkl')

# 后续加载编码器转换新数据
loaded_encoder = joblib.load('catboost_encoder.pkl')
encoded_new_data = loaded_encoder.transform(新数据集)

注意:这个编码器的逻辑和CatBoost原生编码有差异,要是你训练时用的是CatBoost原生处理,别用这个方案,会导致编码逻辑不一致。

内容的提问来源于stack exchange,提问作者André Godoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 17:50:28