【问题标题】:How does this one-hot vector conversion work?这种 one-hot 矢量转换是如何工作的?
【发布时间】:2017-12-17 12:59:18
【问题描述】:

当我从事机器学习项目时,我一直在寻找一行代码来将我的标签变成单热向量。我在 Reddit 上从 u/benanne 看到了这行漂亮的代码。

np.eye(n_labels)[target_vector]

例如,对于 target_vector = np.array([1, 4, 2, 1, 0, 1, 3, 2]),它返回 one-hot 编码值:

np.eye(5)[target_vector]
Out: 
array([[ 0.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  1.,  0.,  0.],
       ..., 
       [ 0.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  0.],
       [ 0.,  0.,  1.,  0.,  0.]])

虽然它确实有效,但我不确定它如何或为什么有效。

【问题讨论】:

  • 我从未见过如此优雅的生成 OHV 的方法。
  • 这是top voted SO question. 的第二个答案。可能应该是公认的答案,因为它可以很好地处理 n-d 1HA

标签: python numpy matrix vector


【解决方案1】:

ndarray[[0]]是选择ndarray中的第一行

t = np.arange(9).reshape(3,3)
print t
print t[[1]]

输出是

[[0 1 2]
 [3 4 5]
 [6 7 8]]
[[3 4 5]]

【讨论】:

    【解决方案2】:

    这很简单。 np.eye(n_labels) 创建一个大小为 n_labels 的单位矩阵,然后使用 target_vector 从该矩阵中选择与当前目标的值相对应的行。由于单位矩阵中的每一行都包含一个 1 元素和其余的 0,因此每一行都是有效的“一个热编码”。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2023-03-13
    • 2020-06-30
    • 2020-10-10
    • 2020-02-12
    • 1970-01-01
    相关资源
    最近更新 更多