首页 > 解决方案 > 在看不见的数据点上使用 category_encoders.TargetEncoder()

问题描述

通常我会以这种方式实例化一个 TargetEncoder:

encoder = TargetEncoder()
X[cat_features] = encoder.fit_transform(X[cat_features],y)
X.head()

然后我将执行我的训练测试拆分,我的所有 X 变量(X_train / X_test)都将被正确编码,我可以测试我的模型的性能,这很棒!

但是,我不明白我将如何更进一步并将其用于“看不见”的样本。假设我测试了我的模型,我认为它有效,然后有人递给我新的观察结果以进行预测。如果没有任何东西,我该怎么做?似乎所有 TargetEncoder 方法都需要一个变量。我尝试使用:

valset[cat_features] = encoder.transform(valset[cat_features])

但得到了错误:

ValueError: Must train encoder before it can be used to transform data.

我尝试在谷歌上搜索值错误,但没有弹出任何看起来有用的信息。

标签: python

解决方案


不要使用普通的 Target Encoder ,而是尝试查看 NestedCVWrapper ,因为这可以帮助避免目标泄漏问题,并在训练/测试集中的分类变量分布存在显着差异时进行适当的处​​理。

NestedCVWrapper 在我尝试使用时会引发相同的错误,transform但我发现该fit_transform方法可以同时接收训练集和验证集,因此您将返回 2 个对象。如果您想查看此实现,请查看此链接:https ://contrib.scikit-learn.org/category_encoders/_modules/category_encoders/wrapper.html#NestedCVWrapper.fit_transform


推荐阅读