如何使用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
相关产品推荐
相关产品推荐

