在实现很多机器学习任务的时候,经常需要将labels进行one-hot encoding,具体思想这里就不详述,借一张图来表示:
由于最后的每个label向量只有一个维度的值是1,其他都是0,所以实现方法可以借助线性代数中的单位矩阵 [百度百科] [wikipedia]
Numpy实现可以是这样:
# 函数需不需要返回转置要根据具体情况看
# 如果不转置每个label返回的就是一个行向量
# 这里转置了,每个label就是对应的列向量
def convert_to_one_hot(y, C):
return np.eye(C)[y.reshape(-1)].T
y = np.array([1,2,3,4])
convert_to_one_hot(y,5)
# array([[ 0., 0., 0., 0.],
# [ 1., 0., 0., 0.],
# [ 0., 1., 0., 0.],
# [ 0., 0., 1., 0.],
# [ 0., 0., 0., 1.]])