张量流中的一种热编码是什么?


Answers:


14

假设您的数据集中具有分类特征(例如颜色)。您的样本可以是红色,黄色或蓝色。为了将此参数传递给ML算法,您首先需要对其进行编码,以便使用数字代替字符串。

做这种事情的最简单方法是创建一个映射,其中:

红色-> 1
黄色-> 2
蓝色-> 3

并将每个字符串替换为其映射值。

但是,这可能会在我们的ML模型中产生不必要的副作用,因为在处理数字时,它可能会认为蓝色>黄色(因为3> 2)或红色+黄色=蓝色(因为1 + 2 = 3)。该模型无法知道这些数据是分类的,然后被映射为整数。

解决此问题的方法是一站式编码,我们在其中创建N个 新特征,其中N是原始特征中唯一值的数量。在我们的示例中,N等于3,因为我们有3种独特的颜色(红色,黄色和蓝色)。

以下是这些功能是二进制的,并会对应一个这些独特的价值观。在我们的示例中,第一个特征将是二进制特征,告诉我们该样本是否为红色,第二个特征对于黄色是相同的,而第三个特征对于蓝色是相同的。

下面说明了这种转换的示例:

请注意,由于此方法会增加数据集的维数,因此,如果我们有一个采用许多唯一值的功能,则可能要使用更稀疏的编码(如我上面介绍的那样)。


3

深度:定义一个热尺寸深度的标量。

指数:指数张量。

这个例子在tensorflow文档中给出。
1.仅指定索引和深度(on_value的默认值为1,off_value的默认值为0)

 indices = [0, 1, 2]
    depth = 3
    tf.one_hot(indices, depth)  # output: [3 x 3]
    # [[1., 0., 0.],
    #  [0., 1., 0.],
    #  [0., 0., 1.]]
  1. 指定on_value和off_value
索引= [0,2,-1,1]
深度= 3
tf.one_hot(指标,深度,on_value = 5.0,off_value = 0.0,axis = -1)
##输出:[4 x 3]
    #[[5.0,0.0,0.0],#one_hot(0)
    #[0.0,0.0,5.0],#one_hot(2)
    #[0.0,0.0,0.0],#one_hot(-1)
    #[0.0,5.0,0.0]]#one_hot(1)

您还可以在GitHub上查看代码


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.