One Hot encoder獨熱編碼

2021-08-03 13:05:15 字數 1133 閱讀 7639

ref:

1、什麼是獨熱碼

獨熱碼,在英文文獻中稱做 one-hot code, 直觀來說就是有多少個狀態就有多少位元,而且只有乙個位元為1,其他全為0的一種碼制。

在機器學習中對於離散型的分型別的資料,需要對其進行數位化比如說性別這一屬性,只能有男性或者女性或者其他這三種值,如何對這三個值進行數位化表達?一種簡單的方式就是男性為0,女性為1,其他為2,這樣做有什麼問題?

使用上面簡單的序列對分類值進行表示後,進行模型訓練時可能會產生乙個問題:就是特徵的因為數字值得不同影響模型的訓練效果,在模型訓練的過程中不同的值使得同一特徵在樣本中的權重可能發生變化,假如直接編碼成1000,是不是比編碼成1對模型的的影響更大。為了解決上述的問題,使訓練過程中不受到因為分類值表示的問題對模型產生的負面影響,引入獨熱碼對分型別的特徵進行獨熱碼編碼。

2、編碼過程

假如只有乙個特徵是離散值:

}該特徵總共有3個不同的分類值,此時需要3個bit位表示該特徵是什麼值,對應bit位為1的位置對應原來的特徵的值(一般情況下可以將原始的特徵的取值進行排序,以便於後期使用),此時得到獨熱碼為男性 ,女性,其他

假如多個特徵需要獨熱碼編碼,那麼久按照上面的方法依次將每個特徵的獨熱碼拼接起來:}}

此時對於輸入為進行獨熱編碼,可以首先將***按照上面的進行編碼得到,然後按照grade進行編碼為,那麼兩者連線起來得到最後的獨熱碼;

3、獨熱碼的函式庫

使用python的話sklearn中就封裝了現成的編碼函式,以下為**示例:

from sklearn import preprocessing

enc = preprocessing.onehotencoder()

enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])

enc.transform([[0, 1, 3]]).toarray()

one_hot encoding

輸出結果:

array([[ 1.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  1.]])
spark中也有相應的函式

獨熱編碼OneHotEncoder簡介

在分類和聚類運算中我們經常計算兩個個體之間的距離,對於連續的數字 numric 這一點不成問題,但是對於名詞性 norminal 的類別,計算距離很難。即使將類別與數字對應,例如與 0,1,2 對應,我們也不能認為a與b,b與c距離為1,而a與c距離為2。獨熱編碼正是為了處理這種距離的度量,該方法認...

獨熱編碼函式

想用自己的資料進行獨熱編碼,一開始沒用官方的程式。from sklearn import preprocessing enc preprocessing.onehotencoder 想用這個函式的可以參考博主 我找的是github裡的乙個程式 可以參考下。貼上 def one hot y n cla...

獨熱編碼 One Hot Eocode

假設現在我們要對5張手寫數字進行分類,這些數字的標籤labels的範圍是0 9,形成 5,的行向量,為 5,4,3,8,7 labels 5,4,3,8,7 num classes 10 batch size tf.size labels labels表示的標籤,5張有5個標籤。batch size...