Answers:
假设您的数据集中具有分类特征(例如颜色)。您的样本可以是红色,黄色或蓝色。为了将此参数传递给ML算法,您首先需要对其进行编码,以便使用数字代替字符串。
做这种事情的最简单方法是创建一个映射,其中:
红色-> 1
黄色-> 2
蓝色-> 3
并将每个字符串替换为其映射值。
但是,这可能会在我们的ML模型中产生不必要的副作用,因为在处理数字时,它可能会认为蓝色>黄色(因为3> 2)或红色+黄色=蓝色(因为1 + 2 = 3)。该模型无法知道这些数据是分类的,然后被映射为整数。
解决此问题的方法是一站式编码,我们在其中创建N个 新特征,其中N是原始特征中唯一值的数量。在我们的示例中,N等于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.]]
索引= [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)