Catboost:如何在Python中将cat_features传递给保存的模型?

4

我有一个预训练的保存模型,其中我告知了我的分类特征,在训练后进行正确的预测。现在我想再次在另一个上下文中使用它,但是我不知道如何恰当地告知分类特征。我尝试了这个:

model = CatBoostClassifier(cat_features=var_categ)  
model.load_model('catmod.cat')

但是当我尝试预测时:

modelo.predict(base)

我遇到了这个错误:
CatBoostError: features data: pandas.DataFrame column 'cod_var1' has dtype 'category' but is not in  cat_features list

是的,我仔细检查过,这一列确实在 var_categ 中。

2个回答

0
首先,您不需要指定catboost分类器的cat_features,因为模型已经从load_model中具有此信息。
我猜测您的错误来自于当您在新数据集上使用predict时,特征向右移了1个位置,因此导致了错误。

0

没有看到用于训练和预测数据处理的代码,就不太能确定问题所在。这个错误意味着,在模型训练时,“cod_var1”不在分类特征列表中。它可能在“var_categ”中,但是模型表明它不在用于训练模型的分类特征列表中。

在您的数据集“base”中,“cod_var1”是“category” dtype。由于这是CatBoost特定的dtype(不是pandas在创建数据框时自动设置的dtype),因此似乎在数据加载和预测之间有一些代码设置了dtype。我猜想,在您训练模型和现在之间,数据处理步骤中发生了某些变化,导致预测结果不完全相同(具有相同顺序、相同类型的相同列)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接