1. 程式人生 > >獨熱編碼 one-hot Encoding

獨熱編碼 one-hot Encoding

常需要處理的數值都是稀疏而又散亂地分佈在空間中,然而,我們並不需要儲存這些大數值,這時可以用獨熱編碼。

例如:我們需要處理4維向量空間,當給一個特徵向量的第n個特徵進行編碼時,編碼器會遍歷每個特徵向量的第n個特徵,然後進行非重複計數。若第n個特徵的最大值為K,則就把這個特徵轉換為只有一個值為1而其他值都是0的K+1維向量。

這裡寫圖片描述

每個樣本(5個特徵)經過獨熱碼編碼後轉化成26個特徵(6+5+4+5+6=26)

這裡寫圖片描述

第一個原始特徵最大值為5,因此第一個原始特徵取值種類為6種(0,1,2,3,4,5),則原始資料用一個六源元組來編碼
如:0編碼為(1,0,0,0,0,0)
encoder.active_features_給出了啟用特徵


(1)第一個原始特徵沒有出現數值為0,2,4,因此轉化後的26個特徵中,對應編碼的特徵未啟用(轉化後的特徵下標為0,2,4)
(2)第一個原始特徵沒有出現數值為0,因此轉化後的26個特徵中,對應編碼的特徵未啟用(轉化後的特徵下標為6)
(3)第一個原始特徵沒有出現數值為0,2,因此轉化後的26個特徵中,對應編碼的特徵未啟用(轉化後的特徵下標為11,13)
(4)第一個原始特徵沒有出現數值為0,因此轉化後的26個特徵中,對應編碼的特徵未啟用(轉化後的特徵下標為15)
(5)第一個原始特徵沒有出現數值為0,2,4,因此轉化後的26個特徵中,對應編碼的特徵未啟用(轉化後的特徵下標為20,22,24)
因此啟用特徵陣列為[1 3 5 7 8 9 10 12 14 16 17 18 19 21 23 25]
注:未啟用特徵在所有樣本上的取值為0

encoder.feature_indices_給出了每個原始特徵在轉換後特徵的起始區間:
(1)第一個原始特徵在轉換後特徵的區間[0,6)
(2)第二個原始特徵在轉換後特徵的區間[6,11)
(1)第三個原始特徵在轉換後特徵的區間[11,15)
(1)第四個原始特徵在轉換後特徵的區間[15,20)
(1)第五個原始特徵在轉換後特徵的區間[20,26)

n_values_給出了每個原始屬性的取值的種類:6,5,4,5,6
注:n_values是一個數組,存放每個屬性取值的種類,一般為訓練資料中該屬性取值的最大值加1,因為預設每個屬性取值從0開始

樣本[1,2,3,4,5]經過獨熱編碼之後的值為[1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 1]。這裡本該26位編碼,但是考慮到剔除未啟用特徵,只給出了啟用特徵,因此這裡只有16位編碼。

這裡寫圖片描述
encoder=OneHotEncoder(sparse=False)
注:這裡sparse是一個布林值,指定結果是否稀疏。若sparse=True,則每個樣本的獨熱碼為一個稀疏矩陣

--------------------- 本文來自 LanboCSDN 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/LanboCSDN/article/details/78291785?utm_source=copy