我知道有些人回答了这个问题。我仍然在努力弄清楚这一点。
对于一个热编码器,我仍然有些困惑。我只是在想,如果我们要在拆分之前进行编码,则测试集中不应有任何“信息泄漏”。那么为什么人们提倡在以后进行编码呢?不是仅用于将分类变量转换为二进制的一种热编码器。
如果我们在分割后进行编码,结果可能会发生很大的变化,如此处指出的:Scikit-Learn One-hot-encode before or after train/test split
我只是想知道什么是行业规范。
谢谢
答案 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)
特别是对于“一键编码器”而言,它没有太大区别,除非某些类别未在拆分中表示。
但是在这种情况下,会发生 信息泄漏。通过拆分训练/测试数据,您正在尝试模拟模型(包括所有功能选择/转换!)的综合效果。如果测试集中存在某些类别,而训练集中则没有,那么可以说在现实世界中肯定存在您的整个数据集不包含的类别。在这种情况下,如果您在分割之前进行编码,就会背叛自己。
在某些情况下,您可能需要先进行编码。如果您的数据点很少,并且正在采样以获取均衡的拆分,则可能需要确保每个拆分都能获得所有类别,或类似的东西。在这种情况下,可能需要先进行编码。
通常,请始终记住,特征选择和变换是模型的一部分。一键式编码尤其取决于数据,因此适用范围更大。