这个单热矢量转换如何工作?

时间:2017-07-12 23:03:45

标签: python numpy matrix vector

当我在我的机器学习项目上工作时,我正在寻找一行代码来将我的标签变成一个热门的向量。我在Reddit上遇到了来自u / benanne的这段代码。

np.eye(n_labels)[target_vector]

例如,对于target_vector = np.array([1, 4, 2, 1, 0, 1, 3, 2]),它返回一个热门编码值:

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.]])

虽然它确实有效,但我不确定它是如何工作的或原因。

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

$history = HistoricalPrice::where('item_id', $i->id)->get(); 是选择ndarray中的第一行

ndarray[[0]]

输出

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