一个热门的编码器是什么行业规范,是在编码/分割之前还是之后进行编码

时间:2019-11-28 08:45:02

标签: python one-hot-encoding

我知道有些人回答了这个问题。我仍然在努力弄清楚这一点。

对于一个热编码器,我仍然有些困惑。我只是在想,如果我们要在拆分之前进行编码,则测试集中不应有任何“信息泄漏”。那么为什么人们提倡在以后进行编码呢?不是仅用于将分类变量转换为二进制的一种热编码器。

如果我们在分割后进行编码,结果可能会发生很大的变化,如此处指出的:Scikit-Learn One-hot-encode before or after train/test split

我只是想知道什么是行业规范。

谢谢

2 个答案:

答案 0 :(得分:1)

一种热编码是一种用于指定数据项所需类别的技术。它是整数编码的替代,您可以在其中放置整数。一个简单的例子是: 假设我们有3类:猫,狗,人

In integer encoding we would give the classes as (say): 
Cat - 1, Dog - 2, Human - 3
In One-hot encoding, we would do these classes as:
Cat - [1,0,0]. Dog - [0,1,0], Human - [0,0,1]

所以您可以了解一个one-hot encoding works only for categorical data

因此,必须以均匀的方式标记整个数据集。 Hence the One-hot encoding has to be performed even before the test-train split.

答案 1 :(得分:1)

特别是对于“一键编码器”而言,它没有太大区别,除非某些类别未在拆分中表示。

但是在这种情况下,会发生 信息泄漏。通过拆分训练/测试数据,您正在尝试模拟模型(包括所有功能选择/转换!)的综合效果。如果测试集中存在某些类别,而训练集中则没有,那么可以说在现实世界中肯定存在您的整个数据集不包含的类别。在这种情况下,如果您在分割之前进行编码,就会背叛自己。

在某些情况下,您可能需要先进行编码。如果您的数据点很少,并且正在采样以获取均衡的拆分,则可能需要确保每个拆分都能获得所有类别,或类似的东西。在这种情况下,可能需要先进行编码。

通常,请始终记住,特征选择和变换是模型的一部分。一键式编码尤其取决于数据,因此适用范围更大。