【问题标题】:What is the difference between my own hot_labels and creating hotlabels with functions?我自己的 hot_labels 和用函数创建 hotlabels 有什么区别?
【发布时间】:2019-01-26 18:21:26
【问题描述】:

我是 python 和机器学习的新手,因为我每天都在学习。我想澄清一些事情,这次是关于我的标签。我有 2004 个课程可供分类。我正在从文件名手动构建标签。如下所示

import numpy as np

path = "D:/data/image/1/1/asas1231231231.jpg"

label = np.zeros(2004)

# The line to read the 4th index from path and converting it into integer and then pass it on to the array to have the label
label[int(path.rsplit('/')[4]) - 1 ] = 1

# Which gives me
print(label[0])
1.0

现在我的文件名直到 2004 年,并且在每次读取图像的迭代中,我也在标签中制作标签,然后将它们附加到列表中,例如

training_labels = []

training_labels.append(label)

但是在对标签进行了一些研究之后,我开始了解 np_utils.to_categorical

np_utils.to_categorical(1,2004)

给我

array([[1., 0., 0., ..., 0., 0., 0.]])

我的问题是两者之间有什么区别? 谁能给我解释一下。 我还打印了我的形状

(2004 年,)

有了 np_utils 我得到了

(1,2004)

【问题讨论】:

    标签: python numpy keras


    【解决方案1】:

    我认为“热标签”的真正含义有些混乱。我假设您指的是“一种热编码”,它通常用于在一种热编码特征中编码分类变量(see also here)。例如,如果您有一个变量 men / women,您可以用 0 表示男性,用 1 表示女性。这可能是回归的观点,但对于您的训练标签,它基本上以相同的方式工作。在您的代码中,您似乎正在使用“原始”数字作为标签。这里的固有问题是(在分类中)通常这些类不相互关联。假设您的标签是红色、绿色和黄色。在您的方法中,您会将它们映射到 1,2 和 3 类。这种方法的问题之一是排序没有意义,例如为什么黄色(3)高于红色(1)?为什么红色(1)和绿色(2)之间的距离小于红色(1)和黄色(3)之间的距离?

    为避免此类问题,您可以使用 one-hot 向量对类进行编码。看看输出:

    from keras.utils import np_utils
    np_utils.to_categorical([0, 1,2], 2004)
    >>array([[1., 0., 0., ..., 0., 0., 0.],
           [0., 1., 0., ..., 0., 0., 0.],
           [0., 0., 1., ..., 0., 0., 0.]])
    

    您会看到 to_categorical 函数实际上以 0 开始类。形状是 (3, 2004) 因为我输入了 3 个不同的类 ([0, 1, 2]) 并提供了第二个参数 2004 的类数。这些长度为 2004 的向量中的每一个都代表一个类。根据向量中 1 的位置,定义类。请注意,对于一个类,每个向量都是唯一的。

    最后,看看来自 scikit-learn documentation 的一些示例。

    话虽如此,考虑一下您是否真的想将年份用作类(分类)或数字特征(回归)可能会很有用。这个我不能告诉你。

    HTH

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      相关资源
      最近更新 更多