1. 程式人生 > 其它 >onehot編碼的python詳細實現

onehot編碼的python詳細實現

技術標籤:機器學習機器學習

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)

在這裡插入圖片描述