特徵編碼方法 OneHotEncoding

2021-09-02 23:46:20 字數 2103 閱讀 6848

對於一些特徵工程方面,有時會用到labelencoder和onehotencoder。

一、為什麼需要這種編碼方式

在實際的機器學習的應用任務中,特徵有時候並不總是連續值,有可能是一些分類值,如性別可分為「male」和「female」,如果我們用簡單的0,1代替就會有問題,因為男女之間不存在大小關係。

二.  為什麼使用one-hot編碼來處理離散型特徵?

1.使用one-hot編碼,將離散特徵的取值擴充套件到了歐式空間,離散特徵的某個取值就對應歐式空間的某個點。

2.將離散特徵通過one-hot編碼對映到歐式空間,是因為,在回歸,分類,聚類等機器學習演算法中,特徵之間距離的計算或相似度的計算是非常重要的,而我們常用的距離或相似度的計算都是在歐式空間的相似度計算,計算余弦相似性,基於的就是歐式空間。

3.將離散型特徵使用one-hot編碼,確實會讓特徵之間的距離計算更加合理。比如,有乙個離散型特徵,代表工作型別,該離散型特徵,共有三個取值,不使用one-hot編碼,其表示分別是x_1 = (1), x_2 = (2), x_3 = (3)。兩個工作之間的距離是,(x_1, x_2) = 1, d(x_2, x_3) = 1, d(x_1, x_3) = 2。那麼x_1和x_3工作之間就越不相似嗎?顯然這樣的表示,計算出來的特徵的距離是不合理。那如果使用one-hot編碼,則得到x_1 = (1, 0, 0), x_2 = (0, 1, 0), x_3 = (0, 0, 1),那麼兩個工作之間的距離就都是sqrt(2).即每兩個工作之間的距離是一樣的,顯得更合理。

4.對離散型特徵進行one-hot編碼是為了讓距離的計算顯得更加合理。

5.將離散型特徵進行one-hot編碼的作用,是為了讓距離計算更合理,但如果特徵是離散的,並且不用one-hot編碼就可以很合理的計算出距離,那麼就沒必要進行one-hot編碼,比如,該離散特徵共有1000個取值,我們分成兩組,分別是400和600,兩個小組之間的距離有合適的定義,組內的距離也有合適的定義,那就沒必要用one-hot 編碼

離散特徵進行one-hot編碼後,編碼後的特徵,其實每一維度的特徵都可以看做是連續的特徵。就可以跟對連續型特徵的歸一化方法一樣,對每一維特徵進行歸一化。比如歸一化到[-1,1]或歸一化到均值為0,方差為1

三、onehotencoding具體使用例項

我的原資料是這個樣子

運動型別(逗號隔開)131

2321234

1343

2346

2434

4235

12325

5236

1235

5464

1426

2354

36264

5623564

1261235

25415

357354

具體**:

import pandas as pd

from sklearn import preprocessing

data = pd.read_csv('k-means.csv',encoding='utf-8')

x_1 = data[['type']]

enc = preprocessing.onehotencoder()

x_1_new = enc.fit(x_1)

x_2_new = x_1_new.transform(x_1).toarray()

print(x_2_new)

然後結果如下,由於結果太長沒顯示完全:

四 、獨熱編碼優缺點

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

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

四. 什麼情況下(不)用獨熱編碼?

總的來說,要是one hot encoding的類別數目不太多,建議優先考慮。 

Python 字元編碼方法

ascii標準在美國建立,並且定義了大多數美國程式設計師使用的文字字串表示法。ascii定義了從0到127的字元 並且允許每個字元儲存在乙個8位的位元組中 實際上,只 有其中的7位真正用到 例如,ascii標準把字元 a 對映為整數值97 十六進製制中的0x61 它儲存在記憶體和檔案的乙個單個位元組...

沙皮狗丁編碼方法

這是乙個突如其來的拍腦袋的想法,源於這兩天看codeigniter源 的時候那個又長又臭的配置檔案,相信經常用開源軟體的朋友都見識過他們的配置檔案,常常都是幾百上千行的 apache的httpd.conf就有差不多1000行 而實際起作用的,卻只不過是十幾行。於是乙個拍腦袋的想法就出來了 為什麼不把...

狀態機狀態編碼方法

常用的編碼有三種 二進位制編碼 gray碼 one hot編碼。另外,還可以自定義編碼,比如在高速設計中以狀態編碼作為輸出。一 二進位制編碼 順序二進位制編碼,即將狀態依次編碼為順序的二進位制數。順序二進位制編碼是最緊密的編碼,優點在於它使用的狀態向量位數最少。例如對於6 個狀態的狀態機,只需要 3...