onehot編碼的python詳細實現
阿新 • • 發佈:2021-01-25
def onehot(label):
#label=[1,2,3,3]
#留下各異的標籤
ulabel=np.unique(label)
#ulabel=[1,2,3]
#檢視一下各異標籤的數量。num_label=3
num_label=ulabel.shape[0]
#檢視訓練資料的個數n=4。
n=label.shape[0]
#初始化最終的one-hot的label。4*3列的最終向量是我們想要的。
"""
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
"""
flabel=np.zeros((n,num_label))
#雙重迴圈判段哪一位應該由0改成1。
for i in range(n):
#判斷第i個訓練資料
for j in range(num_label):
#根據i資料對應的ulabel下標來判斷哪一位由0改成1。
if(label[i]==ulabel[j]):
flabel[i][j]=1
return flabel
"""
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.],
[0., 0., 1.]])
"""
測試如下:
x=np.array([1,2,3,3])
onehot(x)
結果如下:
看懂了,把上面的註釋去掉,如下:
def onehot(label):
#先看一下一共有幾個標籤
ulabel=np.unique(label)
num_label=ulabel.shape[0]
n=label.shape[0]
#初始化最終的one-hot的label.
flabel=np.zeros((n,num_label))
for i in range(n):
for j in range(num_label):
if (label[i]==ulabel[j]):
flabel[i][j]=1
return flabel
注意:
1.輸入的標籤序列label需要是numpy
型別。
2.對於標籤label是字串也同樣適用,無需修改上述程式碼。
#標籤是字串
a=["sad","happy","angry","happy"]
a=np.array(a)
onehot(a)