在我的数据集中,我有一个名为产品的分类特征。在
假设在训练集中中,它的值在{"apple", "banana", "durian", "orange",....}
中。另一方面,在测试集中,值现在可以是{"banana", "orange", pineapple"}
。有一些值在训练集中没有(例如菠萝)。在
我知道,如果我们事先有了所有可能的值,我们就可以创建一个标签编码器变量,并使用该特性可以具有的所有值创建它。但是在这种情况下,我不能保证训练集能够覆盖测试集中的所有值(例如,当一些新产品出现时)。在
这让我非常担心,因为我担心当使用标签编码时,训练集可以映射为{“苹果”:1,“香蕉”:2,“榴莲”:3,“橘子”:4,…(还有数千个)},但在测试集上映射时,我们将得到{“香蕉”:1,“橙色”:2,菠萝:3}。在
我的问题是:
product
特性中的一个重要值,据我所知,模型将更加关注1(apple的数值)。当1在测试集中是banana
时,是否会产生误导?在我找到了一些dataset-or-new-label-encoder">relevant links like this one,但这不完全是我的问题。在
更新:请注意,product
可以有数千个值,这就是为什么我在这里使用标签编码器而不是一个热编码。在
在将分类变量输入ML模型时,必须使用one hot encoding。否则模型将不得不处理
apple < banana < durian < orange
,事实并非如此。在对于测试数据集期间出现的未知值,该变量的所有列都将为零,这最终使模型了解到在训练期间不会看到该值。在
类别:
^{pr2}$在测试数据期间
输出:
如果我处在你的位置,我会用字典来记录训练数据。同样的字典也将用于测试数据。可能存在这样的情况:测试数据具有一些列数据未遇到的值/字。对于这些情况,我将使用一个名为unknown token的特殊索引。因此,我的字典是: {“碜”:0,苹果:1,“香蕉”:2,“榴莲”:3,“橙色”:4}
那么对于测试数据{“香蕉,橘子,菠萝”},我将得到{2,4,0}
我希望这会有用。在
相关问题 更多 >
编程相关推荐