使用category_encoders.看不见的数据点上的TargetEncoder()



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

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

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

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

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

但是得到了错误:

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

我试着在谷歌上搜索这个值错误,但没有出现任何有用的东西。

不要使用普通的目标编码器,而是尝试看看NestedCVRapper,因为这有助于避免目标泄漏问题,并允许在训练/测试集中分类变量的分布之间存在显著差异时进行适当的处理。

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

最新更新