資料預處理之獨熱編碼 標籤編碼與啞編碼

2021-09-19 11:25:34 字數 2415 閱讀 4386

資料分類

我們在用模型去解決機器學習問題的時候,首先很重要的過程就是對特徵的預處理。我們的資料可以分為連續型和離散型。

對於連續型資料,我們一般的做法是對其進行標準化或者歸一化;對於離散型資料,我們基本就是按照one-hot(獨熱)編碼,該離散特徵有多少取值,就用多少維來表示該特徵。

標籤編碼(labelencoder)

labelencoder是用來對分型別特徵值進行編碼,即對不連續的數值或文字進行編碼。例如:人的性別 [male, female],male用「0」表示,female用「1」表示,來自的國家 [from europe, from us, from asia]等這些特徵均可以採用整數的形式進行編碼。

labelencoder在某些情況下很有用,但是場景限制很多。例如: [male, from us] 可表示成 [0, 1] ,[female, from asia] 可表示成[1, 2]。但是,這些整數形式的表示不能直接作為某些機器學習演算法輸入,因為有些機器學習演算法是需要連續型的輸入資料,同一列資料之間數值的大小可代表差異程度。比如 [0, 1]與[0,2]的特徵差異比[0, 0]與[0,2]之間的差異要大,但事實上它們的差異是一樣的,都是來自不同的國家。再比如有[dog,cat,dog,mouse,cat],我們把其轉換為[1,2,1,3,2]。這裡就產生了乙個奇怪的現象:dog和mouse的平均值是cat。所以目前還沒有發現標籤編碼的廣泛使用。

獨熱編碼(onehotencoder)

乙個解決辦法就是採用onehotencoder,這種表示方式將每乙個分類特徵變數的m個可能的取值轉變成m個二值特徵,對於每一條資料這m個值中僅有乙個特徵值為1,其他的都為0。

在回歸,分類,聚類等機器學習演算法中,特徵之間距離的計算或相似度的計算是非常重要的,而我們常用的距離或相似度的計算都是在歐式空間的相似度計算,計算余弦相似性,基於的就是歐式空間。使用one-hot編碼,將離散特徵的取值擴充套件到了歐式空間,這會讓特徵之間的距離計算更加合理。編碼後的特徵可以跟對連續型特徵的歸一化方法一樣,對每一維特徵進行歸一化。下面我們來舉乙個例子,利用sklearn實現獨特編碼。

import numpy as np 

from sklearn import preprocessing

encoder = preprocessing.onehotencoder(

) encoder.fit([[

0,2,

1,12]

,[1,

3,5,

3],[

2,3,

2,12]

,[1,

2,4,

3]])

encoded_vector = encoder.transform([[

2,3,

5,3]

]).toarray(

)print

("\nencoded vector ="

, encoded_vector )

上述**中處理的是乙個四維向量空間,觀察一下每個特徵向量的第乙個特徵,分別是0、1、2、1這4個值,其中有重複數字1所以說獨熱編碼向量的長度是3,如果需要對2進行編碼,那麼向量就是[0, 0, 1];再看每個特徵向量的第二個特徵,分別是2、3、3、2,2和3均為重複數字,所以獨熱編碼向量的長度是2,對3進行編碼的向量為[0, 1];對5進行編碼,看每個特徵向量的第三個特徵,分別為1、5、2、4,無重複數字所以特徵編碼長度為4,對5進行編碼的向量為[0, 0, 0, 1];同理,對最後的3進行編碼的向量為[1, 0]。

輸出結果如下:

encoded vector =[[

0.0.

1.0.

1.0.

0.0.

1.1.

0.]]

獨熱編碼的優點就是解決了分類器不好處理屬性資料的問題,在一定程度上也起到了擴充特徵的作用。它的值只有0和1,不同的型別儲存在垂直的空間。

同時它的缺點顯而易見就是當類別的數量很多時,特徵空間會變得非常大。在這種情況下,一般可以用pca來減少維度。而且one hot encoding+pca這種組合在實際中也非常有用。

啞編碼(dummyencoding)

啞編碼與獨熱編碼的思想大致相同,只是啞變數編碼覺得one-hot編碼太羅嗦,所以它把很很明顯的東西省去了。這種簡化不能說到底好不好,這要看使用的場景。

啞變數編碼直觀的解釋就是任意的將乙個狀態位去除。用上面例子對5進行編碼來說,每個特徵向量的第三個特徵分別為1、5、2、4,對它們進行編碼的向量分別為1–>[1, 0, 0, 0]、2–>[0, 1, 0, 0]、4–>[0, 0, 1, 0]、5–>[0, 0, 0, 1],然而我們用3個狀態位就足夠反應上述4個類別的資訊,也就是我們僅僅使用前三個狀態位 [0,0,0] 就可以表達數字5了。

獨熱編碼處理文字屬性

當資料中存在文字屬性時,機器學習演算法不便於處理文字屬性,這時候需要把文字屬性轉換成數字。轉換時,如果屬性間存在順序關係,例如 冷,暖,熱 可以直接使用整數編碼 但當屬性間沒有順序關係時,例如 紅,綠,藍 則可使用獨熱編碼。獨熱編碼 編碼屬性的值為1,其餘屬性的值為0 一 人工獨熱編碼 from n...

資料預處理1 分類特徵編碼

背景 we don t talk anymore 很多時候,在我們拿到的資料集裡,特徵不都是連續的值,而是由某些離散化取值的資料組成。例如,性別特徵可以具有如下取值 male female 天氣特徵有如下取值 rainy sunny snowy 這樣的特徵是無法直接被模型識別的,因此需要將這些特徵轉...

資料分析與挖掘之資料預處理

目錄 資料整合 簡單變換 資料規範化 標準化 1 離差標準化 歸一化 2 z score標準化 0 1標準化 3 小數定標規範化 資料規範化 離散化 1 等寬離散化 2 等頻率離散化 3 優化離散 資料整合 import numpy a numpy.array 1,5,6 9,4,3 b numpy...